
Video
Schema circuito

Codice sorgente
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Accendere e spegnere un LED con un pulsante
4// ─────────────────────────────────────────
5// Ogni pressione del pulsante commuta il LED (acceso/spento). L'attesa di
6// 300 ms ignora il rimbalzo del pulsante. Se il pulsante è tenuto premuto,
7// il LED commuta ogni 300 ms.
8//
9// Pin:
10// D13 -> Pulsante, altro piedino a 5V
11// D13 -> Resistenza da 10k a GND (pull-down)
12// D7 -> LED (con una resistenza da 330 ohm)
13
14int ledState = 0; // Stato del LED: 0 = spento, 1 = acceso
15
16void setup() {
17 pinMode(13, INPUT); // Ingresso del pulsante (pull-down esterna)
18 pinMode(7, OUTPUT); // Uscita del LED
19}
20
21void loop() {
22 if (digitalRead(13) == 1) { // Pulsante premuto
23 ledState = !ledState; // Invertire lo stato
24 digitalWrite(7, ledState);
25 delay(300); // Attendere la fine del rimbalzo
26 }
27}
28FAQ
Che cos’è il debounce e perché è necessario?▾
Quando si preme un pulsante meccanico, questo si apre e si chiude più volte nell'arco di pochi millisecondi (rimbalzo). Arduino potrebbe interpretare questo fenomeno come una serie di pressioni successive e il LED rimarrebbe in uno stato casuale. Il debounce ignora questi rimbalzi attendendo un breve intervallo (ad es. 50 ms) dopo il cambio di stato.
A volte il LED non cambia o cambia due volte: perché?▾
In genere il debounce manca o è troppo breve. Inoltre, è necessario rilevare solo il momento in cui il pulsante viene "premuto" (stato precedente LOW, nuovo stato HIGH); se lo stato viene modificato ad ogni ciclo fintanto che il pulsante rimane premuto, il LED continuerà a lampeggiare in modo casuale.
A cosa serve la variabile di stato?▾
Memorizza se il LED è acceso o spento. Ad ogni pressione valida, la variabile viene invertita (ledStato = !ledStato) e il LED viene impostato in base a questo valore.
Posso controllare LED diversi utilizzando più pulsanti?▾
Sì, basta che tu mantenga per ogni pulsante un pin separato, uno stato precedente separato e una variabile separata per lo stato del LED. Se utilizzerai molti pulsanti, sarà più ordinato usare array e un codice di debounce basato su millis().
