Jeu Arduino avec LEDs Répétez la séquence

Le jeu Arduino avec boutons et LEDs « Repeat Sequence » est un autre mini-projet avec un ensemble minimal de composants requis. Pour assembler le circuit, il suffit d’une planche à pain, de connecteurs, de boutons et de diodes électroluminescentes avec des résistances. En appuyant sur les boutons-poussoirs, il faut répéter la séquence d’allumage des LEDs. À chaque nouveau niveau, la vitesse du jeu Arduino augmentera progressivement.


Ce dont vous aurez besoin

  • Arduino Uno / Arduino Nano / Arduino Mega
  • LEDs et résistances
  • boutons-poussoirs
  • passif ou actif buzzer
  • breadboard
  • fils de connexion

Matériel supplémentaire sur ce sujet:

  1. Jeu de réaction avec Arduino Uno
  2. Projet Arduino avec boutons «Déchiffrez le code»
  3. Branchement bouton-poussoir avec Arduino

Jeu Arduino avec LEDs et boutons Simon Says Game

Jeu Arduino avec LEDs et boutons – Répétez la séquence
Jeu Arduino avec LEDs et boutons – Répétez la séquence

Les LED sont connectées à l’Arduino en série à partir des ports numériques 2 à 6, les boutons sont connectés aux entrées analogiques de A0 à A4. Les ports de connexion des boutons et des LEDs peuvent être modifiés en les spécifiant dans le croquis. Seules 10 combinaisons dans le tableau char* kod[] sont utilisées dans le programme. Il est possible d’ajouter de nouvelles combinaisons au tableau et chaque LED ne doit être activée qu’une seule fois.

Programme Arduino pour jeu avec LEDs et boutons

// broche du haut-parleur
#define buzzer 11
// broches de connexion des LED
int led[] = { 2, 3, 4, 5, 6 };
// broches de connexion du bouton
int but[] = { A0, A1, A2, A3, A4 };
// options de combinaison (vous pouvez ajouter les vôtres)
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);
  // régler les broches de la LED
  for (byte i = 0; i <= num_led; i++) {
    pinMode(led[i], OUTPUT);
  }
  // régler les broches des boutons
  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() {
 
  // choisir l'une des combinaisons
  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;
  }
 
  // allumer les LED en fonction de la combinaison
  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++;
  }

  // attendre que tous les boutons soient enfoncés
  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;

    // si la combinaison correspond, commencer un nouveau niveau
    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;
    }
 
    // si la combinaison est incorrecte, en définir une nouvelle
    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;
    }

  }
}

Explication du code pour jeu Arduino avec LEDs Simon Says Game:

  1. après le niveau 10, la vitesse de commutation des LED n’augmente plus;
  2. les ports de connexion des boutons et des LED peuvent être modifiés dans le logiciel.

Conclusion. Le niveau actuel du jeu est affiché sur le moniteur du port Arduino IDE. Si la séquence est saisie de manière incorrecte, un signal sonore est émis par le haut-parleur piézoélectrique. Un autre projet de jeu Aduino avec des boutons et des LEDs peut être trouvé ici – Guess the Code Game. Si vous avez des questions sur le programme ou sur l’assemblage du circuit pour le jeu « Repeat Sequence » – laissez-les dans les commentaires.





Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.