Pulsante e LED con Arduino: leggere un ingresso digitale
Impariamo a leggere lo stato di un pulsante con Arduino e a usare quel valore per accendere o spegnere un LED, introducendo i concetti fondamentali di input digitale, output digitale, HIGH e LOW.
digitalRead().
Se il valore è HIGH accende il LED; se è LOW lo spegne.
Cosa imparerai
- la differenza tra ingresso e uscita digitale;
- come usare
pinMode(); - come leggere un pulsante con
digitalRead(); - come controllare un LED con
digitalWrite(); - come usare una condizione
if / else; - come interpretare gli stati logici HIGH e LOW.
Come funziona un ingresso digitale
Un ingresso digitale può assumere due stati logici principali: HIGH e LOW. Nel nostro progetto, il pulsante determina quale stato viene letto dal pin 7.
Arduino controlla continuamente il valore del pulsante. Quando rileva lo stato attivo, porta il pin del LED su HIGH; quando il pulsante non è attivo, porta il LED su LOW.
Materiale necessario
Kit Arduino consigliato
Se stai iniziando, un kit completo può essere utile perché comprende LED, pulsanti, resistenze, breadboard e molti altri componenti.
🛒 Guarda il kit Arduino consigliatoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema di collegamento
Nel progetto originale il LED viene controllato dal pin 13, mentre il pulsante è letto sul pin 7.
Schema di collegamento del pulsante e del LED ad Arduino.
Codice Arduino commentato
// ==========================================================
// PULSANTE E LED CON ARDUINO
// Accensione del LED quando viene premuto il pulsante
// ==========================================================
// Pin digitale collegato al LED
const int ledPin = 13;
// Pin digitale collegato al pulsante
const int buttonPin = 7;
// Variabile che conterrà lo stato del pulsante
int buttonState = LOW;
void setup() {
// Imposta il pin del LED come uscita
pinMode(ledPin, OUTPUT);
// Imposta il pin del pulsante come ingresso
pinMode(buttonPin, INPUT);
}
void loop() {
// Legge lo stato logico presente sul pin del pulsante
// Il risultato può essere HIGH oppure LOW
buttonState = digitalRead(buttonPin);
// Se il pulsante risulta attivo...
if (buttonState == HIGH) {
// ...accende il LED
digitalWrite(ledPin, HIGH);
}
else {
// Se il pulsante non è attivo, spegne il LED
digitalWrite(ledPin, LOW);
}
}
Il codice spiegato passo passo
Definiamo i pin
Il LED utilizza il pin 13 e il pulsante il pin 7. Usare costanti rende il codice più leggibile e facile da modificare.
Configuriamo input e output
Con pinMode() impostiamo il LED come uscita
e il pulsante come ingresso.
Leggiamo il pulsante
digitalRead(buttonPin) restituisce HIGH oppure LOW
in base allo stato elettrico presente sul pin.
Usiamo if / else
La condizione controlla se il pulsante è attivo e sceglie se accendere o spegnere il LED.
HIGH e LOW: cosa significano
In un ingresso digitale Arduino distingue due stati logici. Per semplicità possiamo pensarli come:
| Stato | Significato logico | Nel progetto |
|---|---|---|
| HIGH | Livello logico alto | LED acceso |
| LOW | Livello logico basso | LED spento |
Simulazione online
Puoi provare il circuito con la simulazione Tinkercad originale.
▶️ Apri la simulazione TinkercadScarica lo sketch
⬇️ Scarica led_e_pulsante.inoDebug rapido
- controlla che il LED sia collegato nel verso corretto;
- verifica la resistenza da 220 Ω;
- controlla il collegamento del pulsante al pin 7;
- verifica che il LED sia effettivamente controllato dal pin 13;
- se il LED cambia stato da solo, controlla soprattutto il cablaggio del pulsante;
- assicurati che il circuito abbia una massa comune.
Variante consigliata: INPUT_PULLUP
Una variante molto utile consiste nell’utilizzare la resistenza di pull-up interna di Arduino. In questo caso la logica si inverte: il pulsante premuto viene normalmente letto come LOW.
const int ledPin = 13;
const int buttonPin = 7;
void setup() {
// LED come uscita
pinMode(ledPin, OUTPUT);
// Attiva la resistenza di pull-up interna
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// Con INPUT_PULLUP il pulsante premuto viene letto come LOW
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
Perché INPUT_PULLUP è utile
La modalità INPUT_PULLUP consente di mantenere stabile
l’ingresso senza aggiungere necessariamente una resistenza esterna
di pull-up. È una tecnica molto comune nei progetti Arduino con pulsanti.
Varianti del progetto
- accendere due LED con due pulsanti;
- usare il pulsante per cambiare lo stato del LED a ogni pressione;
- aggiungere un buzzer;
- controllare un relè;
- usare il pulsante per comandare un servomotore;
- aggiungere il debounce software per evitare letture multiple indesiderate.
Cosa devi ricordare
- Il pulsante è un ingresso digitale.
- Il LED è un’uscita digitale.
digitalRead()legge HIGH o LOW.digitalWrite()controlla lo stato del LED.if / elsepermette di reagire allo stato del pulsante.- Gli ingressi digitali devono avere sempre uno stato elettrico definito.
Domande frequenti
Perché il LED rimane sempre acceso?
Controlla il collegamento del pulsante e verifica quale stato viene letto dal pin 7 quando il pulsante è rilasciato.
Perché il LED lampeggia o cambia stato senza premere il pulsante?
Probabilmente l’ingresso non ha uno stato stabile. Controlla il circuito
del pulsante oppure valuta l’uso di INPUT_PULLUP.
Posso usare un pin diverso dal 7?
Sì. Basta modificare buttonPin e spostare il collegamento
fisico sul nuovo pin.
Posso usare il LED integrato di Arduino?
Sì. Sulle schede Arduino Uno il LED integrato è normalmente associato al pin 13, quindi il principio del progetto resta lo stesso.

