Enib 2020 : Buzze l'éclair !

De Les Fabriques du Ponant
Aller à : navigation, rechercher

photo du projet

Boiteouverte.jpg Boitefermee.jpg

Que fait ce projet ?

C'est un jeu de base sur la vitesse de réaction du joueur. C'est une boîte en escalier avec les LEDs face au joueur et les boutons sur la marche. Au départ du jeu, les LEDS s'allument aléatoirement et le joueur doit appuyer sur le bouton de la LED correspondante. S'il réussit, il passe au niveau suivant; s'il échoue, la partie est perdue. Plus il appuie vite, plus il gagne de points mais plus les niveaux passent, moins les LEDs restent longtemps allumées... STAY FOCUS !
Seul la gestion du son n'a pas été aboutie.

Liste des composants

  • une carte Arduino Uno
  • 4 boutons
  • 4 LEDs (1 rouge, 1 vert, 1 jaune et 1 blanche)
  • 4 résistances de 470 Ohm
  • câbles mâles et femelles
  • une carte SD
  • un lecteur MP3
  • un haut parleur
  • un écran LCD
  • une batterie nomade

Code

ici je pose mon code documenté !
[[Media:sketch_jan16a.ino]]

#include <rgb_lcd.h>

rgb_lcd ecranRGB;

const int L1 = 2;
const int L2 = 3;
const int L3 = 4;
const int L4 = 5;
const int b1 = 8;
const int b2 = 9;
const int b3 = 10;
const int b4 = 11;
int led;
int point=0;
double time_depart;
int lose=0;
int niveau=3000;
int high=0;
int rajout=0;

void setup()
{
  //Contenu de l'initialisation
  pinMode(L1, OUTPUT); //L1 est une broche de sortie
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(b1, INPUT_PULLUP);
  pinMode(b2, INPUT_PULLUP);
  pinMode(b3, INPUT_PULLUP);
  pinMode(b4, INPUT_PULLUP);
  ecranRGB.begin(16,2, 0x00);
  ecranRGB.clear(); 
  ecranRGB.setCursor(1,0);
  ecranRGB.print("BUZZE L'ECLAIR");
  delay(2000);
  digitalWrite(L1, HIGH);
  digitalWrite(L2, HIGH);
  digitalWrite(L3, HIGH);
  digitalWrite(L4, HIGH);
  ecranRGB.clear();
  ecranRGB.setCursor(8,0);
  ecranRGB.print("3");
  delay(1000);
  digitalWrite(L1,LOW);
  digitalWrite(L2,LOW);
  digitalWrite(L3,LOW);
  digitalWrite(L4,LOW);
  ecranRGB.clear();
  ecranRGB.setCursor(8,0);
  ecranRGB.print("2");
  ecranRGB.setCursor(8,1);
  ecranRGB.print("3");
  delay(1000);
  digitalWrite(L1, HIGH);
  digitalWrite(L2, HIGH);
  digitalWrite(L3, HIGH);
  digitalWrite(L4, HIGH);
  ecranRGB.clear();
  ecranRGB.setCursor(8,0);
  ecranRGB.print("1");
  ecranRGB.setCursor(8,1);
  ecranRGB.print("2");
  delay(1000);
  digitalWrite(L1,LOW);
  digitalWrite(L2,LOW);
  digitalWrite(L3,LOW);
  digitalWrite(L4,LOW);
  ecranRGB.clear();
  ecranRGB.setCursor(8,0);
  ecranRGB.print("GO");
  ecranRGB.setCursor(8,1);
  ecranRGB.print("GO");  

}

