2 Jeux de Réflexe

Description :

Jeux de réflexe avec 30 niveaux disponibles.

Le but et de stopper la lumière rouge dans la zone jaune à l’aide du bouton.

Plus les niveaux augment plus la vitesse augmente et la zone jaune diminue.

Jeux de réflexe avec 30 niveaux disponibles.

 

 

    Prérequis :

Matériel :

  • 1 x Carte Arduino Uno
  • 1 x Bouton
  • 1 x Anneau 24 Leds NeoPixel
  • 1 x LCD 20×4
  • 1 x Module I2C
  • Fils de connexion
  • 1 x Breadboard

Version IDE :

Bibliothèque :

 

 

Vidéo de démonstration :

 

Schéma de câblage :

 

Code :

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

#define PIN        6               //Définit la sortie D1 de l'anneau sur le Pin 6 
#define NUMPIXELS 24               //Définit le nombre de Led sur l'anneau
#include <Adafruit_NeoPixel.h>     //Appelle bibliothèque Neopixel
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int Bt1 = 5; // La broche numérique 5 est reliée au  bouton 1. On lui donne le nom Bt1.
bool EtatBt1;
int PosLedRed;
int PrevPosLedRed = NUMPIXELS;
int PosLedJaune[3];
int Etape;
int Niveau;
int Vitesse = 200;
unsigned long currentTime = 0;
unsigned long previousTime = 0;

void setup() {
  Serial.begin(9600);              //Défini la vitesse du moniteur série
  pixels.begin();                  //INITIALIZE NeoPixel strip object
  lcd.init();
  lcd.backlight();
  pinMode(Bt1, INPUT_PULLUP);
  pixels.clear();
  pixels.show();
}

void loop() {
  int Nbrandom = random(1, NUMPIXELS - 2);
  currentTime = millis();
  switch (Etape) {
    case 0:
      lcd.setCursor(0, 0); lcd.print("- Jeux de reflexe  -");
      lcd.setCursor(0, 2); lcd.print(" Bouton pour jouer  ");
      EtatBt1 = digitalRead(Bt1);
      while (EtatBt1 == HIGH) {
        EtatBt1 = digitalRead(Bt1);
      }
      Etape++;
      break;

    case 1:
      lcd.clear();
      lcd.setCursor(0, 0); lcd.print(" Quand la led rouge ");
      lcd.setCursor(0, 1); lcd.print("  et dans le jaune  ");
      lcd.setCursor(0, 2); lcd.print("    Press Bouton    ");
      pixels.clear();
      pixels.show();
      delay(3000);
      Etape++;
      break;

    case 2:
      lcd.clear();
      lcd.setCursor(0, 0); lcd.print("Niveau: ");
      lcd.setCursor(8, 0); lcd.print(Niveau);
      lcd.setCursor(0, 1); lcd.print("     --- GO ---     ");
      lcd.setCursor(0, 2); lcd.print("    Press Bouton    ");
      PosLedJaune[0] = Nbrandom;
      PosLedJaune[1] = PosLedJaune[0] - 1;
      PosLedJaune[2] = PosLedJaune[0] + 1;
      previousTime = millis();
      Etape++;
      break;

    case 3:
      if ((currentTime - previousTime) > Vitesse) {
        previousTime = currentTime;
        PosLedRed++;
        PrevPosLedRed++;
        if (PosLedRed >  NUMPIXELS - 1) {
          PosLedRed = 0;
        }
        if (PrevPosLedRed >  NUMPIXELS - 1) {
          PrevPosLedRed = 0;
        }
        pixels.setPixelColor(PrevPosLedRed, pixels.Color(0 , 0, 0));
        pixels.setPixelColor(PosLedJaune[0], pixels.Color(100 , 100, 0));
        if (Niveau < 11) {

          pixels.setPixelColor(PosLedJaune[2], pixels.Color(100 , 100, 0));
        }
        if (Niveau < 21) {
          pixels.setPixelColor(PosLedJaune[1], pixels.Color(100 , 100, 0));
        }
        pixels.setPixelColor(PosLedRed, pixels.Color(255 , 0, 0));
        pixels.show();
      }
      EtatBt1 = digitalRead(Bt1);
      if (EtatBt1 == LOW) {
        if ((PosLedRed == PosLedJaune[0] || PosLedRed == PosLedJaune[1] || PosLedRed == PosLedJaune[2]) && Niveau < 11) {
          Etape = 5;
        }
        else if ((PosLedRed == PosLedJaune[0] || PosLedRed == PosLedJaune[1]) && Niveau < 21) {
          Etape = 5;
        }
        else if ((PosLedRed == PosLedJaune[0]) && Niveau < 31) {
          Etape = 5;
        }
        else {
          Etape = 4;
        }
        if (Niveau == 30) {
          Etape = 6;
        }
      }
      break;
    case 4:
      lcd.setCursor(0, 1); lcd.print("                    ");
      lcd.setCursor(0, 2); lcd.print("    !! Perdu !!     ");
      delay(1500);
      lcd.setCursor(0, 2); lcd.print("  Bt1 pour rejouer  ");
      EtatBt1 = digitalRead(Bt1);
      while (EtatBt1 == HIGH) {
        EtatBt1 = digitalRead(Bt1);
      }
      while (EtatBt1 == LOW) {
        Niveau = 0;
        Vitesse = 200;
        Etape = 1;
        EtatBt1 = digitalRead(Bt1);
      }
      break;
    case 5:
      lcd.setCursor(0, 1); lcd.print("                    ");
      lcd.setCursor(0, 2); lcd.print("    ** Gagner **    ");
      Etape = 2;
      Niveau++;
      if (Niveau == 11 || Niveau == 21) {
        Vitesse = 200;
      }
      Vitesse = Vitesse - 16;
      Serial.println(Niveau);
      Serial.println(Vitesse);
      delay(1500);
      pixels.clear();
      pixels.show();
      break;
    case 6:
      lcd.setCursor(0, 1); lcd.print("                    ");
      lcd.setCursor(0, 2); lcd.print("  !! Big Winner !!  ");
      delay(1500);
      lcd.setCursor(0, 2); lcd.print("  Bt1 pour rejouer  ");
      EtatBt1 = digitalRead(Bt1);
      while (EtatBt1 == HIGH) {
        EtatBt1 = digitalRead(Bt1);
      }
      while (EtatBt1 == LOW) {
        Niveau = 0;
        Vitesse = 200;
        Etape = 1;
        EtatBt1 = digitalRead(Bt1);
      }
      break;
  }
}

 


 

Laisser un commentaire