Vizitator Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Salut! Sunt incepator in programarea lui ESP8266. Dar se pare ca nu este la fel de simplu ca la Arduino Intampin o mica problema cu un cod simplu. Am cautat pe internet exemple cu ESP8266 si OLED cu controller SH1106. Am gasit librarii, am testat exemplele, si am incercat sa fac un numarator simplu: /* Test Numarator ESP8266 > OLED 1,3" - SH1106 */ // For a connection via I2C using Wire include #include <Wire.h> // Only needed for Arduino 1.6.5 and earlier #include "SH1106Wire.h" // legacy include: `#include "SH1106.h"` SH1106Wire display(0x3c, D2, D1); void Counter(void) { int i = 0; if ( i < 10 ) { i++; delay(500); } if ( i >= 10 ) { i = 0; } display.drawString(48, 16, String(i)); } void setup() { // Initialising the UI will init the display too. display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_24); display.setTextAlignment(TEXT_ALIGN_LEFT); display.clear(); } void loop() { Counter(); display.display(); } Rezultatul este ca nu contorizeaza, nu numara. Apare doar cifra "1" si atat. Multumesc! Link spre comentariu
Mircea Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Nu lucrez cu ESP, dar la ce mai foloseste acel display.display() daca afisarea lui i o faci in Counter()? void loop() { Counter(); display.display(); } Link spre comentariu
Vizitator Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 (editat) // write the buffer to the display display.display(); Imi cer scuze, nu am introdus si unele comentarii importante. Fara aceasta linie display.display(); , nu se afiseaza nimic. Editat Noiembrie 17, 2018 de Vizitator Link spre comentariu
Mircea Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Poate il bagi in Counter(). Uitandu-ma inca o data... pai tu initializezi la fiecare ciclu pe i cu 0. Il incrementeaza, il afiseaza... si iar il resetezi la zero. Pai cand sa devina 2, 3, etc... Link spre comentariu
Vizitator Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 (editat) ... if ( i >= 10 ) { i = 0; } display.drawString(48, 16, String(i)); // write the buffer to the display display.display(); } Daca il folosesc asa, numara dar se suprapun cifrele. Editat Noiembrie 17, 2018 de Vizitator Link spre comentariu
Mircea Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Pune int i = 0; inainte de Void loop(). Link spre comentariu
Vizitator Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Acum 2 minute, Thunderer2018 a spus: Pune int i = 0; inainte de Void loop(). Am vazut asta, si l-am pus la inceput SH1106Wire display(0x3c, D2, D1); int i = 0; void count(void) { if ( i < 10 ) { Deci numara, dar se suprapun numerele. Link spre comentariu
Mircea Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Se suprapun caci nu "cureti" ecranul. La ecranul grafic trebuie sters inainte sa scrii noua valoare. Nu e ca la cele alfanumerice. Link spre comentariu
Vizitator Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Am modificat codul: void count(void) { display.clear(); if ( i < 10 ) { i++; delay(500); } if ( i >= 10 ) { i = 0; } display.drawString(48, 16, String(i)); display.display(); } ... void loop() { count(); } Afiseaza ok. Multumesc! Si era atat de simplu :( Link spre comentariu
Vizitator Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Am mai adus o modificare la cod. Aprinderea LED-ului cand count = 10: /* Test Numarator ESP8266 > OLED 1,3" - SH1106 */ // For a connection via I2C using Wire include #include <Wire.h> // Only needed for Arduino 1.6.5 and earlier #include "SH1106Wire.h" // legacy include: `#include "SH1106.h"` SH1106Wire display(0x3c, D2, D1); int i = 0; void count(void) { display.clear(); digitalWrite(LED_BUILTIN, HIGH); if ( i < 10 ) { i++; delay(500); } if ( i >= 10 ) { digitalWrite(LED_BUILTIN, LOW); // Turn the LED on (Note that LOW is the voltage level delay(120); i = 0; } display.drawString(48, 16, String(i)); // write the buffer to the display display.display(); } void setup() { pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output // Initialising the UI will init the display too. display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_24); display.setTextAlignment(TEXT_ALIGN_LEFT); display.clear(); } void loop() { count(); } Link spre comentariu
Mircea Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Da, dar astfel stergi tot ecranul. Nu e practic daca mai afisezi si altele pe ecran (exemplu: text static sau alte variabile care se schimba la alta rata decat countet()). Nu cunosc acea biblioteca pentru SH1106, nu ai posibilitatea sa stergi doar zona de text variabil? Link spre comentariu
Vizitator Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 (editat) Aici ai "ochit" bine Thunderer2018. Asa este, si intradevar este o provocare pt mine, pt ca nu prea am gasit exemple pe intelesul meu Editat Noiembrie 17, 2018 de Vizitator Link spre comentariu
informer Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Am modificat libraria asta (+SSD1306) pt. PIC si din ce-mi amintesc nu exista posibilitatea de-a sterge zone... exista in schimb o functie setPixel().... Daca o sa citesti putin despre modul de organizare a matricii display-ului ai s-o poti folosi pt. o stergere "zonala".... Link spre comentariu
Vizitator Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 (editat) Libraria pentru ESP8266 cu OLED, avand controller SH1106 dar si SSD1306 se gaseste pe aici. Editat Noiembrie 17, 2018 de Vizitator Link spre comentariu
Mircea Postat Noiembrie 17, 2018 Partajează Postat Noiembrie 17, 2018 Asa este, stergerea zonala e solutia. Practic, daca poti desena un dreptunghi (umplut cu culoarea fondului de ecran) stergi numai zona de interes. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum