Passa ai contenuti principali

Arduino - Lampeggio Led (delay vs. millis)

Cosa sono delay() e millis()?

Delay() è una funzione che mette in pausa il programma per un determinato tempo espresso in millisecondi, così facendo viene interrotta l'esecuzione del programma e se abbiamo un dispositivo in ingresso che durante il tempo di pausa cambia di stato il programma non se ne accorge fino a quando non ricomincia l'esecuzione dall'inizio.

La struttura di delay è: delay(1000);   da inserire nel punto dello sketch in qui si vuole interrompere il programma in questo modo il programma viene messo in pausa per 1000 millisecondi = 1 secondo.

Per saperne di più

Millis() è una funzione che permette di sapere da quanto tempo è in funzione il microprocessore di Arduino UNO.
In questo modo il programma non andrà mai in pausa ed è sempre in esecuzione, perché millis memorizza il tempo trascorso dall'avvio e poi per eseguire una determinata funzione si fa un controllo del tempo iniziale e il tempo trascorso.

Per saperne di più

Vediamo un esempio per capire meglio il suo funzionamento e la differenza con delay.

L'esempio più pratico e semplice per capire la differenza tra delay() e millis() è far lampeggiare un Led con Arduino.


Esempio con delay();

come si può vedere alle righe 10 e 12 il delay(500); arresta l'esecuzione del programma per 500 millisecondi = 0,5 secondi

Se noi volessimo aggiungere la lettura del pulsante potremmo aggiungerla dalla riga 13 e vedremmo che Arduino non rileva il cambiamento di stato fino a quando il delay() alla riga 12 non è terminato.


Esempio con millis();


alla riga 5 viene impostata la variabile tempo di tipo unsigned long la quale tiene in memoria da quanto tempo Arduino è stato avviato

alla riga 6 viene impostata la variabile lampeggio_time di tipo unsigned long la quale memorizza il tempo alla fine di ogni ciclo di lampeggio

alle righe 8 e 9 vengono impostate due variabili che definiscono i tempi di accensione e spegnimento del led

alla riga 18 nella variabile tempo viene memorizzato il valore di millis() ad ogni ciclo

dalle righe 19 a 27 vengono fatti due controlli per decidere dopo quanto tempo accendere o spegnere il led

Se noi volessimo aggiungere la lettura del pulsante potremmo aggiungerla dalla riga 28 e vedremmo che Arduino ne rileva il cambiamento di stato all'istante.


Per dubbi o info lasciare un commento.



Commenti

  1. Se inserisci l'interruzione col pulsante, è vero che questo verrà in coda al codice, alla prima occorrenza della fine del loop, ma, dopo aver letto il pulsante, il led in che stato si troverà? Se prima era acceso, lo sarà ancora? Se oltre a leggere il pulsante, faremo altre operazioni, queste faranno passare altro tempo e quindi, alla successiva iterazione del loop, entreremo in entrambi gli if, quindi imposteremo il led ad acceso, e subito dopo a spento. Non so se sono stato chiaro.
    Però la differenza tra delay e millis ora mi è ben chiara, grazie.

    RispondiElimina
    Risposte
    1. Questo articolo fa vedere la differenza di un codice che gestisce il lampeggio di un LED con due modalità: una con delay(), l'altra con millis(). Il problema di usare delay() è che qualsiasi cosa succeda (come in input da un pulsante, sensore, ecc.) verrà ignorato fino a che non si esce dal delay(). Mentre con millis(), qualsiasi interazione verrà presa in gestione dal codice e processata.

      Elimina

Posta un commento

Post popolari in questo blog

Android Studio - Impostare lingua app

In questo articolo vedremo come poter selezionare la lingua all'interno della nostra app. Nel precedente articolo in cui si parlava del file string.xml , la lingua dell'app veniva selezionata automaticamente in base alle impostazioni del dispositivo, mentre qui vedremo come poter selezionare a proprio piacimento la lingua che dovrà avere la nostra app indipendentemente dall'impostazione del dispositivo. Per prima cosa creare il layout Ecco un esempio do come può essere il file activity_main.xml Ora creare le stringhe di testo all'interno del file string.xml Ora creare la traduzione del file string.xml nelle varie lingua come descritto in questo articolo Il risultato sarà una serie di file string.xml delle varie lingue impostate. Ora queste di seguito sono tre funzioni che servono per: selezione della lingua salvataggio della selezione nelle preferenze dell'app caricamento della lingua quando si avvia l'app Ecco come si presenta il file Main

Arduino - Lettura tensione potenziometro e display LCD

Leggere il valore di un poteziometro (parte 2) Oggi vedremo come leggere il valore in tensione di un potenziometro collegato al pin Analogico A0 di Arduino.

Android Studio - Impostare uno sfondo sfumato

In Android Studio è possibile creare uno sfondo sfumato senza dover creare una immagine apposta per questo scopo. Per fare questo occorre seguire questi semplici passaggi: Aprire la cartella res Cliccare con il tasto destro sulla cartella drawable Selezionare New Selezionare Drawable resource file Dare un nome al file ad esempio gradient_background Cliccare sul pulsante OK per confermare Una volta aperto il file gradient_background.xml inserire le seguenti righe di codice: Alla riga 6 inserire l'angolo che definisce la direzione della sfumatura (valori da 0 a 360) Alla riga 7 inserire il colore di partenza in formato esadecimale Alla riga 8 inserire il colore finale in formato esadecimale Per quanto riguarda i colori è possibile utilizzare il sito webgradients.com in modo da poter utilizzare le sfumature proposte o creare le proprie sfumature personalizzate. Una volta creato il file che definisce lo sfondo passare al layout ed impostare l'attibuto backgr