loop()
❤️ Il Cuore di Arduino
Section titled “❤️ Il Cuore di Arduino”Dopo che setup() ha terminato il suo lavoro, Arduino passa all’esecuzione di loop() e non ne uscirà mai, a meno che non lo spegniamo.
loop() è una funzione che Arduino ripete all’infinito, dall’inizio alla fine, in un ciclo senza mai fermarsi.
▶️ Come funziona in pratica
Section titled “▶️ Come funziona in pratica”La ripetizione del loop() è estremamente veloce: Arduino può eseguire milioni di istruzioni al secondo. Un loop() vuoto gira migliaia di volte al secondo.
🔍 Un Esempio Concreto
Section titled “🔍 Un Esempio Concreto”Questo programma legge continuamente lo stato di un pulsante e, se premuto, accende un LED.
Vedremo più avanti cosa sono if e else.
Senza il loop(), Arduino leggerebbe il pulsante una volta sola all’avvio e poi si fermerebbe. Grazie al ciclo, invece, la lettura avviene continuamente e il LED risponde in tempo reale a ogni pressione.
⚠️ Problema del Debounce
Section titled “⚠️ Problema del Debounce”Quando si preme un pulsante fisico, ci si aspetta un segnale pulito: prima LOW, poi HIGH. In realtà, le lamelle metalliche interne al pulsante non si toccano in modo netto - rimbalzano meccanicamente per qualche millisecondo, producendo una raffica di segnali HIGH e LOW rapidissimi prima di stabilizzarsi.
Per Arduino, che legge milioni di volte al secondo all’interno del loop(), ogni rimbalzo sembra una pressione separata. Un singolo click fisico può quindi essere interpretato come 10, 20 o 30 pressioni diverse.
Il debounce risolve il problema ignorando tutti i segnali successivi al primo per una determinata finestra di tempo. In questo momento, dato che abbiamo a che fare con programmi semplici, è sufficiente inserire un delay(250) dopo aver letto il bottone. Tuttavia, la soluzione migliore sarà utilizzare millis(), che vedremo più avanti.
🧹 Tenere loop() Pulito
Section titled “🧹 Tenere loop() Pulito”Quando il programma diventa più complesso, può essere tentante mettere tutto il codice dentro loop(). Questo lo rende però lungo, difficile da leggere e da correggere.
La buona pratica è usare loop() come un direttore d’orchestra: breve, chiaro, il cui unico compito consiste nel chiamare altre funzioni che invece svolgono il vero lavoro.
⏱️ Comando delay()
Section titled “⏱️ Comando delay()”A volte si vuole bloccare intenzionalmente l’esecuzione del programma. Il comando delay() mette in pausa Arduino per un numero di millisecondi specificato (1 secondo = 1000 millisecondi).