Corso base di Arduino: pulsanti per quiz

L'articolo che segue illustra la realizzazione di base per una pulsantiera destinata ai giochi a quiz. Dopo che il presentatore pone una domanda, il primo concorrente che riesce a premere il pulsante può rispondere al quesito. Tale diritto è testimoniato anche dall'accensione di una lampada posta vicino al contendente.

Avatar di Elettronica Open Source

a cura di Elettronica Open Source

banner prova1

Quante volte abbiamo visto in TV, durante i giochi a premi, i concorrenti premere affannosamente il proprio pulsante, per accaparrarsi il diritto di rispondere alle domande del presentatore? Anche a casa, spesso, tra parenti e amici si suole giocare ai quiz. In tutti questi casi occorre un sistema per sancire, in modo inequivocabile, colui che ha diritto a rispondere, avendo premuto il pulsante prima degli altri.

Il circuito

Indipendentemente dal numero dei pulsanti, la filosofia di funzionamento è sempre la stessa. Si tratta di un ciclo infinito all'interno del quale viene controllato lo stato logico dei pulsanti. Appena si verifica una pressione degli stessi il sistema avverte con un segnale luminoso (ed eventualmente sonoro) quale ingresso è stato attivato prima di tutti.

Schema elettrico e connessioni

Il sistema proposto nell'esempio controlla quattro utenze ma, con lo stesso principio, è possibile modificare tale numero secondo le proprie esigenze. La figura 1 mostra lo schema elettrico e il relativo cablaggio. Le quattro porte, configurate come ingressi, sono collegate a massa, durante lo stato di riposo, grazie alle relative resistenze di pull-down. La pressione di uno dei pulsanti, rilevata dal software, attiva la specifica routine che illumina il corrispondente indicatore.

figura 1 schema elettrico e connessioni
Figura 1: schema elettrico e connessioni

Lo sketch

In figura 2 è mostrato lo sketch da digitare sull'IDE di Arduino. Esso risulta abbastanza semplice. La funzione setup() configura le porte 4, 5, 6 e 7 quali ingressi digitali, per i pulsanti dei concorrenti e le porte 8, 9, 10 e 11 quali uscite digitali, per il pilotaggio dei diodi LED. Inoltre, tali uscite sono poste, inizialmente, a un livello logico basso. Il cuore del programma, ovviamente, risiede nella funzione loop(). In un ciclo infinito "while" vengono controllati continuamente, e molto velocemente, i quattro pulsanti. Non appena uno dei quattro concorrenti preme il suo pulsante, la variabile "ChiHaPremuto" riceve il numero identificativo del giocatore e il ciclo infinito termina subito. Quindi ha luogo l'accensione della relativa lampada, effettuata tramite l'omonima funzione, alla quale è passato, come parametro, il numero della porta di output da gestire.

figura 2 sketch
Figura 2: lo sketch

Il sistema è equo?

Sembrerebbe che un siffatto sistema di gestione delle priorità sia esente da ogni forma d'ingiustizia. È invece no, per motivi non imputabili alla filosofia di funzionamento ma alla sequenzialità di esecuzione delle istruzioni, il prototipo potrebbe giudicare erroneamente chi ha premuto prima il pulsante. E lo dimostriamo con un esempio. Si supponga che l'esecuzione del software sia arrivata alla riga 25, ossia dopo il controllo del pulsante del giocatore numero 1. Proprio in tale istante il concorrente numero 1 preme il suo pulsante e subito dopo (parliamo di millisecondi) il concorrente numero 2 fa lo stesso. La successiva istruzione di programma è quella del controllo dello stato dell'input del giocatore numero 2, che viene decretato come "vincitore" ma in realtà chi ha premuto per prima è stato il concorrente numero 1.

Anche se tale evenienza è molto rara si potrebbe verificare. Si può risolvere il problema adottando un sistema hardware più complesso e utilizzando una ramificata rete di porte logiche.

Tom's Consiglia

Per chi inizia ora e voglia dotarsi di tutto l'occorrente, Arduino Uno si trova facilmente a un prezzo abbordabile.