Elettronica E Hardware

Il Pulsante

Guida completa al collegamento del pulsante (tactile switch) con Arduino utilizzando la tecnica INPUT_PULLUP.

Arduino Uno | Il Pulsante

Il pulsante tipico per Arduino (tactile switch) è un interruttore momentaneo: chiude il circuito solo mentre viene premuto. È il componente fondamentale per inviare comandi digitali ai tuoi progetti.


1. Anatomia del Pulsante: Morsetti e Connessioni

Obiettivo: Capire il funzionamento dei pin 1a, 1b, 2a, 2b | Meccanica: Contatto a pressione

Un pulsante tattile ha solitamente 4 piedini, ma agisce come un semplice interruttore a due poli. La chiave per non sbagliare il collegamento è capire come i morsetti sono accoppiati internamente:

Morsetti Stato: Riposo Stato: Premuto
1a e 1b Sempre Collegati TUTTI UNITI
Il circuito si chiude
2a e 2b Sempre Collegati
Tra 1 e 2 Circuito Aperto Connessione Attiva
Regola d'oro del Cablaggio: Per evitare che il circuito sia "sempre acceso", collega i fili in diagonale (es. Pin 1a e Pin 2b). Questa è la tecnica più sicura per i principianti.

Esempi di collegamenti
  • 1a (PIN) + 2a (GND)
  • 1a (PIN) + 2b (GND)
  • 1a (GND) + 2a (PIN)
  • 1a (GND) + 2b (PIN)
  • 1b (PIN) + 2a (GND)
  • 1b (PIN) + 2b (GND)
  • 1b (GND) + 2a (PIN)
  • 1b (GND) + 2b (PIN)
Cosa NON fare (Sempre Chiuso):
Non collegare mai 1a con 1b o 2a con 2b. In questi casi, i piedini sono già uniti internamente e Arduino leggerà il circuito come "sempre premuto", rendendo il tasto inutile.

Nota: Invertire PIN e GND tra i due morsetti scelti non cambia nulla a livello elettrico; l'importante è che uno vada al pin digitale e l'altro alla massa.


2. Tabella della Logica Digitale (INPUT_PULLUP)

Obiettivo: Interpretare i valori restituiti da digitalRead() | Modalità: Logica Inversa

Quando configuriamo il pin come INPUT_PULLUP,

void setup() {
  // Configura il pin digitale 2 come ingresso con pull-up attiva
  pinMode(2, INPUT_PULLUP); 
}

Arduino attiva una resistenza interna che "tira" il segnale verso i 5V. Per questo motivo, i valori letti nel codice potrebbero sembrare invertiti rispetto all'intuizione comune:

Azione Utente Stato Circuito Valore digitalRead() Stato Logico
Rilascio il tasto Aperto 1 HIGH
Premo il tasto Chiuso (a massa) 0 LOW
Perché accade? A riposo il pin "vede" i 5V attraverso la resistenza interna (HIGH). Premendo il pulsante, il pin viene collegato direttamente al GND, forzando la lettura a zero (LOW). Nel codice, userai quindi if (stato == LOW) per capire se l'utente ha premuto il tasto.

Puoi usare sia i numeri (0 e 1) che le costanti (LOW e HIGH), ma le costanti sono preferibili per leggibilità:


void loop() {
  int statoPulsante = digitalRead(2);

  if (statoPulsante == LOW) {
    // Il circuito è CHIUSO verso massa
    // Azione: es. accendi il LED
  } else {
    // Il circuito è APERTO
    // Azione: es. spegni il LED
  }
}
Il Problema del "Rimbalzo" (Debounce)

I pulsanti sono dispositivi meccanici. Quando premi, le lamelle metalliche "rimbalzano" per qualche millisecondo, facendo credere ad Arduino che tu abbia premuto il tasto molte volte velocemente. Per un semplice LED non è un problema, ma se dovessi incrementare un contatore, dovresti usare un piccolo delay(50) o una logica software per pulire il segnale.