Buongiorno a tutti,
vorrei realizzare il gioco di memoria con 3 led e 3 pulsanti dove viene mostrata una sequenza di accensioni via via più complesse: l'obiettivo è ripeterle correttamente premendo i bottoni corrispondenti;
il codice risponde solo alla pressione del primo pulsante:
#define LEDnum 3
#define ITERAZ 20
const byte LEDpin[LEDnum] = {13, 12, 11};
const byte BUTTONpin[LEDnum] = {6, 5, 4};
byte combinazione[ITERAZ];
byte letturaPrecedente[LEDnum];
int livello = 0;
void setup() {
for (byte c = 0; c < LEDnum; c++) {
pinMode(LEDpin[c], OUTPUT);
pinMode(BUTTONpin[c], INPUT);
letturaPrecedente[c] = digitalRead(BUTTONpin[c]);
}
randomSeed(analogRead(A0));
}
// Inizia il gioco
void loop() {
// Aggiunge un elemento random alla sequenza
combinazione[livello] = random(0, LEDnum);
// Incrementa il livello raggiunto
livello++;
for (byte c = 0; c < livello; c++) {
digitalWrite(LEDpin[combinazione[c]], HIGH);
delay(500);
digitalWrite(LEDpin[combinazione[c]], LOW);
delay(500);
}
for (byte c = 0; c < livello; c++) {
byte qualeBottone;
do {
qualeBottone = leggiBottone();
delay(20);
} while (qualeBottone == 255);
if (qualeBottone != combinazione[c]) {
livello = 0;
break;
}
}
if (livello >= 20)
livello = 0;
delay(10);
}
byte leggiBottone() {
byte qualeBottone = 255;
for (byte c = 0; c < LEDnum; c++) {
byte letturaAttuale = digitalRead(BUTTONpin[c]);
if (letturaAttuale == HIGH && letturaPrecedente[c] == LOW) {
qualeBottone = c;
letturaPrecedente[c] = HIGH;
}
else if (letturaAttuale == LOW && letturaPrecedente[c] == HIGH) {
letturaPrecedente[c] = LOW;
}
return qualeBottone;
}
}