Salve, sono da poco sbarcato sia nel mondo arduino che in quello della programmazione.
Ero interessato a realizzare un piccolo giochino in stile memory, nella maniera più spartana possibile, in modo da esercitarmi nella gestione di codici (relativamente) strutturati e di (relativamente) molte variabili.
Ora però, arrivato alla stesura del primo "livello" del gioco, mi trovo davanti ad un problema che, per quanto mi impegni, non riesco a risolvere: non riesco a confrontare i valori.
Innanzitutto ho 4 led sui pin 4,5,6,7, poi 4 tasti sui pin 8,9,10,11, e un buzzer sul pin 12.
Nel primo livello si accendono casualmente due led, per una durata anch'essa casuale. Il loro numero viene assegnato a "res1" e "res2".
if(level==2){
randomSeed(millis()+analogRead(3)); //inizializza la funzione random e assegna il primo risultato
res1=random(Led1,Led4);
digitalWrite(res1, HIGH); //accende il led risultante
delay(random(100,1000)); //delay randomico
digitalWrite(res1,LOW);
res2=random(Led1,Led4);
digitalWrite(res2,HIGH);
delay(random(100,1000));
digitalWrite(res2,LOW);
Successivamente, per leggere il tasto e confrontarlo con i risultati utilizzo una struttra while che viene eseguita finchè il confronto non è terminato.
Se il numero risultante dal bottone risulta uguale a res1, si avrà un bip corto, se invece è diverso sarà lungo. Tutto questo stampando sia il button che res1 sul monitor seriale appena un confronto risulta vero, in questo modo:
if(button!=res1){ //cosa fare se il bottone è sbagliato
Serial.println(button);
Serial.println(res1);
digitalWrite(buzzer,HIGH);
delay(500);
digitalWrite(buzzer,LOW);
completed=1;
button=0;
Ora, il problema è: il numero non solo viene stampato due volte, ma nella seconda cambia res1 e risulta sbagliato, come se eseguisse la verifica di nuovo decidendo che ho sbagliato tasto. Non riesco davvero a venirne a capo.
Se serve posto l'intero codice, per ora l'ho messo in un .txt allegato al messaggio
memory v0.0001.txt (3.52 KB)