Enib 2020 : Buzze l'éclair ! : Différence entre versions
(→photo du projet) |
(→Que fait ce projet ?) |
||
(2 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 5 : | Ligne 5 : | ||
==Que fait ce projet ? == | ==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 ! <br> | 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 ! <br> | ||
+ | Seul la gestion du son n'a pas été aboutie. | ||
==Liste des composants== | ==Liste des composants== | ||
Ligne 22 : | Ligne 23 : | ||
<pre> | <pre> | ||
ici je pose mon code documenté ! | 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); | ||
+ | |||
+ | } | ||
</pre> | </pre> | ||
Version actuelle datée du 17 janvier 2020 à 15:08
photo du projet
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); }