Après avoir longuement lu le tuto de Krispies et Naudnaud dans tous les sens (un très grand merci à eux d'ailleurs) je me suis inspiré de leur travail pour vous proposer ici ma version de la ciblerie avec des modes multijoueurs.
Je ne vous remets de schéma de cablage car dans il est le même que celui du tuto dans les grandes lignes. Donc s'il y a besoin d'aide, lisez bien le code (qui se trouve un peu plus bas) et aller voir leur travail au passage sans quoi ce sujet ne serait pas possible. (ma version est sans fil mais peut également être filaire).
Dans cette version, je vous propose différents modes :
- Réaction 1J : jeu à 1J où il faut éteindre le plus vite possible chaque cible qui s'allume (un temps mort aléatoire entre chaque cible).
- Vitesse 1J : jeu à 1J où il faut éteindre le plus vite possible un nombre de cible défini (pas de temps mort entre chaque cible qui s'enchaîne).
- Réaction 2J : jeu à 2J où il faut être le premier à toucher la cible de sa couleur pour marquer un point.
- Réaction 3J : jeu à 3J où il faut être le premier à toucher la cible de sa couleur pour marquer un point (malheureusement non fonctionnel pour le moment...).
- Réflexe : jeu à 1J où il faut éteindre le plus vite possible les cibles vertes uniquement (sinon -5 mais pour le moment bug sur l'affichage des cibles rouges). Un rebours aléatoire, un affichage aléatoire d'une cible verte ou rouge, +3 pour 1s, +2 pour 2s et +1 pour 3s.
- Test des cibles : Affichage sur l'écran du numéro de la cible touchée
Après cette brève présentation, voici quelques aperçus cliquables (désolé de la qualité des photos prisent avec le téléphone surtout les plus sombres pour montrer ce qui est affiché à l'écran) :
Vue d'ensemble des deux boîtiers (une nouvelle fois un très grand merci à Krispies pour m'avoir fait connaître le water transfer !!! enfin il faut encore que je m'améliore)
Cible très sommaire (un carré de plexy de 30cm de côté de 5mm d'épaisseur, le piezo scotché, la bande led scotché et deux trous pour passer un fil de fer permettant de l'accrocher aux arbres, grillage...5mm est un minimum celle de 4mm a des impact très marqués et va certainement devoir être changé bientôt)
Le menu sur deux pages :
Mode sélectionné :
Choix du nombre de cible à toucher :
Confirmation du nombre de cible avant de démarrer :
En pleine partie :
Je vous mets ensuite un bref aperçu en vidéo du fonctionnement du boitier maître :
Et un bref aperçu du mode réaction 2J en forêt, les cibles sont placées à 15-20m :
Le code du boîtier maître 1ère partie :
Je ne vous remets de schéma de cablage car dans il est le même que celui du tuto dans les grandes lignes. Donc s'il y a besoin d'aide, lisez bien le code (qui se trouve un peu plus bas) et aller voir leur travail au passage sans quoi ce sujet ne serait pas possible. (ma version est sans fil mais peut également être filaire).
Dans cette version, je vous propose différents modes :
- Réaction 1J : jeu à 1J où il faut éteindre le plus vite possible chaque cible qui s'allume (un temps mort aléatoire entre chaque cible).
- Vitesse 1J : jeu à 1J où il faut éteindre le plus vite possible un nombre de cible défini (pas de temps mort entre chaque cible qui s'enchaîne).
- Réaction 2J : jeu à 2J où il faut être le premier à toucher la cible de sa couleur pour marquer un point.
- Réaction 3J : jeu à 3J où il faut être le premier à toucher la cible de sa couleur pour marquer un point (malheureusement non fonctionnel pour le moment...).
- Réflexe : jeu à 1J où il faut éteindre le plus vite possible les cibles vertes uniquement (sinon -5 mais pour le moment bug sur l'affichage des cibles rouges). Un rebours aléatoire, un affichage aléatoire d'une cible verte ou rouge, +3 pour 1s, +2 pour 2s et +1 pour 3s.
- Test des cibles : Affichage sur l'écran du numéro de la cible touchée
Après cette brève présentation, voici quelques aperçus cliquables (désolé de la qualité des photos prisent avec le téléphone surtout les plus sombres pour montrer ce qui est affiché à l'écran) :
Vue d'ensemble des deux boîtiers (une nouvelle fois un très grand merci à Krispies pour m'avoir fait connaître le water transfer !!! enfin il faut encore que je m'améliore)
Cible très sommaire (un carré de plexy de 30cm de côté de 5mm d'épaisseur, le piezo scotché, la bande led scotché et deux trous pour passer un fil de fer permettant de l'accrocher aux arbres, grillage...5mm est un minimum celle de 4mm a des impact très marqués et va certainement devoir être changé bientôt)
Le menu sur deux pages :
Mode sélectionné :
Choix du nombre de cible à toucher :
Confirmation du nombre de cible avant de démarrer :
En pleine partie :
Je vous mets ensuite un bref aperçu en vidéo du fonctionnement du boitier maître :
Et un bref aperçu du mode réaction 2J en forêt, les cibles sont placées à 15-20m :
Le code du boîtier maître 1ère partie :
- Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <avr/wdt.h>
#include <EEPROM.h>
unsigned char received; // reception RF/PC
unsigned char poubelle; // réception rebond RF/PC
unsigned char counterseconde = 0; // compteur aléatoire de compte à rebours
unsigned char score_vert = 0; // compteur score du joueur vert
unsigned char score_rouge = 0; // compteur score du joueur rouge
unsigned char score_jaune = 0; // compteur score du joueur jaune
unsigned char compteur_menu = 1; // compteur du curseur du menu
unsigned char compteur_page = 1; // compteur des pages du menu
unsigned char nombre_cible_touche = 0; // variable pour le nombre de cible touchées
unsigned char nombre_cible_obj = 0; // variable pour le nombre de cible à toucher
unsigned char nombre_touche_vert = 0;
unsigned char nombre_touche_rouge = 0;
unsigned char nombre_touche_jaune = 0;
unsigned char cible = 0; // variable de la cible à toucher
int interval = 100; // intervalle 1/10e de sec
unsigned char tempo = 0; // compteur d'affichage de la cible à tirer
unsigned char erreurs = 0;
unsigned char cible_manquees = 0;
unsigned char couleur = 0;
unsigned char score = 0;
unsigned char deftempo = 0;
unsigned char cible_verte = 0;
unsigned char cible_rouge = 0;
unsigned char cible_jaune = 0;
unsigned long decisec = 0;
unsigned long seconde = 0;
unsigned long minute = 0;
unsigned long currentMillis;
unsigned long tempsdepart;
unsigned long tempsfinal;
long chronoMillis = 0;
const int buzzer = 2; // buzzer sur pin 2
const int bp_haut = 3; // bp haut sur pin 3
const int bp_bas = 4; // bp bas sur pin 4
const int bp_ok = 5; // bp ok sur pin 5
const int bp_retour = 6; // bp retour sur pin 6
boolean etat_cible = 0; // état d'impact sur la cible
boolean last_etat_cible = 0; // dernier état d'impact sur la cible
boolean etat_bp_haut; // etat de l'appui de bp haut
boolean etat_bp_bas; // etat de l'appui de bp bas
boolean etat_bp_ok; // etat de l'appui de bp ok
boolean etat_bp_retour; // etat de l'appui de bp retour
boolean suivant;
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display
void setup()
{
Serial.begin(9600);
pinMode(bp_ok, INPUT); // définition de bp ok comme entrée
pinMode(bp_bas, INPUT); // définition de bp bas comme entrée
pinMode(bp_haut, INPUT); // définition de bp haut comme entrée
pinMode(bp_retour, INPUT); // définition de bp retour comme entrée
digitalWrite(bp_ok, HIGH); // mise a l'état haut de bp ok
digitalWrite(bp_bas, HIGH); // mise a l'état haut de bp bas
digitalWrite(bp_haut, HIGH); // mise a l'état haut de bp haut
digitalWrite(bp_retour, HIGH); // mise a l'état haut de bp retour
randomSeed(analogRead(0));
lcd.init(); // démaragge de l'écran
lcd.backlight(); // rétroéclairage de l'écran
lcd.setCursor(0,0);
lcd.print("LCD OK!");
delay(1000);
} // fin void setup
void loop()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ciblerie electronik!");
lcd.setCursor(1,1);
lcd.print("Pour la team 1911");
lcd.setCursor(5,2);
lcd.print("Par Pierro");
lcd.setCursor(1,3);
lcd.print("Appuyer pour jouer");
while (1)
{
etat_bp_ok = digitalRead(bp_ok);
etat_bp_bas = digitalRead(bp_bas);
etat_bp_haut = digitalRead(bp_haut);
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_haut == LOW || etat_bp_retour == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
} // fin while
} // fin void loop
void menu_principal() // menu de choix du jeu
{
lcd.clear();
compteur_menu = 1;
compteur_page = 1;
delay(250);
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
etat_bp_bas = digitalRead(bp_bas);
etat_bp_haut = digitalRead(bp_haut);
etat_bp_ok = digitalRead(bp_ok);
if (etat_bp_bas == LOW) // si appui sur bp bas
{
compteur_menu++; // on incrémente le compteur menu
tone(buzzer,500,150);
if (compteur_menu > 3 ) // si conmpteur menu > 3
{
compteur_menu = 1; // alors compteur menu = 1
compteur_page++; // et on incrémente compteur page
if (compteur_page > 2){compteur_page = 1;} // si compteur page > 2 alors = 1
} // fin if compteur menu
delay(100);
lcd.clear();
} // fin if bp bas
if (etat_bp_haut == LOW) // si appui su bp haut
{
compteur_menu--; // on décrémente compteur menu
tone(buzzer,500,150);
if (compteur_menu < 1) // si compteur menu < 1
{
compteur_menu = 3; // alors compteur menu = 3
compteur_page--; // et on décrémente compteur page
if (compteur_page < 1){compteur_page = 2;} // si compteur page < 1 alors = 2
} // fin if compteur menu
delay(100);
lcd.clear();
} // fin if bp haut
if (etat_bp_retour == LOW) // si appui sur bp retour
{
delay(250);
lcd.clear();
tone(buzzer,500,150);
loop(); // retour a void loop
} // fin if bp retour
if (compteur_page == 1) // si compteur page = 1 alors affichage de la page 1
{
lcd.setCursor(0,0);
lcd.print("Choisir mode de jeu:");
lcd.setCursor(0,compteur_menu); // affichage du compteur menu
lcd.print(">");
lcd.setCursor(1,1);
lcd.print("Reaction 1J");
lcd.setCursor(1,2);
lcd.print("Vitesse 1J");
lcd.setCursor(1,3);
lcd.print("Reaction 2J");
if (etat_bp_ok == LOW && compteur_menu == 1){delay(250);tone(buzzer,500,150);reaction_1j();} // si choix reaction 1J
if (etat_bp_ok == LOW && compteur_menu == 2){delay(250);tone(buzzer,500,150);vitesse_1j();} // si choix vitesse 1J
if (etat_bp_ok == LOW && compteur_menu == 3){delay(250);tone(buzzer,500,150);reaction_2j();} // si choiv reaction 2J
} // fin if page 1
if (compteur_page == 2) // si compteur page = 2 alos affichage de la page 2
{
lcd.setCursor(0,0);
lcd.print("Choisir mode de jeu:");
lcd.setCursor(0,compteur_menu); // affichage du compteur menu
lcd.print(">");
lcd.setCursor(1,1);
lcd.print("Reaction 3J");
lcd.setCursor(1,2);
lcd.print("Reflexe");
lcd.setCursor(1,3);
lcd.print("Test des cibles");
if (etat_bp_ok == LOW && compteur_menu == 1){delay(250);tone(buzzer,500,150);reaction_3j();} // si choix vitesse 2J
if (etat_bp_ok == LOW && compteur_menu == 2){delay(250);tone(buzzer,500,150);reflexe();} // si choix reflexe
if (etat_bp_ok == LOW && compteur_menu == 3){delay(250);tone(buzzer,500,150);test_cible();} // si choix test des cibles
} // fin if page 2
} // fin if while
} // fin void menu principal
void reaction_1j() // jeu à 1J où il faut éteindre le plus vite possible chaque cible qui s'allume
{
lcd.clear();
counterseconde = 0;
seconde = 0;
minute = 0;
decisec = 0;
nombre_cible_touche = 0;
nombre_cible_obj = 0;
cible = 0;
lcd.setCursor(2,0);
lcd.print("Mode reaction 1J");
while(1)
{
etat_bp_ok = digitalRead(bp_ok);
etat_bp_bas = digitalRead(bp_bas);
etat_bp_haut = digitalRead(bp_haut);
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
if (etat_bp_haut == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
}
nombre_cible();
Serial.println('S');
counter:
lcd.clear();
if (nombre_cible_touche == nombre_cible_obj){Serial.println('Z');fin_reaction_1j();}
counterseconde = random(2,6);
while (1)
{
lcd.setCursor(1,0);
lcd.print("Prochain tir dans ");
lcd.print(counterseconde);
delay(1000);
counterseconde--;
if (counterseconde > 0){tone(buzzer,300,150);}
if (counterseconde == 0){lcd.clear();tone(buzzer,900,150);goto randomcible;}
}
randomcible:
cible = random(1,7);
Serial.println(cible);
goto jeu;
jeu:
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Tirer sur la cible ");
lcd.print(cible);
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW)
{
delay(250);
lcd.clear();
tone(buzzer,500,150);
Serial.println('Z');
menu_principal();
} // fin if appui sur bp retour
currentMillis = millis();
if (currentMillis - chronoMillis >= interval)
{
chronoMillis = currentMillis;
decisec++;
if (decisec > 9)
{
decisec = 0;
seconde++;
}
if (seconde > 59)
{
seconde = 0;
minute++;
}
} // fin if chrono
lcd.setCursor(0,0);
lcd.print("Temps : ");
if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
lcd.print(":");
if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
lcd.print(":");
lcd.print(decisec);
if (Serial.available() > 0)
{
received = Serial.read();
if (cible == 1)
{
if (received == '1')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto counter;
} // fin if touche sur cible 1
last_etat_cible = etat_cible;
} // fin if touche sur un cible
} // fin if cible 1
if (cible == 2)
{
if (received == '2')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto counter;
} // fin if touche sur cible 2
last_etat_cible = etat_cible;
} // fin if touche sur un cible
} // fin if cible 2
if (cible == 3)
{
if (received == '3')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto counter;
} // fin if touche sur cible 3
last_etat_cible = etat_cible;
} // fin if touche sur un cible
} // fin if cible 3
if (cible == 4)
{
if (received == '4')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto counter;
} // fin if touche sur cible 4
last_etat_cible = etat_cible;
} // fin if touche sur un cible
} // fin if cible 4
if (cible == 5)
{
if (received == '5')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto counter;
} // fin if touche sur cible 5
last_etat_cible = etat_cible;
} // fin if touche sur un cible
} // fin if cible 5
if (cible == 6)
{
if (received == '6')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto counter;
} // fin if touche sur cible 6
last_etat_cible = etat_cible;
} // fin if touche sur un cible
} // fin if cible 6
} // fin boucle de la cible
} // fin boucle jeu
} // fin void reaction 1J
void vitesse_1j() // jeu à 1J où il faut éteindre le plus vite possible un nombre de cible défini
{
lcd.clear();
nombre_cible_obj = 0;
nombre_cible_touche = 0;
decisec = 0;
seconde = 0;
minute = 0;
cible = 0;
erreurs = 0;
cible_manquees = 0;
tempo = 0;
deftempo = 0;
lcd.setCursor(2,0);
lcd.print("Mode vitesse 1J");
while (1)
{
etat_bp_ok = digitalRead(bp_ok);
etat_bp_bas = digitalRead(bp_bas);
etat_bp_haut = digitalRead(bp_haut);
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
if (etat_bp_haut == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
}
nombre_cible();
def_temps_tempo();
startgamecount();
Serial.println('S');
reset10:
if (nombre_cible_touche == nombre_cible_obj)
{
Serial.println('Z');
fin_vitesse_1j();
} // fin if nombre de cible à toucher atteint
tempo = 0;
cible = random(1,7);
Serial.println(cible);
if (cible == 1)
{
reset1:
if (Serial.available() > 0){poubelle = Serial.read();}
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Tirer sur la cible 1");
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW)
{
delay(250);
lcd.clear();
tone(buzzer,500,150);
Serial.println('Z');
menu_principal();
} // fin if appui sur bp retour
currentMillis = millis();
if (currentMillis - chronoMillis >= interval)
{
chronoMillis = currentMillis;
decisec++;
if (decisec > 9)
{
decisec = 0;
seconde++;
tempo++;
if (tempo == deftempo)
{
cible_manquees++;
Serial.println('Y');
goto reset10;
}
}
if (seconde > 59)
{
seconde = 0;
minute++;
}
} // fin if chrono
lcd.setCursor(0,0);
lcd.print("Temps : ");
if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
lcd.print(":");
if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
lcd.print(":");
lcd.print(decisec);
if (Serial.available() > 0)
{
received = Serial.read();
if (received == cible)
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
lcd.setCursor(0,3);
lcd.print("Cible");
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto reset10;
} // fin if touche sur cible 1
last_etat_cible = etat_cible;
}
if (received == '2'||'3'||'4'||'5'||'6') // si ce n'est pas la cible 1 qui est touchée
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
seconde = seconde + 5;
lcd.setCursor(0,3);
lcd.print("POC! mauvaise cible");
erreurs++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,300,150);
delay(250);
goto reset1;
} // fin if touche sur 2 3 4 5 ou 6
last_etat_cible = etat_cible;
}
} // fin if touche sur une cible
} // fin boucle de la cible 1
} // fin if cible 1
if (cible == 2)
{
reset2:
if (Serial.available() > 0){poubelle = Serial.read();}
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Tirer sur la cible 2");
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW)
{
delay(250);
lcd.clear();
tone(buzzer,500,150);
Serial.println('Z');
menu_principal();
}
currentMillis = millis();
if (currentMillis - chronoMillis >= interval)
{
chronoMillis = currentMillis;
decisec++;
if (decisec > 9)
{
decisec = 0;
seconde++;
tempo++;
if (tempo == deftempo)
{
cible_manquees++;
Serial.println('Y');
goto reset10;
}
}
if (seconde > 59)
{
seconde = 0;
minute++;
}
}
lcd.setCursor(0,0);
lcd.print("Temps : ");
if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
lcd.print(":");
if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
lcd.print(":");
lcd.print(decisec);
if (Serial.available() > 0)
{
received = Serial.read();
if (received == '2')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
lcd.setCursor(0,3);
lcd.print("POC! cible 2");
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto reset10;
} // fin if touche sur la cible 2
last_etat_cible = etat_cible;
}
if (received == '1'||'3'||'4'||'5'||'6') // si ce n'est pas la cible 1 qui est touchée
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
seconde = seconde + 5;
lcd.setCursor(0,3);
lcd.print("POC! mauvaise cible");
erreurs++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,300,150);
delay(250);
goto reset2;
} // fin if touche sur la cible 1 3 4 5 ou 6
last_etat_cible = etat_cible;
}
} // fin if touche sur une cible
} // fin boucle de la cible 2
} // fin if cible 2
if (cible == 3)
{
reset3:
if (Serial.available() > 0){poubelle = Serial.read();}
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Tirer sur la cible 3");
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW)
{
delay(250);
lcd.clear();
tone(buzzer,500,150);
Serial.println('Z');
menu_principal();
}
currentMillis = millis();
if (currentMillis - chronoMillis >= interval)
{
chronoMillis = currentMillis;
decisec++;
if (decisec > 9)
{
decisec = 0;
seconde++;
tempo++;
if (tempo == deftempo)
{
cible_manquees++;
Serial.println('Y');
goto reset10;
}
}
if (seconde > 59)
{
seconde = 0;
minute++;
}
}
lcd.setCursor(0,0);
lcd.print("Temps : ");
if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
lcd.print(":");
if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
lcd.print(":");
lcd.print(decisec);
if (Serial.available() > 0)
{
received = Serial.read();
if (received == '3')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
lcd.setCursor(0,3);
lcd.print("POC! cible 3");
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto reset10;
} // fin if touche sur la cible 3
last_etat_cible = etat_cible;
}
if (received == '1'||'2'||'4'||'5'||'6') // si ce n'est pas la cible 1 qui est touchée
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
seconde = seconde + 5;
lcd.setCursor(0,3);
lcd.print("POC! mauvaise cible");
erreurs++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,300,150);
delay(250);
goto reset3;
} // fin if touche sur la cible 1 2 4 5 ou 6
last_etat_cible = etat_cible;
}
} // fin if touche sur une cible
} // fin boucle de la cible 3
} // fin if cible 3
if (cible == 4)
{
reset4:
if (Serial.available() > 0){poubelle = Serial.read();}
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Tirer sur la cible 4");
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW)
{
delay(250);
lcd.clear();
tone(buzzer,500,150);
Serial.println('Z');
menu_principal();
}
currentMillis = millis();
if (currentMillis - chronoMillis >= interval)
{
chronoMillis = currentMillis;
decisec++;
if (decisec > 9)
{
decisec = 0;
seconde++;
tempo++;
if (tempo == deftempo)
{
cible_manquees++;
Serial.println('Y');
goto reset10;
}
}
if (seconde > 59)
{
seconde = 0;
minute++;
}
}
lcd.setCursor(0,0);
lcd.print("Temps : ");
if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
lcd.print(":");
if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
lcd.print(":");
lcd.print(decisec);
if (Serial.available() > 0)
{
received = Serial.read();
if (received == '4')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
lcd.setCursor(0,3);
lcd.print("POC! cible 4");
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto reset10;
} // fin if touche sur la cible 4
last_etat_cible = etat_cible;
}
if (received == '1'||'2'||'3'||'5'||'6') // si ce n'est pas la cible 1 qui est touchée
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
seconde = seconde + 5;
lcd.setCursor(0,3);
lcd.print("POC! mauvaise cible");
erreurs++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,300,150);
delay(250);
goto reset4;
} // fin if touche sur la cible 1 2 3 5 ou 6
last_etat_cible = etat_cible;
}
} // fin if touche sur une cible
} // fin boucle de la cible 4
} // fin if cible 4
if (cible == 5)
{
reset5:
if (Serial.available() > 0){poubelle = Serial.read();}
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Tirer sur la cible 5");
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW)
{
delay(250);
lcd.clear();
tone(buzzer,500,150);
Serial.println('Z');
menu_principal();
}
currentMillis = millis();
if (currentMillis - chronoMillis >= interval)
{
chronoMillis = currentMillis;
decisec++;
if (decisec > 9)
{
decisec = 0;
seconde++;
tempo++;
if (tempo == deftempo)
{
cible_manquees++;
Serial.println('Y');
goto reset10;
}
}
if (seconde > 59)
{
seconde = 0;
minute++;
}
}
lcd.setCursor(0,0);
lcd.print("Temps : ");
if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
lcd.print(":");
if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
lcd.print(":");
lcd.print(decisec);
if (Serial.available() > 0)
{
received = Serial.read();
if (received == '5')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
lcd.setCursor(0,3);
lcd.print("POC! cible 5");
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto reset10;
} // fin if touche sur la cible 5
last_etat_cible = etat_cible;
}
if (received == '1'||'2'||'3'||'4'||'6') // si ce n'est pas la cible 1 qui est touchée
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
seconde = seconde + 5;
lcd.setCursor(0,3);
lcd.print("POC! mauvaise cible");
erreurs++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,300,150);
delay(250);
goto reset5;
} // fin if touche sur la cible 1 2 3 4 ou 6
last_etat_cible = etat_cible;
}
} // fin if touche sur une cible
} // fin boucle de la cible 5
} // fin if cible 5
if (cible == 6)
{
reset6:
if (Serial.available() > 0){poubelle = Serial.read();}
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Tirer sur la cible 6");
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW)
{
delay(250);
lcd.clear();
tone(buzzer,500,150);
Serial.println('Z');
menu_principal();
}
currentMillis = millis();
if (currentMillis - chronoMillis >= interval)
{
chronoMillis = currentMillis;
decisec++;
if (decisec > 9)
{
decisec = 0;
seconde++;
tempo++;
if (tempo == deftempo)
{
cible_manquees++;
Serial.println('Y');
goto reset10;
}
}
if (seconde > 59)
{
seconde = 0;
minute++;
}
}
lcd.setCursor(0,0);
lcd.print("Temps : ");
if (minute >= 10){lcd.setCursor(8,0);lcd.print(minute);}
if (minute < 10){lcd.setCursor(8,0);lcd.print("0");lcd.print(minute);}
lcd.print(":");
if (seconde >= 10){lcd.setCursor(11,0);lcd.print(seconde);}
if (seconde < 10){lcd.setCursor(11,0);lcd.print("0");lcd.print(seconde);}
lcd.print(":");
lcd.print(decisec);
if (Serial.available() > 0)
{
received = Serial.read();
if (received == '6')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_cible_touche ++;
lcd.setCursor(0,3);
lcd.print("POC! cible 6");
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,700,150);
delay(250);
goto reset10;
} // fin if touche sur la cible 6
last_etat_cible = etat_cible;
}
if (received == '1'||'2'||'3'||'4'||'5') // si ce n'est pas la cible 1 qui est touchée
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
seconde = seconde + 5;
lcd.setCursor(0,3);
lcd.print("POC! mauvaise cible");
erreurs++;
if (Serial.available() > 0){poubelle = Serial.read();}
tone(buzzer,300,150);
delay(250);
goto reset6;
} // fin if touche sur la cible 1 2 3 4 ou 5
last_etat_cible = etat_cible;
}
} // fin if touche sur une cible
} // fin boucle de la cible 6
} // fin if cible 6
} // fin void vitesse 1J
void reaction_2j() // jeu à 2J où il faut être le premier à éteindre sa cible pour marquer un point
{
lcd.clear();
score_rouge = 0;
score_vert = 0;
cible_verte = 0;
cible_rouge = 0;
counterseconde = 0;
nombre_touche_vert = 0;
nombre_touche_rouge = 0;
nombre_cible_obj = 0;
lcd.setCursor(2,0);
lcd.print("Mode reaction 2J");
while (1)
{
etat_bp_ok = digitalRead(bp_ok);
etat_bp_bas = digitalRead(bp_bas);
etat_bp_haut = digitalRead(bp_haut);
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW){delay(100);lcd.clear();tone(buzzer,500,150);menu_principal();}
if (etat_bp_haut == LOW || etat_bp_bas == LOW || etat_bp_ok == LOW){delay(100);lcd.clear();tone(buzzer,500,150);break;}
} // fin boucle d'attente d'appui sur un bouton
nombre_cible();
Serial.println('S');
reset10:
lcd.clear();
if (nombre_touche_vert == nombre_cible_obj || nombre_touche_rouge == nombre_cible_obj){Serial.println('Z');fin_reaction_2j();}
cible_verte = random(1,7);
cible_rouge = random(1,7);
if (cible_verte == cible_rouge){goto reset10;}
goto counter;
counter:
counterseconde = random(2,6);
while (1)
{
lcd.setCursor(0,0);
lcd.print("Prochain tir dans ");
lcd.print(counterseconde);
lcd.setCursor(0,1);
lcd.print("Joueur vert = ");
lcd.print(score_vert);
lcd.setCursor(0,2);
lcd.print("Joueur rouge = ");
lcd.print(score_rouge);
delay(1000);
counterseconde--;
if (counterseconde > 0){tone(buzzer,300,150);}
if (counterseconde == 0){lcd.clear();tone(buzzer,900,150);goto jeu;}
}
jeu:
if (cible_rouge == 1){Serial.println('a');}
if (cible_rouge == 2){Serial.println('b');}
if (cible_rouge == 3){Serial.println('c');}
if (cible_rouge == 4){Serial.println('d');}
if (cible_rouge == 5){Serial.println('e');}
if (cible_rouge == 6){Serial.println('f');}
lcd.clear();
lcd.setCursor(6,0);
lcd.print("TIREZ !!");
lcd.setCursor(0,1);
lcd.print("Joueur vert = ");
lcd.print(score_vert);
lcd.setCursor(0,2);
lcd.print("Joueur rouge = ");
lcd.print(score_rouge);
Serial.println(cible_verte);
while (1)
{
etat_bp_retour = digitalRead(bp_retour);
if (etat_bp_retour == LOW)
{
delay(250);
lcd.clear();
menu_principal();
}
if (Serial.available() > 0)
{
received = Serial.read();
if (cible_verte == 1)
{
if (received == '1')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_vert++;
score_vert++;
lcd.setCursor(1,3);
lcd.print("Touche joueur vert");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('m');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('m');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible verte 1
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible verte 1
if (cible_verte == 2)
{
if (received == '2')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_vert++;
score_vert++;
lcd.setCursor(1,3);
lcd.print("Touche joueur vert");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('m');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('m');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible verte 2
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible verte 2
if (cible_verte == 3)
{
if (received == '3')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_vert++;
score_vert++;
lcd.setCursor(1,3);
lcd.print("Touche joueur vert");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('m');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('m');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible verte 3
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible verte 3
if (cible_verte == 4)
{
if (received == '4')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_vert++;
score_vert++;
lcd.setCursor(1,3);
lcd.print("Touche joueur vert");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('m');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('m');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible verte 4
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible verte 4
if (cible_verte == 5)
{
if (received == '5')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_vert++;
score_vert++;
lcd.setCursor(1,3);
lcd.print("Touche joueur vert");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('m');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('m');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible verte 5
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible verte 5
if (cible_verte == 6)
{
if (received == '6')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_vert++;
score_vert++;
lcd.setCursor(1,3);
lcd.print("Touche joueur vert");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('m');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('m');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible verte 6
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible verte 6
if (cible_rouge == 1)
{
if (received == '1')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_rouge++;
score_rouge++;
lcd.setCursor(1,3);
lcd.print("Touche joueur rouge");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('n');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('n');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible rouge 1
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible rouge 1
if (cible_rouge == 2)
{
if (received == '2')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_rouge++;
score_rouge++;
lcd.setCursor(1,3);
lcd.print("Touche joueur rouge");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('n');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('n');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible rouge 2
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible rouge 2
if (cible_rouge == 3)
{
if (received == '3')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_rouge++;
score_rouge++;
lcd.setCursor(1,3);
lcd.print("Touche joueur rouge");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('n');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('n');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible rouge 3
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible rouge 3
if (cible_rouge == 4)
{
if (received == '4')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_rouge++;
score_rouge++;
lcd.setCursor(1,3);
lcd.print("Touche joueur rouge");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('n');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('n');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible rouge 4
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible rouge 4
if (cible_rouge == 5)
{
if (received == '5')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_rouge++;
score_rouge++;
lcd.setCursor(1,3);
lcd.print("Touche joueur rouge");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('n');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('n');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible rouge 5
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible rouge 5
if (cible_rouge == 6)
{
if (received == '6')
{etat_cible = 1;}else{etat_cible = 0;}
if (etat_cible != last_etat_cible)
{
if (etat_cible == 1)
{
nombre_touche_rouge++;
score_rouge++;
lcd.setCursor(1,3);
lcd.print("Touche joueur rouge");
tone(buzzer,700,150);
Serial.println('Y');
Serial.println('n');
delay(250);
Serial.println('Y');
delay(250);
Serial.println('n');
delay(250);
Serial.println('Y');
if (Serial.available() > 0){poubelle = Serial.read();}
delay(250);
goto reset10;
} // fin if touche sur cible rouge 6
last_etat_cible = etat_cible;
} // fin if touche sur une cible
} // fin if cible rouge 6
} // fin if touche sur cible*/
} // fin boucle jeu
} // fin void reaction 2J
Dernière édition par Bidou914 le Lun 27 Juin - 0:16, édité 2 fois