#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// Définition des broches
const int LCD = A4; // Broche analogique I2C pour la LCD
const int buzz = 13; // Broche numérique pour le buzzer
// Variables
int dureerouge;
int dureebleu;
int t1;
int t2;
int i=0;
int scorerouge = 3;
int scorebleu = 3;
int etatInterrupteurbleu;
int etatInterrupteurrouge;
void setup() {
// Initialisation de la communication série (avec l'ordinateur - 9600 = débit des données)
Serial.begin(9600);
// Initialisation de la LCD et LEDs comme sortie et des boutons comme entrées
pinMode(LCD, OUTPUT);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
etatInterrupteurbleu = digitalRead(4);
etatInterrupteurrouge = digitalRead(2);
lcd.init();
lcd.backlight();
}
void loop() {
i++;
if(i%2==0){
digitalWrite(7,HIGH);
Serial.print("Joueur rouge : appuyez sur le bouton pendant la durée que vous souhaitez ");
delay(3000);
while(etatInterrupteurrouge == LOW){
lcd.setCursor(0, 0);
Serial.print("En attente...");
lcd.print("En attente...");
}
while(etatInterrupteurrouge == HIGH){
Serial.print("Appuis en cours");
lcd.setCursor(0, 0);
lcd.print("Appuis en cours");
t1 = millis();
tone(buzz, 1000);
}
t2 = millis();
noTone(buzz);
dureerouge = t2 - t1;
lcd.setCursor(0, 0);
Serial.print("Durée d'appuis: ");
Serial.println(dureerouge);
lcd.print("Durée d'appuis: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(dureerouge);
lcd.print(" ms");
delay(1000);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
Serial.print("Joueur bleu : appuyez sur le bouton pendant la même durée ");
while(etatInterrupteurbleu == LOW){
lcd.setCursor(0, 0);
Serial.print("En attente...");
lcd.print("En attente...");
}
while(etatInterrupteurbleu == HIGH){
Serial.print("Appuis en cours");
lcd.setCursor(0, 0);
lcd.print("Appuis en cours");
t1 = millis();
tone(buzz, 1000);
}
t2 = millis();
noTone(buzz);
dureebleu = t2 - t1;
lcd.setCursor(0, 0);
Serial.print("Durée d'appuis: ");
Serial.println(dureebleu);
lcd.print("Durée d'appuis: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(dureebleu);
lcd.print(" ms");
delay(1000);
if(dureebleu <0.8*dureerouge || dureebleu>1.2*dureerouge) {
Serial.print("La durée d'appuis du joueur bleu ne coïncide pas avec celle du joueur rouge");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Nope");
i++;
scorebleu--;
}
else {
Serial.print("La durée d'appuis du joueur bleu coïncide avec celle du joueur rouge");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Good");
scorebleu++;
}
}
else{
digitalWrite(8,HIGH);
Serial.print("Joueur bleu : appuyez sur le bouton pendant la durée que vous souhaitez ");
delay(3000);
while(etatInterrupteurbleu == LOW){
lcd.setCursor(0, 0);
Serial.print("En attente...");
lcd.print("En attente...");
}
while(etatInterrupteurbleu == HIGH){
Serial.print("Appuis en cours");
lcd.setCursor(0, 0);
lcd.print("Appuis en cours");
t1 = millis();
tone(buzz, 1000);
}
t2 = millis();
noTone(buzz);
dureebleu = t2 - t1;
lcd.setCursor(0, 0);
Serial.print("Durée d'appuis: ");
Serial.println(dureebleu);
lcd.print("Durée d'appuis: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(dureebleu);
lcd.print(" ms");
delay(1000);
digitalWrite(8,LOW);
digitalWrite(7,HIGH);
Serial.print("Joueur rouge : appuyez sur le bouton pendant la même durée ");
while(etatInterrupteurrouge == LOW){
lcd.setCursor(0, 0);
Serial.print("En attente...");
lcd.print("En attente...");
}
while(etatInterrupteurrouge == HIGH){
Serial.print("Appuis en cours");
lcd.setCursor(0, 0);
lcd.print("Appuis en cours");
t1 = millis();
tone(buzz, 1000);
}
t2 = millis();
noTone(buzz);
dureerouge = t2 - t1;
lcd.setCursor(0, 0);
Serial.print("Durée d'appuis: ");
Serial.println(dureerouge);
lcd.print("Durée d'appuis: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(dureerouge);
lcd.print(" ms");
delay(1000);
if(dureebleu <0.8*dureerouge || dureebleu>1.2*dureerouge) {
Serial.print("La durée d'appuis du joueur rouge ne coïncide pas avec celle du joueur bleu");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Nope");
i++;
scorerouge--;
}
else {
Serial.print("La durée d'appuis du joueur rouge coïncide avec celle du joueur bleu");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Good");
scorerouge++;
}
}
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Scores : ");
lcd.setCursor(0, 1);
lcd.print("Score bleu : ");
lcd.print(scorebleu);
lcd.setCursor(0, 2);
lcd.print("Score rouge : ");
lcd.print(scorerouge);
}