Ciao a tutti
Sto conoscendo questa libreria “OLED I2C” consigliata dal forum, avendo la necessità di usare la funzione millis() ho scritto un piccolo codice con questa funzione . Il progettino consiste di visualizzare sul display il valore di una variabile e di far lampeggiare un led. Purtroppo il lampeggio non corrisponde al secondo impostato, ho visto anche gli esempi che propone la libreria ma usano solo il “delay()” .
Grazie a tutti
Guido
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL);
#define led 13
byte b = 23 ;
byte stato ;
unsigned long T0 ;
extern uint8_t BigNumbers[];
void setup() {
myOLED.begin(SSD1306_128X32);
myOLED.setFont(BigNumbers);
pinMode (led, OUTPUT);
}
void loop() {
if (millis() - T0 >= 1000) {
T0 = millis();
stato ^= 1;
}
myOLED.printNumI(b, 53, 4);
myOLED.update();
digitalWrite (led, stato);
}
Premesso che, per avere esattamente l'intervallo di 1 secondo quell'IF deve essere:
if (millis() - T0 >= 1000) {
T0 += 1000;
stato ^= 1;
}
... ricorda che tu stai aggiornando il LED DOPO aver scritto sul OLED, cosa che, per quanto veloce, comunque impiega il suo tempo e quindi ... l'accensione del LED sarà sempre in ritardo.
Si l’ho fatto ma è quasi uguale.
Nello sketch che dovrò fare più avanti dovrei visualizzare l’incremento di una variabile quindi mi dici che la vedrò sempre con un certo ritardo ?
Guido
O correggi il ritardo nella costante 1000 (la diminuisci fino a quando non è esattamente quelo che ti serve) o altrimenti, per forza ...
Guido_Laferrari:
Si l’ho fatto ma è quasi uguale.
Beh, come ti ho messo io il lampeggio è esattamente UN secondo (nei limiti della precisione di Arduino).
Se poi, aggiungi cose per cui prima di tornare a quel IF passa più di un secondo ... ovvio rallenta, ma se prendi solo quel codice, il lampeggio è esattamente di un secondo (sempre nel limite della precisione di Arduino).
Guido_Laferrari:
OK correggo il ritardo della costante.
Purtroppo l'oscillatore ceramico di Arduino UNO NON è il massimo della precisione e, se serva qualche cosa di veramente preciso su lunghi periodi ... beh ... meglio allora utilizzare un generatore di clock di precisione esterno