ENIB 2022 - groupe A : The Timer
photo du projet
Fin de la 1ère journée :
Projet Final :
- Axel RAULT
- Marius ANDRIEUX
- Thomas EVEN
- Mael JOUSSET
Que fait ce projet ?
Lors du démarrage, il faut tourner l'interrupteur pour choisir le mode de jeu. Soit ça se joue tout seul ou en duo. Une fois le mode choisi, il faut appuyer sur un bouton pour lancer la partie.
Mode 1 :
Ce premier mode est le mode solo, il n'y a qu'un seul joueur.
le temps de référence s'affiche sur l'écran.
3 leds s'allument une par une pour donner le départ.
Une fois le départ donné, le joueur doit chronométrer dans sa tête le temps de référence. Lorsqu'il pense avoir atteint le temps, il doit appuyer sur le bouton poussoir pour valider son temps. Si le temps chronométré par le joueur est a plus ou moins 0.5 sec du temps de référence affiché en début de partie. Alors il a gagne la partie et la led verte s'allume. S'il est en dehors de cette plage de temps, une led rouge s'allume, le joueur a perdu.
Mode 2 :
le deuxième mode est le mode duo, il se joue à deux joueurs.
le temps de référence s'affiche sur l'écran.
3 leds s'allument une par une pour donner le départ.
Une fois le départ donné, les joueurs doivent chronométrer dans leur tête le temps de référence. Lorsqu'ils pensent avoir atteint le temps, ils doivent chacun appuyer sur leur bouton poussoir pour valider leur temps. Le joueur le plus proche du temps de référence gagne la partie. L'écran affiche sur un fond de la couleur du bouton du gagnant le meilleur temps.
Liste des composants
- 1 écran LCD
- 1 carte arduino
- 3 leds
- 2 bouton poussoir
- 1 cable USB - microUSB
- 1 bread board
- plusieurs câbles
- 1 câble pour l'écran LCD
Code
/* Hello World.ino 2013 Copyright (c) Seeed Technology Inc. All right reserved. Author:Loovee 2013-9-18 Grove - Serial LCD RGB Backlight demo. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <Wire.h> #include "rgb_lcd.h" rgb_lcd lcd; const int colorR = 0; const int colorG = 0; const int colorB = 0; int endd=0; const int in_solo = 14; const int led_red=15,led_yellow=13,led_green=12; bool bpBLANC=digitalRead(0); bool bpBLEU=digitalRead(2); int randTime = 0; int rnd=0; void setup() { Serial.begin(9600); // set up the LCD's number of columns and rows: pinMode(in_solo,INPUT); pinMode(led_red,OUTPUT); pinMode(led_yellow,OUTPUT); pinMode(led_green,OUTPUT); lcd.begin(16, 2); lcd.setRGB(colorR, colorG, colorB); lcd.clear(); } void loop() { //-----------------------------DEMARRAGE-------------------------------------- lcd.clear(); lcd.setCursor(0,0); lcd.print("CHOISISSEZ UN"); lcd.setCursor(0, 1); lcd.print("MODE DE JEU"); delay(2000); while(1){ endd=0; lcd.clear(); lcd.setCursor(0,0); lcd.print("PUIS APPUYEZ SUR"); lcd.setCursor(0, 1); lcd.print("UN BOUTON"); delay(100); bpBLANC = digitalRead(0); bpBLEU = digitalRead(2); if(!bpBLANC or !bpBLEU) { //-----------------------------MODE SOLO-------------------------------------- if(digitalRead(in_solo)) { Serial.println("mode solo"); //mode solo if(randTime==0) {randTime = random(8000,15000);} lcd.clear(); lcd.setCursor(0,0); lcd.print("le temps est :"); lcd.setCursor(0, 1); lcd.print(randTime/1000); lcd.setCursor(5, 1); lcd.print("s"); if(!bpBLANC) { digitalWrite(led_red,HIGH); delay(1000); digitalWrite(led_yellow,HIGH); delay(1000); digitalWrite(led_green,HIGH); delay(1000); digitalWrite(led_red,LOW); digitalWrite(led_yellow,LOW); digitalWrite(led_green,LOW); lcd.clear(); lcd.setCursor(0,0); lcd.print("C'EST PARTI !!!"); lcd.setCursor(0, 1); lcd.print(randTime/1000); lcd.setCursor(5, 1); lcd.print("s"); float rnd_init = millis(); while(endd==0 ) { float rnd = millis()-rnd_init; if(rnd > randTime+20000){ lcd.clear(); lcd.setCursor(0,0); lcd.print("YOU LOSE !!!"); lcd.setCursor(0, 1); lcd.print(rnd/1000); lcd.setCursor(5, 1); lcd.print("s "); digitalWrite(led_red,HIGH); lcd.setRGB(255, 0, 0); delay(3000); lcd.setRGB(0, 0, 0); digitalWrite(led_red,LOW); randTime = 0; endd=1;} Serial.println(rnd); affichage_BP(); if(!bpBLANC) { Serial.println("rentrer de fonction"); endd = 1; if(rnd < (randTime+500) and rnd > (randTime-500)) { lcd.clear(); lcd.setCursor(0,0); lcd.print("YOU WIN !!!"); Serial.println("rentrer WIN"); lcd.setCursor(0, 1); lcd.print(rnd/1000); lcd.setCursor(5, 1); lcd.print("s "); digitalWrite(led_green,HIGH); lcd.setRGB(0, 255, 0); delay(3000); lcd.setRGB(0, 0, 0); digitalWrite(led_green,LOW); randTime = 0; } else { lcd.clear(); lcd.setCursor(0,0); lcd.print("YOU LOSE !!!"); Serial.println("rentrer LOSE"); lcd.setCursor(0, 1); lcd.print(rnd/1000); lcd.setCursor(5, 1); lcd.print("s "); digitalWrite(led_red,HIGH); lcd.setRGB(255, 0, 0); delay(3000); digitalWrite(led_red,LOW); lcd.setRGB(0, 0, 0); randTime = 0; } } } } } //-----------------------------MODE DUO-------------------------------------- else { //mode duo Serial.println("mode duo"); if(randTime==0) {randTime = random(8000,15000);} lcd.clear(); lcd.setCursor(0,0); lcd.print("le temps est :"); lcd.setCursor(0, 1); lcd.print(randTime/1000); lcd.setCursor(5, 1); lcd.print("s"); if(!bpBLANC or !bpBLEU) { digitalWrite(led_red,HIGH); delay(1000); digitalWrite(led_yellow,HIGH); delay(1000); digitalWrite(led_green,HIGH); delay(1000); digitalWrite(led_red,LOW); digitalWrite(led_yellow,LOW); digitalWrite(led_green,LOW); lcd.clear(); lcd.setCursor(0,0); lcd.print("C'EST PARTI !!!"); lcd.setCursor(0, 1); lcd.print(randTime/1000); lcd.setCursor(5, 1); lcd.print("s"); float rnd_init = millis(); float rnd1 = 0; float rnd2 = 0; delay(100); while(endd==0) { //affichage_BP(); bpBLANC = digitalRead(0); bpBLEU = digitalRead(2); delay(50); if(!bpBLEU) { rnd1 = millis()-rnd_init; //Serial.println(rnd1); //Serial.println("rnd1"); delay(100); } if(!bpBLANC) { rnd2 = millis()-rnd_init; //Serial.println("rnd2"); // Serial.println(rnd2); delay(100); } float timeOut = millis()-rnd_init; if (rnd1 != 0 and rnd2 != 0){ float diff1 = rnd1- randTime; float diff2 = rnd2- randTime; if (abs(diff1) < abs(diff2) ) { lcd.clear(); lcd.setCursor(0,0); Serial.println("Calcul difference BLUE WIN"); lcd.setRGB(0, 0, 255); lcd.print("BLUE WIN !!!"); lcd.setCursor(0, 1); lcd.print(rnd1/1000); lcd.setCursor(5, 1); lcd.print("s "); delay(3000); randTime = 0; endd=1; } else { lcd.clear(); lcd.setCursor(0,0); Serial.println("Calcul difference WHITE WIN"); lcd.setRGB(255, 255, 255); lcd.print("WHITE WIN !!!"); lcd.setCursor(0, 1); lcd.print(rnd2/1000); lcd.setCursor(5, 1); lcd.print("s "); delay(3000); randTime = 0; endd=1; } } if (timeOut >= 30000) { if(rnd1 == 0 and rnd2 == 0){ lcd.clear(); lcd.setCursor(0,0); lcd.setRGB(255, 0, 0); Serial.println("Timeout = 0 0 BOTH LOSE"); lcd.print("BOTH LOSE !!!"); lcd.setCursor(0, 1); lcd.print("Time Out"); lcd.setCursor(5, 1); lcd.print("s "); delay(3000); randTime = 0; endd=1;} else if(rnd2 == 0){ lcd.clear(); lcd.setCursor(0,0); lcd.setRGB(0, 0, 255); Serial.println("Timeout = white pas appuyer blue win"); lcd.print("BLUE WIN !!!"); lcd.setCursor(0, 1); lcd.print(rnd1/1000); lcd.setCursor(5, 1); lcd.print("s "); delay(3000); randTime = 0; endd=1;} else{ lcd.clear(); lcd.setCursor(0,0); lcd.setRGB(255, 255, 255); Serial.println("Timeout = blue pas appuyer white win"); lcd.print("WHITE WIN !!!"); lcd.setCursor(0, 1); lcd.print(rnd2/1000); lcd.setCursor(5, 1); lcd.print("s "); delay(3000); randTime = 0; endd=1;} } } } } } } } void affichage_BP(){ bpBLANC = digitalRead(0); bpBLEU = digitalRead(2); Serial.println("BP_BLANC");Serial.println(bpBLANC); Serial.println(); Serial.println("BP_BLEU");Serial.println(bpBLEU); Serial.println(); delay(100); } /********************************************************************************************************* END FILE *********************************************************************************************************/