Cerca codice

Lezione 14/31-1: Funzioni Arduino Millis (senza delay) e map | SunFounder Robojax

Lezione 14/31-1: Funzioni Arduino Millis (senza delay) e map | SunFounder Robojax

Questa guida introduce la funzione millis() di Arduino, uno strumento fondamentale per progetti basati sul tempo che richiedono esecuzione del codice non bloccante. A differenza di delay(), che ferma l'intero programma, millis() tiene traccia del tempo trascorso dall'avvio della scheda, consentendo al tuo Arduino di eseguire più attività in modo efficace. Puoi usare questa tecnica per creare:

  • Lampeggiatori LED non bloccanti che funzionano mentre altro codice viene eseguito.
  • Eventi temporizzati attivati da sensori o pulsanti, come una luce che si spegne 5 secondi dopo la pressione di un pulsante.
  • Sistemi semplici di registrazione dati che salvano i valori dei sensori a intervalli regolari.
  • Sistemi di interfaccia utente che rispondono agli input senza bloccarsi.
Auto Sunfounder assemblata

Comprendere la funzione millis()

La funzione millis() è un comando Arduino integrato che restituisce il numero di millisecondi da quando la scheda Arduino ha iniziato a eseguire il programma corrente. Parte da zero all'accensione e aumenta ogni millisecondo. Puoi chiamare questa funzione in qualsiasi punto del tuo codice per ottenere il valore corrente di "tempo di attività". Ad esempio, dopo 1 secondo restituisce 1000; dopo 5 secondi restituisce 5000. Il vantaggio principale è che non mette in pausa il tuo codice, quindi puoi controllare il tempo mentre altre attività continuano a essere eseguite.

Perché evitare delay()?

La funzione delay() è un modo semplice per mettere in pausa un programma, ma è una funzione bloccante. Quando chiami delay(5000), l'Arduino smette di eseguire tutto il resto del codice per 5 secondi, congelando qualsiasi componente collegato. Questo è problematico per progetti che devono rispondere agli input o aggiornare le uscite in modo continuo. Usare millis() ti permette di verificare se un certo periodo di tempo è trascorso senza fermare il resto del programma, rendendolo ideale per il multitasking.

Hardware Richiesto

  • Scheda Arduino (Uno, Mega, ecc.)
  • Cavo USB per la programmazione e l'alimentazione

Guida al Cablaggio

Questo esempio non richiede cablaggio esterno. L'Arduino deve solo essere collegato al computer tramite USB per caricare il codice e visualizzare l'output del monitor seriale.

Spiegazione del Codice

Questo primo esempio è una semplice dimostrazione di come funziona millis(). Il codice inizializza il monitor seriale e stampa il valore di millis() in un ciclo infinito.

void setup() {
  Serial.begin(9600);//inizializza il monitor seriale
  Serial.println("Introduzione a millis");
  delay(2000);
}

void loop() {
  Serial.println(millis());
}

La funzione setup() avvia la comunicazione seriale a 9600 baud e stampa un messaggio di benvenuto. Il delay(2000) qui è solo per dimostrazione, per mostrare che millis() inizia a contare dal momento in cui il programma viene eseguito. La funzione loop() stampa continuamente il valore corrente di millis(). Quando apri il Monitor Seriale, vedrai il tempo in millisecondi aumentare rapidamente. Questo illustra che millis() è un contatore che non si ferma mai, fornendo un riferimento temporale continuo per il tuo programma.

Questo è il blocco fondamentale. Nel video, l'istruttore dimostra come usare questo valore per attivare azioni dopo un periodo prestabilito, come verificare se sono trascorsi 5000 millisecondi (5 secondi) prima di eseguire un blocco di codice specifico. Questo viene fatto salvando il valore corrente di millis() in una variabile e poi confrontandolo nel ciclo principale.

Guidare un LED con un valore percentuale usando la funzione map() è trattato in Lezione 14/31-4: Esempio 1 di codifica Arduino map().

Dimostrazione del Progetto dal Vivo

Nel video, l'istruttore carica questo codice e apre il Monitor Seriale. Puoi vedere che l'output inizia dopo il ritardo iniziale di 2 secondi, mostrando un valore vicino a 1999. I numeri poi aumentano rapidamente, dimostrando il conteggio continuo dei millisecondi. Questa visione dal vivo conferma che la funzione funziona e fornisce una chiara comprensione visiva di come viene tracciato il tempo.

Progetti correlati da questo video

Capitoli

  • [00:00] Introduzione a millis()
  • [01:19] Cos'è millis() e perché usarlo
  • [03:06] Dimostrazione pratica di millis()
  • [05:46] Usare millis() per attivare un evento temporizzato
  • [08:29] Esempio con un pulsante
  • [12:14] Esempio avanzato di temporizzazione con pulsante
  • [17:20] Introduzione alla funzione map()
  • [19:47] Esempio di codice per map() con un LED
  • [22:41] Creare una funzione map personalizzata

Immagini

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
916-Lesson 14/31-1: Arduino coding millis() example 1
Lingua: C++
/*
Lesson 14/31: Arduino coding millis() example 1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
/*
 * Example-1 of using millis() with Arduino
 * Written by Ahmad Shamshiri on July 27, 2019
 * in Ajax, Ontario, Canada
 * Watch video instructio for millis() :https://youtu.be/u2HsiTS8niQ
 */


void setup() {
  Serial.begin(9600);//initialize serial monitor
  Serial.println("Introduction to millis");
  delay(2000);
  


}

void loop() {

  Serial.println(millis());

}// loop end

File📁

Librerie Arduino (zip)