A - Sistemi di elaborazione dati
ES02 - Dispositivi di I/O, pulsanti e led
FB - 10.2025 - v1.0
“La teoria è quando si sa tutto e niente funziona. La pratica è quando tutto funziona e nessuno sa il perché. Noi abbiamo messo insieme la teoria e la pratica: non c'è niente che funzioni… e nessuno sa il perché!”
“La teoria è quando si sa tutto e niente funziona. La pratica è quando tutto funziona e nessuno sa il perché. Noi abbiamo messo insieme la teoria e la pratica: non c'è niente che funzioni… e nessuno sa il perché!”
Introduzione ad Arduino
La piccola scheda italiana che anima le cose
2
© FB - 10.2025
Indice
3
© FB - 10.2025
Obiettivi didattici
4
Obiettivi didattici
5
© FB - 10.2025
Introduzione teorica
6
Pulsanti
Pulsanti e microcontrollori
Utilizzo di pulsanti, interruttori e deviatori con i microcontrollori
8
© FB - 02.2024
Pulsanti, interruttori, deviatori e invertitori
nei circuiti elettronici
9
© FB - 11.2021
Pulsanti, interruttori, deviatori nei circuiti elettronici
10
© FB - 11.2021
Pulsanti, interruttori e contatti
Pulsanti, interruttori e contatti sono dispositivi elettromeccanici di comando destinati, se azionati, a cambiare lo stato di un circuito.
Pulsanti, interruttori e contatti possono essere NA o NC
11
© FB - 11.2021
Pulsante NA e NC
Un esempio di pulsante NA è il campanello, che quando è rilasciato torna in posizione di riposo. Un esempio di pulsante NC è il pulsante del frigorifero, che spegne la luce se premuto. Per ogni tipologia di interruttore, pulsante o contatto, il passaggio di corrente avviene ogni volta che due lamelle metalliche si toccano tra loro a seguito di un’azione meccanica da parte di un utilizzatore esterno.
12
© FB - 11.2021
Parametri caratteristici
Gli interruttori e i pulsanti, come ogni altro componente elettronico, sono caratterizzati da alcuni parametri, di seguito indicati, che aiutano il progettista a effettuare la scelta più corretta in relazione alle proprie esigenze.
13
© FB - 11.2021
Pulsanti
14
© FB - 11.2021
Deviatore - Toggle switch - Slide switch
15
© FB - 11.2021
Deviatore
16
© FB - 11.2021
Deviatore
17
© FB - 02.2026
Interruttori dip-switch
18
© FB - 11.2021
Rotary coding switch
19
© FB - 11.2021
Collegare un pulsante al microcontrollore
Simboli usati negli schemi elettrici
20
© FB - 02.2024
Pull-up/Pull-down
21
© FB - 10.2021
Resistenze di pull-up e di pull-down
La pratica sconsiglia vivamente di lasciare liberi (floating -flottanti) ingressi di componenti MOS/CMOS perchè, nelle condizioni peggiori, sono in grado di funzionare da sensibili antenne per disturbi di ogni genere, anche di frequenze radio, e creare situazioni di malfunzionamento assai difficili da debuggare. Considerazioni per il dimensionamento:
[Approfondimenti: Resistenza di pull-up / pull-down; Come calcolare le resistenze di pull-up e pull-down - Video 238]
22
© FB - 02.2024
Collegamento tipico pull-up
23
© FB - 02.2024
Collegamento tipico con pulsante pull-down
24
© FB - 02.2024
Collegamento tipico con pulsante pull-down
25
© FB - 02.2024
Utilizzo delle resistenze interne di pull-up e pull-down
Molti microcontrollori incorporano al loro interno resistenze di pull-up e pull-down attivabili via software. �Con questo tipo di collegamento e configurazione del microcontrollore, quando il pulsante non è premuto, sul pin dove è collegato, sarà presente il livello logico alto (5V), mentre con la pressione, ci sarà un collegamento diretto a massa e quindi il livello logico basso (0V).
26
© FB - 02.2024
Utilizzo delle resistenze interne di pull-up e pull-down
#define LED_PIN 13
#define SW_PIN 2
void setup() { // Inizializzazione
pinMode(LED_PIN, OUTPUT);
pinMode(SW_PIN, INPUT_PULLUP);
}
void loop() { // Loop infinito
if(digitalRead(SW_PIN)==HIGH)
//Pulsante non premuto
digitalWrite(LED_PIN, HIGH);
else
//Pulsante premuto
digitalWrite(LED_PIN, LOW);
}
Approfondimenti:
27
© FB - 02.2024
Rimbalzi e Debounce
28
© FB - 10.2021
Rimbalzi e Debounce
Alla pressione o al rilascio del pulsante o dell’interruttore si osservano dei rimbalzi del segnale che possono durare diversi ms (2-30ms).
29
© FB - 11.2020
Codice di esempio
30
© FB - 02.2024
Routine di esempio
visto che la pressione del pulsante dura alcuni millisecondi possiamo controllare per 5-50msec che il pulsante rimanga premuto, per scartare pressioni non valide.
per rilevare un click dobbiamo aspettare che il pulsante venga rilasciato
un pulsante può anche generare gli eventi:
Se volessimo utilizzare la pressione del pulsante per impostare un orologio realizzato con microcontrollore bisognerebbe utilizzare l’evento LongPress e non Press. Provate a tenere premuto un tasto sul pc e pensate a cosa succederebbe se non ci fosse un ritardo tra due letture successive.
31
© FB - 02.2024
La programmazione
Altre funzioni utili
33
© FB - 02.2024
L’istruzione micros()
L'istruzione micros(), restituisce il numero di microsecondi da quando la scheda Arduino ha iniziato a eseguire il programma corrente.
il valore restituito e di tipo unsigned long (32 bit)
Possiamo utilizzare questa istruzione per misurare un intervallo di tempo
ES.
time_start = micros(); //Es. 1.235.000
Serial.println(time_start); //prints time since program started
delay(1000);
time_end = micros(); //Es. 2.235.000
Serial.println(time_end ); //prints time since program started
Serial.println(time_end - time_start); //Intervallo in microsecondi
34
© FB - 05.2021
L’istruzione millis()
millis è una funzione built-in di Arduino che restituisce il numero di millisecondi trascorsi dalla pressione del tasto di reset o dall'avvio del programma. La funzione millis utilizza un contatore interno che aumenta di continuo, e quindi fornisce un modo semplice per misurare il tempo trascorso durante l'esecuzione di un programma. L'unità di misura è il millisecondo, ovvero un millisecondo è un'unità di tempo equivalente a 1/1000 di secondo. millis è spesso utilizzato in applicazioni che richiedono un controllo del tempo, come per esempio la creazione di timer, la gestione dei delay, e molto altro ancora. Il valore restituito e di tipo unsigned long (32 bit)
Possiamo utilizzare questa istruzione ad esempio per scrivere una funzione che se richiamata all'interno di un loop fa lampeggiare un led senza bloccare l’esecuzione del microcontrollore:
void ledTask() {
static unsigned long previousMillis = 0;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1000) {
previousMillis = currentMillis;
digitalWrite(ledPin, !digitalRead(ledPin));
}
}
35
© FB - 02.2024
La breadboard per la prototipazione di circuiti
La Breadboard
E’ utilizzata per realizzare prototipi di circuiti elettronici. Non necessita la saldatura dei componenti elettronici come avviene per la basetta mille fori o i circuiti stampati quindi è riutilizzabile.
© FB - 09.2020
La Breadboard
Le breadboard sono dispositivi di prototipazione che consentono di testare progetti di circuiti elettronici. I componenti del circuito sono interconnessi inserendo cavi nei fori della breadboard e utilizzando cavi jumper per completare il circuito quando necessario.
© FB - 03.2021
La Breadboard
I fori nella breadboard sono allineati con clip metalliche perché il metallo conduce l'elettricità e consente alla corrente di fluire. I fori nel breadboard sono collegati da clip metalliche nel modello mostrato dalle linee verdi nell'immagine qui a fianco:
© FB - 03.2021
La Breadboard
© FB - 04.2020
La Breadboard
© FB - 04.2020
Montaggio circuito su Breadboard
© FB - 04.2020
Montaggio disordinato da non imitare
Montaggi a confronto
Schema elettrico e montaggio a confronto
Montaggio
Una corretta alimentazione è fondamentale per il funzionamento del circuito, ma soprattutto evita il danneggiamento dei componenti. Per poter controllare facilmente una corretta alimentazione usiamo questa convenzione dei colori:
Consigli di utilizzo
Pinza a becco piatto, pinza tronchesina, forbice elettricista
© FB - 10.2019
Esercitazione
49
Esercizio a
Pull-up e pull-down
50
© FB - 10.2025
Collegamento tipico pull-up
51
© FB - 02.2024
Collegamento tipico con pulsante pull-down
52
© FB - 02.2024
Collegamento tipico con pulsante pull-up interno
53
© FB - 02.2024
Esercizi a
Mostrare il funzionamento di circuiti con collegamenti in pull-up, pull-down e internal pull-up. Montare i tre circuiti differenti
Se usate Tinkercad, collegare un multimetro per mostrare la tensioni sul pin di Arduino quando viene premuto il pulsante o quando non lo è
54
© FB - 11.2025
Esercizio b�Accensioni e spegnimento collegate alla pressione del pulsante
55
© FB - 10.2025
Esercizio b - Internal pull-up di Arduino
Spiegare il funzionamento del circuito e scrive il codice che alterni la visualizzazione del led in base alla pressione del pulsante
56
© FB - 10.2025
Esercizio c
Pressione Pulsante (con durata minima)
57
© FB - 10.2025
Rilevamento pressione pulsante di durata minima
Montare un circuito con 2 led e due pulsanti. Nel loop del programma verificare la pressione del pulsante P1. Accendere il Led1 (verde) se P1 (verde) premuto per un tempo minimo, altrimenti spegnerlo.
58
© FB - 10.2025
Rilevamento pressione pulsante di durata minima
Utilizzare la funzione digitalRead(P1_PIN) per ottenere lo stato del pulsante. Questa funzione, quando il pulsante è collegato in pullup, restituisce HIGH (oppure 1) se il pulsante è rilasciato e LOW se è premuto.
Scrivere una funzione denominata P1_Press() in C++ per il rilevamento di un pulsante premuto per un periodo di tempo minimo. Questa funzione deve restituire 1 se il pulsante è stato premuto costantemente per almeno 50 millisecondi, altrimenti deve restituire 0.
Logica della Funzione: Se il pulsante non è premuto inizialmente (digitalRead(P1_PIN) restituisce HIGH), la funzione deve restituire 0. Se il pulsante è premuto, inizia un conteggio: Attendi 1 millisecondo in ogni iterazione del ciclo utilizzando la funzione delay(1). Verifica se il pulsante è stato rilasciato (digitalRead(P1_PIN) restituisce HIGH). Se è stato rilasciato prima che il conteggio raggiunga 50 millisecondi, la funzione deve restituire 0. Se il pulsante è stato costantemente premuto per almeno 50 millisecondi, restituisci 1.
59
© FB - 10.2025
Rilevamento pressione pulsante di durata minima
Creare delle funzioni per inizializzare i led e i pulsanti da richiamare nella funzione setup dello sketch (void led_configura(); void puls_configura();)
nel loop richiamare la funzione puls_press(). Se pulsante premuto accendere il led (led_accendi) altrimenti spegnerlo (led_spegni)
60
© FB - 10.2025
Esercizio d
Puls_LongPress
61
© FB - 10.2025
Puls_LongPress
Aggiungere al programma precedente la funzione P2_longPress() da richiamare nel main loop. La funzione restituisce 1 o 0 (vero o falso)
Testare questa funzione nel loop del programma: Se viene premuto per più di 3 secondi il pulsante cambiare lo stato del led arancione (Led2) (Toggle/Inverti)
62
© FB - 10.2025
Esercizio e
Puls_Click
63
© FB - 10.2025
Puls_Click() e doppioClick() (opzionale)
Aggiungere al programma precedente la funzione P3_click() (restituisce 1 o 0) da richiamare nel main loop. Se viene cliccato il pulsante cambiare lo stato del led blu (Led3) (Toggle/Inverti)
Provare ad implementare anche la funzione P3_doppioClick() ad esempio fare led_blink del led blu
64
© FB - 10.2025
Valutazione
65
Griglia di valutazione
Si ricorda l’importanza di svolgere e consegnare i progetti assegnati.
66
© FB - 09.2025
Grazie per l’attenzione
Link/Riferimenti
68
© FB - 09.2025
Revisioni
v1.0 04/10/25 - versione iniziale
69