Piccolo memory per iniziare

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)

Prima di tutto, essendo il tuo primo post, ti consiglio di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ...

... poi, non sono entrato nel dettaglio del codice, ma, già solo guardandolo così al volo, noto che stai trascurando un particolare importante. I pulsanti REALI non sono come quelli IDEALI che tu puoi immaginare ... quando premi un pulsante in realtà sul pin digitale succede questo :

|500x273

... che fa si che tu leggi come se un pulsante fosse premuto e rilasciato tante volte. Quindi, direi che come prima cosa puoi cominciare a modificare il codice inserendo delle tecniche di "debouncing" (cerca con Google), dopo di che si può passare ad esaminare la logica per vedere altre cose che non vanno.

Guglielmo