Oggi voglio parlarvi del mio progetto con Arduino per realizzare Simon, un classico gioco elettronico degli anni ’80, in cui bisogna memorizzare una sequenza di luci e suoni sempre più lunga ed elaborata e ripeterla premendo i quattro tasti corrispondenti.
Per realizzare il mio Simon, ho utilizzato un microcontroller Arduino UNO, quattro LED colorati, quattro pulsanti e un buzzer.
Lo schema
Lo schema è relativamente semplice, perchè consiste nel collegare 4 LED e 4 pulsanti: ognuno deve essere collegato da un capo a GND e dall’altro a un pin digitale di Arduino, tramite una resistenza: da 220 Ω per i LED, da 10 kΩ per i pulsanti. Anche il buzzer va collegato a GND e a un pin digitale.
Il codice
Nel codice (sketch, come si chiama per Arduino) ho definito molte funzioni, in modo da rendere il loop molto essenziale e leggibile:
void loop()
{
if (error == 0) {
// Add new note to sequence and play
addToSequence();
playSequence();
// Get user sequence
while ((currentIndex < sequenceLength) && (error == 0)) {
getUserSequence();
}
currentIndex = 0;
}
else {
// In case of mistake
gameOver();
}
}
La funzione più complessa è getUserSequence()
, che resta in ascolto della pressione dei pulsanti da parte dell’utente: quando premuto accende il LED e suona la nota corrispondente, e controlla che sia la nota giusta nella posizione corrente della sequenza.
Se la sequenza inserita dall’utente è corretta, lo sketch chiama le altre funzioni addToSequence()
per aggiungere una nuova nota casuale alla sequenza e playSequence()
per riprodurre la sequenza casuale, accendendo i LED ed emettendo i suoni.
Per lo sviluppo del codice, prima di assemblare tutti i componenti, ho usato l’ambiente di prototipazione Tinkercad di Autodesk dove puoi provare la simulazione del circuito funzionante.
Miniaturizzato su millefori
Dopo aver realizzato il prototipo sulle breadboard, ho potuto miniaturizzare il gioco usando due piccole schede millefori e una pulsantiera recuperata da un vecchio Tapuino.
Il prossimo e ultimo passo sarà realizzare una scatoletta stampata in 3D… 😉