CONTENUTO ►
Gioco a microcontrollore Arduino con pulsanti e LED “Ripeti la sequenza” è un altro mini-progetto con un set minimo di componenti necessari. Per assemblare il circuito elettrico sono sufficienti una breadboard, pulsanti e LED con resistenze. Premendo i pulsanti, è necessario ripetere la sequenza di accensione dei LED collegati ad Arduino. Ad ogni nuovo livello, la velocità del “Simon Says Game Arduino” aumenterà gradualmente.
Per questa attività sono necessari:
- Arduino Uno / Arduino Nano / Arduino Mega
- LED e resistenza
- pulsanti
- buzzer
- breadboard
- cavi di collegamento
Arduino gioco con LED “Simon Says Game”
I LED sono collegati alla scheda Arduino Uno in serie dalla porta digitale 2 alla 6, mentre i pulsanti sono collegati agli ingressi analogici da A0 ad A4. Le porte di connessione dei pulsanti e dei LED possono essere modificate specificandole nello sketch. Nel programma vengono utilizzate solo 10 combinazioni nell’array char* kod[]. È possibile aggiungere nuove combinazioni all’array, ma ogni LED deve essere acceso una sola volta.
Programma Arduino per gioco con LED “Ripeti la sequenza”
// pin del buzzer #define buzzer 11 // pin del LED int led[] = { 2, 3, 4, 5, 6 }; // pin dei pulsanti int but[] = { A0, A1, A2, A3, A4 }; // opzioni di combinazione (è possibile aggiungerne di proprie) char* kod[] = { "01324", "40231", "02413", "03241", "40312", "14320", "13402", "12304", "41203", "10423" }; int del = 1000; int w = -1; byte level = 1; byte b1, b2, b3, b4, b5; String KOD, OTV, A; byte num_led = sizeof(led) / sizeof(int*); byte num_but = sizeof(but) / sizeof(int*); byte num_cod = sizeof(kod) / sizeof(char*); byte len = strlen(kod[0]); boolean button1WasUp = true; boolean button2WasUp = true; boolean button3WasUp = true; boolean button4WasUp = true; boolean button5WasUp = true; void setup() { pinMode(buzzer, OUTPUT); // regolare i pin del LED for (byte i = 0; i <= num_led; i++) { pinMode(led[i], OUTPUT); } // regolare i pin dei pulsanti for (byte i = 0; i <= num_but; i++) { pinMode(but[i], INPUT_PULLUP); } Serial.begin(9600); Serial.println("LEVEL - " + String(level)); Serial.println(""); } void loop() { // scegliere una delle combinazioni while (w == -1) { int x = random(0, num_cod - 1); KOD = {kod[x]}; b1 = 0; b2 = 0; b3 = 0; b4 = 0; b5 = 0; w = 0; } // accendere i LED in base alla combinazione while (w <= len - 1) { A = KOD[w]; int a = A.toInt(); digitalWrite(led[a], HIGH); tone(buzzer, 5 * led[a]); delay(10); noTone(buzzer); delay(del); digitalWrite(led[a], LOW); w++; } // attendere che siano premuti tutti i pulsanti while (w >= len - 1 and w <= len + len) { boolean button1IsUp = digitalRead(but[0]); boolean button2IsUp = digitalRead(but[1]); boolean button3IsUp = digitalRead(but[2]); boolean button4IsUp = digitalRead(but[3]); boolean button5IsUp = digitalRead(but[4]); if (b1 == 0 and button1WasUp and !button1IsUp) { delay(10); button1IsUp = digitalRead(but[0]); if (!button1IsUp) { tone(buzzer, 5 * led[0]); delay(10); noTone(buzzer); OTV = OTV + "0"; digitalWrite(led[0], HIGH); b1 = 1; w++; } } button1WasUp = button1IsUp; if (b2 == 0 and button2WasUp and !button2IsUp) { delay(10); button2IsUp = digitalRead(but[1]); if (!button2IsUp) { tone(buzzer, 5 * led[1]); delay(10); noTone(buzzer); OTV = OTV + "1"; digitalWrite(led[1], HIGH); b2 = 1; w++; } } button2WasUp = button2IsUp; if (b3 == 0 and button3WasUp and !button3IsUp) { delay(10); button3IsUp = digitalRead(but[2]); if (!button3IsUp) { tone(buzzer, 5 * led[2]); delay(10); noTone(buzzer); OTV = OTV + "2"; digitalWrite(led[2], HIGH); b3 = 1; w++; } } button3WasUp = button3IsUp; if (b4 == 0 and button4WasUp and !button4IsUp) { delay(10); button4IsUp = digitalRead(but[3]); tone(buzzer, 5 * led[3]); delay(10); noTone(buzzer); if (!button4IsUp) { OTV = OTV + "3"; digitalWrite(led[3], HIGH); b4 = 1; w++; } } button4WasUp = button4IsUp; if (b5 == 0 and button5WasUp and !button5IsUp) { delay(10); button5IsUp = digitalRead(but[4]); tone(buzzer, 5 * led[4]); delay(10); noTone(buzzer); if (!button5IsUp) { OTV = OTV + "4"; digitalWrite(led[4], HIGH); b5 = 1; w++; } } button5WasUp = button5IsUp; // se la combinazione corrisponde, inizia un nuovo livello if (w == len + len and OTV == KOD) { Serial.println(""); Serial.println("OK"); Serial.println(""); level++; Serial.println("LEVEL - " + String(level)); del = del - 100; if (del < 10) { del = 100; } delay(1000); for (byte i = 0; i <= num_led; i++) { digitalWrite(led[i], LOW); } delay(2000); KOD = ""; OTV = ""; w = -1; } // se la combinazione non è corretta, definirne una nuova if (w == len + len and OTV != KOD) { Serial.println(""); Serial.println("NO"); Serial.println(""); tone(buzzer, 100); delay(1000); noTone(buzzer); Serial.println("LEVEL - " + String(level)); for (byte i = 0; i <= num_led; i++) { digitalWrite(led[i], LOW); } delay(2000); KOD = ""; OTV = ""; w = -1; } } }
Spiegazione del codice per gioco Arduino con LED “Ripeti la sequenza”:
- dopo il livello 10 la velocità di accensione dei LED non aumenta;
- le porte per il collegamento dei pulsanti e dei LED possono essere cambiate nel programma senza modificare i comandi digitalRead e digitalWrite nello sketch.
Conclusione. Il livello attuale del gioco viene visualizzato sul monitor della porta IDE di Arduino. Se la sequenza viene inserita in modo errato, viene attivato un segnale sonoro sul piezodinamico (buzzer). Un altro progetto di gioco Aduino con pulsanti e LED può essere trovato qui – Guess the Code Game. Se avete domande sul programma o sulla costruzione del circuito per il gioco “Ripeti la sequenza con Arduino”, lasciatele nei commenti.
Lascia un commento