void loop()
{
//contenu du programme
led = random(1,5);
if ( led == 1)
{
  time_depart=millis();
  while ( digitalRead(b1) == HIGH)
  {
     digitalWrite(L1, HIGH);
     if ( digitalRead(b2) == LOW || digitalRead(b3) == LOW || digitalRead(b4) == LOW || millis()-time_depart > niveau )
     {
      lose=1;
      break;
     }
  }
  rajout= 30-(millis()-time_depart)/100;
  point+= rajout;
}
if ( led == 2)
{
  time_depart=millis();
  while ( digitalRead(b2) == HIGH)
  {
     digitalWrite(L2, HIGH);
     if ( digitalRead(b1) == LOW || digitalRead(b3) == LOW || digitalRead(b4) == LOW  || millis()-time_depart > niveau )
     {
      lose=1;
      break;
     }
  }
  rajout= 30-(millis()-time_depart)/100;
  point+= rajout;
}
if ( led == 3)
{
  time_depart=millis();
  while ( digitalRead(b3) == HIGH)
  {
     digitalWrite(L3, HIGH);
     if ( digitalRead(b2) == LOW || digitalRead(b1) == LOW || digitalRead(b4) == LOW  || millis()-time_depart > niveau )
     {
      lose=1;
      break;
     }
  }
  rajout= 30-(millis()-time_depart)/100;
  point+= rajout;
}
if ( led == 4)
{
  time_depart=millis();
  while ( digitalRead(b4) == HIGH)
  {
     digitalWrite(L4, HIGH);
     if ( digitalRead(b2) == LOW || digitalRead(b3) == LOW || digitalRead(b1) == LOW || millis()-time_depart > niveau )
     {      
      lose=1;
      break;
     }
  }
  rajout= 30-(millis()-time_depart)/100;
  point+= rajout;
}
  ecranRGB.clear();
  ecranRGB.print("Score : ");
  ecranRGB.setCursor(7,0);
  ecranRGB.print(point);
  ecranRGB.setCursor(0,1);
  ecranRGB.print("Niveau ");
  ecranRGB.setCursor(7,1);
  ecranRGB.print((3000-niveau)/100);
  digitalWrite(L1,LOW);
  digitalWrite(L2,LOW);
  digitalWrite(L3,LOW);
  digitalWrite(L4,LOW);
  niveau-=100;
  if (lose==1)
  {
    digitalWrite(L1,HIGH);
    digitalWrite(L2,HIGH);
    digitalWrite(L3,HIGH);
    digitalWrite(L4,HIGH);
    point-=rajout;
    if (point>high)
    {
      high = point; 
    }
    ecranRGB.clear();
    ecranRGB.setCursor(0,1);
    ecranRGB.print("High Score : ");
    ecranRGB.setCursor(13,1);
    ecranRGB.print(high);
    ecranRGB.setCursor(1,0);
    ecranRGB.print("Ton Score : ");
    ecranRGB.setCursor(13,0);
    ecranRGB.print(point);
    point=0;
    niveau=3000;
    delay(500);
    while(digitalRead(b2) == HIGH && digitalRead(b3) == HIGH && digitalRead(b1) == HIGH && digitalRead(b4) == HIGH)
    {
    }
    digitalWrite(L1, HIGH);
    digitalWrite(L2, HIGH);
    digitalWrite(L3, HIGH);
    digitalWrite(L4, HIGH);
    ecranRGB.clear();
    ecranRGB.setCursor(8,0);
    ecranRGB.print("3");
    delay(1000);
    digitalWrite(L1,LOW);
    digitalWrite(L2,LOW);
    digitalWrite(L3,LOW);
    digitalWrite(L4,LOW);
    ecranRGB.clear();
    ecranRGB.setCursor(8,0);
    ecranRGB.print("2");
    ecranRGB.setCursor(8,1);
    ecranRGB.print("3");
    delay(1000);
    digitalWrite(L1, HIGH);
    digitalWrite(L2, HIGH);
    digitalWrite(L3, HIGH);
    digitalWrite(L4, HIGH);
    ecranRGB.clear();
    ecranRGB.setCursor(8,0);
    ecranRGB.print("1");
    ecranRGB.setCursor(8,1);
    ecranRGB.print("2");
    delay(1000);
    digitalWrite(L1,LOW);
    digitalWrite(L2,LOW);
    digitalWrite(L3,LOW);
    digitalWrite(L4,LOW);
    ecranRGB.clear();
    ecranRGB.setCursor(8,0);
    ecranRGB.print("GO");
    ecranRGB.setCursor(8,1);
    ecranRGB.print("GO");
    lose=0;
  }
  digitalWrite(L1,LOW);
  digitalWrite(L2,LOW);
  digitalWrite(L3,LOW);
  digitalWrite(L4,LOW);
 
  delay(500);

}

Catégories