Arduino: Blink con millis anzichè delay

Questo è un semplice esempio per far lampeggiare un led con la funzione millis, anzichè la classica funzione delay. Il delay è più semplice da usare, ma ha lo svantaggio di mettere in pausa tutto il programma, il millis invece permette al microcontrollore di continuare ad eseguire lo sketch.

Questo è il semplice esempio blink di arduino: 

  1. int led = 13;
  2. void setup() {                
  3. pinMode(led, OUTPUT);    
  4. }
  5. void loop() {
  6.   digitalWrite(led, HIGH);
  7.   delay(1000);              
  8.   digitalWrite(led, LOW);    
  9.   delay(1000);          
  10. }

Questo invece è l'esempio con la funzione millis:

  1. int led = 13;
  2. unsigned long time;
  3. unsigned long lampeggio_time = 0;
  4. void setup() 
  5. { 
  6.   pinMode(led, OUTPUT);
  7. }
  8. void loop() 
  9. { 
  10.    time=millis();
  11.    if(time>lampeggio_time+1000)
  12.   {
  13.     digitalWrite(led, HIGH);
  14.   }
  15.    if(time>lampeggio_time+2000)
  16.   {
  17.     digitalWrite(led, LOW);
  18.     lampeggio_time=millis();
  19.   }
  20. }

Segui Daniele Alberti su Google+

6 commenti:

  1. Come é vero che la programmazione C dipende dal programmatore io personalmente l'avrei scritta cosi'
    "int LEDpin = 13;
    int LEDstato = LOW;
    long milliprecedenti = 0;
    long intervallo = 1000;
    void setup() {
    pinMode(LEDpin, OUTPUT);
    }
    void loop() {
    unsigned long millicorrenti = milli();
    if (millicorrenti - milliprecedenti > intervalo) {
    milliprecedenti = millicorrenti; if (LEDstato == LOW) {
    LEDstato = HIGH;
    } else {
    LEDstato = LOW;
    }
    digitalWrite(LEDpin, LEDstato);
    }
    }"

    RispondiElimina
    Risposte
    1. Grazie del tuo contributo, in effetti riguardando il codice che ho scritto avrei potuto renderlo un po' più pulito.
      Comunque il mio obiettivo è quello di fornire un codice funzionante a chi ne ha bisogno, poi un buon programma è un'altra cosa :)
      In ogni caso è molto istruttivo vedere diversi modi per raggiungere lo stesso risultato, penso che potrà essere utile a molti. Ciao e grazie ancora!

      Elimina
  2. nel programma di RyujiAndy si ha un tempo uguale di led on e di led off. nel programma di daniele alberti, modificando i valori di 1000 e di 2000 all'interno degli if si possono avere tempi di led on diversi da tempi di led off.
    Per favore correggetemi se sbaglio.

    Grazie

    RispondiElimina
    Risposte
    1. Si hai ragione mi ero dimenticato di sottolinearlo nella risposta precedente, grazie mille!

      Elimina
  3. Ma se volessi usare switch anziché if, come dovrebbe essere scritto il codice?
    Grazie

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post