Gioco di memoria

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;
  }
}

non capisco perchè tieni traccia delle pressioni precedenti
me ne sfugge la logica

le pressioni precedenti vanno ripetute tutte le volte aggiungendo la nuova immagino
è in vecchi gioco Simon

sì, lo ricordavo
io intendevo non nelll'array combinazione, nell'array letturaPrecedente, mi sembra una complicazione inutile

Standardoil:
sì, lo ricordavo
io intendevo non nelll'array combinazione, nell'array letturaPrecedente, mi sembra una complicazione inutile

ops visto...