non ho ancora capito come trasformare i delay in millis di questo codice:
#define LED 10 // definisco pin
int i = 0;
void setup() {
pinMode(LED, OUTPUT); // dico che il pin è output
}
void loop(){
delay(1000); ////imposto tempo spento
for (i = 0; i < 255; i++) { // imposto il loop fade in
analogWrite(LED, i);
delay(10); /////imposto tempo fade in e out
}
for (i = 255; i > 0; i--) { // imposto il loop fade out
analogWrite(LED, i); //
delay(1000); ///imposto tempo acceso
pinMode(LED,LOW);//spengo completamente il led
}
}
vorrei controllare l'accensione con fade in e out dandogli un tempo di 30 minuti, fase acceso ics ore, fase spento ics ore.
come da esempio con i delay funzionerebbe ma quando implemento altro codice i delay bloccano il loop, la soluzione sono
le millis ma non riesco ad applicarle nel mio codice.
Puo millis contare 20 ore? Da ciò che ho capito va in overflow dopo 49,7 giorni ....
dai un'occhiata negli esempi di arduino, lo trovi come "BlinkWithoutDelay.pde" nella sezione digital.
Comunque non ti farà mai un fade in/out ma un semplice on/off con quel codice.
Leo seguendo i tuoi link sono finito a voler testare la libreria looper ed ho codiciato.. ciò che segue
#include "looper.h" //includo libreria looper
looper myScheduler; //creo nuova istanza looper
//variabili per controllare i led
byte led1Status = 0;
byte led2Status = 0;
const byte LED1 = 9;
const byte LED2 = 10;
int i = 0;
//program setup
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
//add the tasks at the scheduler
}
//main loop
void loop() {
myScheduler.myDelay(1000); // imposto tempo spento
for (i = 0; i < 255; i++) { // loop da 0 a 255 per fade in
analogWrite(LED1, i);
myScheduler.myDelay(10); //////imposto tempo fade in
myScheduler.scheduler();
myScheduler.myDelay(20); // imposto tempo acceso
}
for (i = 255; i > 0; i--) { // loop da 255 a 1 per fade out
analogWrite(LED1, i);
myScheduler.myDelay(10); ///////imposto tempo fade out
myScheduler.scheduler();
pinMode(LED1,LOW);//spengo completamente il led
}
}
...come vedi però mi sono fermato al led1 perchè aggiungendo il ciclo for per il led2 non mi compila, dal void loop ho copiaincollato il codice cambiando semplicemente da led1 a led2... stò omettendo qualche punteggiatura o proprio sbaglio procedimento?
In ogni modo ho tradotto il codice che volevo e anche se solo con un led fa quello che mi serve. Appena ho un po di tempo vorrei inserirlo nello sketch principale per vedere se funziona senza interrompere il codice principale.
Ci sto spendendo del tempo ma ci comincio a prender gusto
grazie!
Guido
No, hai sbagliato l'uso
Devi creare delle funzioni che diventano i tuoi "job", o lavori, da chiamare dallo scheduler in modo automatico. Allegato alla lib c'è un esempio che si chiama "2 tasks" che mostra appunto il lampeggio di 2 led con 2 frequenze differenti.
myDelay è una feature del looper, è un delay che ferma l'esecuzione del flusso principale del codice permettendo però di eseguire i job che sono contenuti nello scheduler.