scusate la totale ignoranza, ma sto cercando di studiare la funzione millis() e proprio non riesco a raccapezzarmi, ho preso il semplicissimo esempio BlinkWithoutDelay presente negli esempi dell'IDE, ma vorrei modificare semplicemente lo stato LOW del pin
questo esempio anche mi tornerà utile ma è per fare due operazioni contemporaneamente
io vorrei cambiare lo stato della stessa uscita tipo il classico Blink ma con uno stato OFF diverso da ON
tipo il codice in esempio
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(500); // wait for 500ms
Praticamente vuoi sostituire la Funzione delay , con una tua funzione fatta utilizzando millis.
Creati una funzione nuova esterna al void loop ()
tipo f_delay che abbia un parametro di input che sono i millisecondi di attesa, e all'interno della quale gli fai fare un ciclo ripetitivo per la durata dei millisecondi da te impostati...
Vuoi un tempo in cui rimane acceso (chiamiamolo ton) diverso dal tempo in cui rimane spento (chiamiamolo toff).
Devi definire due variabili unsigned long che chiamerai ton e toff alle quali assegni i millisecondi che ti servono.
Quindi se vuoi 1 secondo acceso e mezzo secondo spento fai
unsigned long ton = 1000;
unsigned long toff = 500;
ti appoggi ad una terza variabile interval che inizialmente metti come toff visto che all'inzio è spento
unsigned long interval = toff;
Queste sono variabili globali, quindi definite fuori dal loop e dal setup.
Dentro il loop metti ora la verifica if millis() - previousmillis > interval
se lo è, allora * se ledstatus==0 metti ledstatus = 1 ed interval = ton invece se ledstatus==1 metti ledstatus = 0 ed interval = toff
Ti ho dato solo dei suggerimenti, altrimenti ti avrei tolto il piacere di scrivere da te il codice.
EDIT: * ovviamente metti anche previousmillis = millis()