Nota
Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti?
Supporto esperto: Risolvi problemi post-vendita e affronta sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime esclusive.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni e omaggi festivi: Partecipa a promozioni e omaggi durante le festività.
👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
5.4 Intervallo¶
A volte è necessario fare due cose contemporaneamente. Ad esempio, potresti
voler far lampeggiare un LED mentre leggi la pressione di un pulsante. In
questo caso, non puoi usare delay(), perché Arduino mette in pausa il
tuo programma durante delay(). Se il pulsante viene premuto mentre Arduino
è in pausa, il programma perderà la pressione del pulsante.
Un’analogia sarebbe riscaldare una pizza nel forno a microonde e attendere
anche una e-mail importante. Metti la pizza nel microonde e imposti il timer
per 10 minuti. L’analogia con l’uso di delay() sarebbe quella di sedersi
di fronte al microonde a guardare il timer che conta alla rovescia da 10 minuti
fino a quando non raggiunge lo zero. Se l’e-mail importante arriva durante questo
tempo, la perderai.
Quello che faresti nella vita reale sarebbe accendere il microonde, poi controllare la tua e-mail e magari fare qualcos’altro (che non richieda troppo tempo!) e di tanto in tanto tornare al microonde per vedere se il timer ha raggiunto lo zero, indicando che la tua pizza è pronta.
Questo sketch dimostra come far suonare un buzzer senza usare delay().
Accende il buzzer e segna l’orario. Poi, ad ogni passaggio nel loop(),
controlla se è trascorso il tempo desiderato. Se lo è, suona il buzzer e
aggiorna l’orario. In questo modo, il buzzer suona continuamente mentre
l’esecuzione dello sketch non si blocca mai su una singola istruzione.
In base a questa condizione, possiamo aggiungere il codice del pulsante per controllare il LED, che non sarà disturbato dalla riproduzione della musica del buzzer.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un intero kit, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
3 in 1 Starter Kit |
380+ |
Puoi anche acquistarli separatamente dai link qui sotto.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
Schema Elettrico
Collegamenti
Codice
Nota
Apri il file
5.4.interval.inonel percorso3in1-kit\basic_project\5.4.interval.Oppure copia questo codice nell”Arduino IDE.
Oppure carica il codice tramite l”Arduino Web Editor.
Dopo aver caricato correttamente il codice, il buzzer suonerà; ogni volta che premi il pulsante, il LED si accenderà. Il funzionamento del LED e del buzzer non interferiscono tra loro.
Come funziona?
Inizializza una variabile chiamata previousMillis per memorizzare l’ora precedente del microcontrollore.
unsigned long previousMillis = 0;
Segna quale nota viene suonata.
int thisNote=0;
L’intervallo di tempo di ciascuna nota.
long interval = 1000;
Nel loop(), dichiara currentMillis per memorizzare l’ora attuale.
unsigned long currentMillis = millis();
Quando l’intervallo tra l’ora attuale e l’ultima ora aggiornata è maggiore di 1000ms, vengono attivate determinate funzioni. Nel frattempo, aggiorna previousMillis all’ora attuale per il prossimo attivarsi, che avverrà 1 secondo dopo.
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;// save the last time of the last tone
//...
}
Suona le note nella melodia una per una.
tone(buzzerPin,melody[thisNote],100);
interval=1000/noteDurations[thisNote]; // interval at which to tone
thisNote=(thisNote+1)%(sizeof(melody)/2); //iterate over the notes of the melody
Il pulsante controlla il LED.
// play button & led
digitalWrite(ledPin,digitalRead(buttonPin));