Li abbiamo visti centinaia di volte in TV, durante i giochi a premi, nei quali il primo concorrente che preme il pulsante acquisisce il diritto di rispondere alla domanda del conduttore. Il prototipo proposto è realizzato con la scheda ESPertino ma può essere benissimo implementato anche con altri dispositivi. Esistono diverse soluzioni per concretizzare al meglio il sistema, e alcune di esse prevedono anche l'uso degli interrupt. Vediamone alcune.
I quiz alla TV
Per anni abbiamo assistito, in televisione, ai divertenti e appassionanti giochi a premi pomeridiani e serali, nei quali il presentatore pone le domande a cui deve rispondere il primo concorrente che preme il proprio pulsante. Memorabili sono le puntate del giovedi sera di "Rischiatutto" ( durante gli anni 1970-1974, vedi figura 1), che teneva letteralmente incollati, davanti la TV, milioni di persone grazie alla simpatia e alla professionalità di Mike Bongiorno. Con molta probabilità fu lui l'ideatore di questa casistica di giochi.
Un pulsante per acquisire il diritto di prenotazione alla risposta
Il funzionamento del gioco è molto semplice: l'organizzatore propone e pone una domanda ai concorrenti, che possono essere anche alquanto numerosi. Il primo giocatore che preme il proprio pulsante acquisisce il diritto di rispondere alla domanda, escludendo tutti gli altri. La conquista di tale diritto è testimoniata anche da alcune segnalazioni acustiche e luminose. Tali sistemi di prenotazione possono essere utilizzati anche a casa, negli eventi organizzati con amici e parenti o nelle feste di compleanno dei bambini. Le idee possono essere tante.
Tante soluzioni possibili
In effetti esistono tante soluzioni circuitali per implementare un sistema di prenotazione di risposta. Oggi, con i moderni microcontrollori è, realmente, un gioco da ragazzi allestire tale dispositivo. Sono sufficienti solo un paio di controlli, alcune istruzioni condizionali e decisionali e il gioco è fatto. Ma è possibile realizzare il circuito tramite la vecchia metodologia a componenti discreti, probabilmente più efficace e nel proseguo dell'articolo spiegheremo anche il perché. Con una quantità modesta di circuiti logici, anche tale problematica può essere brillantemente risolta, al prezzo di qualche circuito integrato aggiuntivo e una basetta elettronica più capiente.
La parte hardware
A prima vista, il circuito da realizzare sembrerebbe non presentare alcun problema. In questa tipologia di applicazioni non è critica, infatti, la parte hardware ma solo il firmware e la sua concezione. Esso è composto da alcuni pulsanti, a disposizione di ciascun giocatore, da altrettanti dispositivi luminosi e da un attuatore sonoro, secondo lo schema di principio di cui alla figura 2.
Possiamo approntare, facilmente, uno schema elettrico con ESPertino, che riproduca esattamente il prototipo da realizzare. Esso è visibile in figura 3 e comprende i seguenti elementi:
- tre pulsanti normalmente aperti, uno a disposizione di ciascun concorrente;
- tre indicatori luminosi, uno per ogni giocatore;
- un unico segnalatore acustico.
Le porte, con funzionalità d'input, dedicate all'acquisizione dello stato logico dei pulsanti sono, rispettivamente, la GPIO33, la GPIO35 e la GPIO34. Tali porte, in stato di riposo, sono "forzate" a rilevare un livello logico basso grazie ad altrettante resistenze di pull-down da 10k (tale valore non è critico ed esso può essere compreso tra 1k e 1M). In caso di pressione di uno dei pulsanti lo stato logico della relativa porta si pone a livello alto (3.3V), grazie al collegamento diretto, in commutazione, con la fonte di alimentazione.
La segnalazione dell'avvenuta prenotazione del diritto di risposta è affidata, invece, a tre diodi Led, preceduti da altrettante resistenze di limitazione da 120 ohm. Le porte utilizzate, questa volta in funzionalità di output, sono la GPIO00, la GPIO02 e la GPIO04.
Infine, la segnalazione acustica è affidata a un piccolo buzzer collegato alla porta GPIO17 configurata, anch'essa, come uscita.
Prima di tutto l'equità
Perché parliamo di equità e di correttezza nella rilevazione degli eventi? Osserviamo il seguente codice per ESPertino, carichiamolo sulla scheda e collaudiamolo subito, secondo le specifiche tecniche del relativo schema elettrico.
void setup() { pinMode(0, OUTPUT); // Porta per il diodo Led pinMode(2, OUTPUT); // Porta per il diodo Led pinMode(4, OUTPUT); // Porta per il diodo Led pinMode(17, OUTPUT); // Porta per il buzzer pinMode(33, INPUT); // Porta per il pulsante pinMode(35, INPUT); // Porta per il pulsante pinMode(34, INPUT); // Porta per il pulsante //----Spegne tutte le luci e anche il buzzer------ digitalWrite(0,LOW); digitalWrite(2,LOW); digitalWrite(4,LOW); digitalWrite(17,LOW); } //-------------LOOP---------------- void loop() { if(digitalRead(33)==HIGH) { // Se preme il giocatore 1....... digitalWrite(0,HIGH); // Accende diodo Led digitalWrite(17,HIGH); // Suona il buzzer delay(2000); digitalWrite(0,LOW); // Spegne diodo Led digitalWrite(17,LOW); // Spegne il buzzer } if(digitalRead(35)==HIGH) { // Se preme il giocatore 2....... digitalWrite(2,HIGH); // Accende diodo Led digitalWrite(17,HIGH); // Suona il buzzer delay(2000); digitalWrite(2,LOW); // Spegne diodo Led digitalWrite(17,LOW); // Spegne il buzzer } if(digitalRead(34)==HIGH) { // Se preme il giocatore 3....... digitalWrite(4,HIGH); // Accende diodo Led digitalWrite(17,HIGH); // Suona il buzzer delay(2000); digitalWrite(4,LOW); // Spegne diodo Led digitalWrite(17,LOW); // Spegne il buzzer } }
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2299 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
Su quale numero si trova?
L’articolo è presente nel numero 1 di Firmware 2.0 che uscirà il primo febbraio.
Si certo con Espertino si possono fare infinite applicazioni, e come sempre ad ognuna di pongono problematica e alternative, come in questo specifico utilizzo, effettivamente sia pur remota come precisato, c’è la possibilità dell’errore, quindi sia pur trattasi di un processore anche velocissimo che sia, richiederebbe un’alternativa, con un piccolo circuito hardware estremo, il quale può superare questo scoglio. Può sembrare paradossale ma in certi casi al di là del gioco, sarà così!
Questo progetto lo vorrei applicarlo ad Arduino, vorrei creare un sistema che garantisca l’ordine di pressione da parte dei giocatori
Si! Anche con Arduino e possibile applicare questo gioco, ma come detto, anch’esso soffre dello stesso deficit di Espertino, cioè essendo un gestore sequenziale potrebbe incorrere nello stesso inconveniente descritto precedentemente, per tanto il risultato non cambierebbe. Ma! Essendo un gioco e le possibilità di errore molto remote, ritengo che vale la pena divertirsi anche con Arduino!
Per evitare che la sequenzialità su cosa posso orientarmi?
Finché si tratta di sistemi a processore il risultato non cambia solo con un circuito hardware si può avere questa certezza, non essendoci una sequenza ma una lettura fatto in concomitanza il problema di risolve egregiamente.