capire millis

Ciao a tutti pur vedendo tutti gli esempi non sono riuscito a capire il millis, invio un sempilce sketch dove sostituire il delay con millis, lo sketch semplicemente attende seriale e accende led dopo 2 secondi,so che l’argomento è ampiamente trattato ma la soluzione forse mi permetterà di comprendere il millis.Grazie a tutti

monitoraccensioneled13.ino (367 Bytes)

Devi cambiare il tuo programma mettendo la gestione del LED al di fuori della lettura della seriale. Quando arriva il comando di accensione, accendi il LED ed esci dall'if della seriale Lì fuori troverai la gestione del countdown per lo spengimento del LED, se è stato scelto di attivarlo (ti serve quindi una variabile di stato che attivi/disattivi dall'if che legge la seriale). Quando il tempo di accensione è trascorso spengi il LED anche se non arriva il comando specifico dalla seriale.

Così dovrebbe andare. Non l'ho caricato su Arduino quindi provalo.

const byte led = 13;
boolean ledstatus = LOW;
unsigned long intervall = 2000;
unsigned long oldtime = 0;

void setup()
{
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0) {
    char incomingByte = Serial.read();
    if (incomingByte == 'H') {
      ledstatus = HIGH;
      oldtime = millis();
    }
    if (incomingByte == 'L') {
      ledstatus = LOW;
      digitalWrite(led, LOW);
    }
  }

  if (ledstatus == HIGH){
    if (millis() - oldtime > intervall){
      digitalWrite(led, HIGH);
    }
  }
} // End Loop

Cerca di capire il codice da solo, se hai difficoltà riscrivi qui. :grin:

Paolo, ma se glielo fai tu il programma... :P

Grazie per la disponibilitaà la cortesia ,e la pazienza il tuo esempio è stato illuminante.

gegia: ... è stato illuminante.

Nel senso che il LED si è acceso? :grin: :grin: :grin:

si il led si è acceso dopo 2 secondi,ho visto lamentele perche mi è stato fatto il programma,forse non è nella vostra politica ma lo sketch svolto mi ha fatto capire alcune cose,volendo complicare le cose e spegnere il led quando il valore del sensore è low ,come si fà, grazie se volete rispondermi credo che l’esempio aiuti molto altresi capisco che avete molto da fare , e l’ esempio precedente è stato illuminante potete indicarmi dei link dove approfondire l’argomento

millis_e_sensore.ino (721 Bytes)

Facciamo 2 esempi. Il delay() é come: Fai 2 minuti niente e aspetti che la sveglia da cucina suoni.

Millis(): Ti ricordi il tempo di partenza, controlli ogni 5 secondi l' orologio e calcola se sono passati 2 minuti. Tra un controllo del orologio e l' altro puoi fare altre cose.

Ciao Uwe

sketch: Accendi il LED col Pulsante e lo spegni dopo 2 secondi oppure quando é mollato il pulsante?