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.
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
- Lezione 14/31-2: Esempio 2 di codifica Arduino millis() con evento
- Lezione 14/31-3: Esempio 3 di codifica Arduino millis() con pulsante
- Lezione 14/31-4: Esempio 1 di codifica Arduino map()
- Lezione 14/31-5: Esempio 2 di codifica Arduino map()
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
/*
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
Common Course Links
Common Course Files
Cose di cui potresti avere bisogno
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Risorse e riferimenti
-
DocumentazioneDocumentazione per il kit di apprendimento SunFounder 3 in 1 IoT/Smart Car.docs.sunfounder.com
-
Esterno
File📁
Librerie Arduino (zip)
-
Codice sorgente del kit di apprendimento Smart Car 3-in-1 di SunFounder
3in1-kit-main-v2.zip12.80 MB