• Post category:Mini jeux Arduino
  • Commentaires de la publication :2 commentaires
  • Dernière modification de la publication :mai 22, 2022
  • Temps de lecture :7 min de lecture

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

 


 

Cet article a 2 commentaires

  1. fabrice

    hello
    j’ai pas le texte sur l’ecran lcd, juste N et le chiffre des niveaux
    savez vous d’ou vient le problème?
    D’avance merci
    Fabrice

    1. steven

      Bonjour,
      Dsl je ne sais pas quoi vous dire, normalement soit on a rien soit on a tous l’affichage
      Je vous direz de vérifier vos connexions et d’essayer de re télécharger le code dans un premier temps.
      Vous pouvez aussi essayer votre afficher avec les exemples disponible avec la bibliothèque LCD.
      Cordialement,

Laisser un commentaire