#10Principiante

Accendere e spegnere un LED con un pulsante

4.8(100)
158 completato
Accendere e spegnere un LED con un pulsante
Un progetto di commutazione che cambia lo stato del LED (acceso/spento) a ogni pressione del pulsante. Insegna la logica della variabile di stato e del debounce.

Video

Schema circuito

Accendere e spegnere un LED con un pulsante - Circuit

Codice sorgente

Arduino (C++)
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}
28

FAQ

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().

Accendere e spegnere un LED con un pulsante | BlueGrays