par naedioba Jeu 14 Sep - 14:45
Toutefois, il est plus pratique d'avoir les différentes procédures dans des fichiers différents au cas où on voudrait corriger l'une des procédures séparément.
Ici j'ai mis ca dans 4 fichiers:
mon_jeu (c'est le programme principal)
AffichageZones
ChronoRapide
MenuChrono
Le fichier nommé "mon_jeu" est le programme principal, donc tous les 4 fichiers doivent être dans un même dossier nommé "mon_jeu" (NB: Le dossier porte toujours le nom du programme principal).
Voici les programmes:
pour mon_jeu (programme principal)
- Code:
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h> // librairie pour écran 4fils
LiquidCrystal_I2C lcd(0x38, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#include <avr/wdt.h>
#include <EEPROM.h>
int ButtonHaut=3;
int ButtonBas=4;
int ButtonSelect=2;
int Klaxon = 12;
int DelayBP = 150; //delais anti rebons boutons
int DelayBP2 = 200; //delais anti rebons boutons
int ValMenu = 1;
int received; //reception RF/PC
int Poubelle;
int Nbtires = 0;
int NbtiresReel = 0;
unsigned long Point = 0;
int Cibles1 = 10;
int Cibles2 = 20;
int Cibles3 = 30;
int Cibles4 = 40;
int Cibles5 = 50;
int Cibles6 = 60;
int Zone1 = 0;
int Zone2 = 0;
int Zone3 = 0;
int Zone4 = 0;
int Zone5 = 0;
int Zone6 = 0;
int CibleRandom = 0;
int Counterseconde = 00;
int PreCounterseconde = 0;
unsigned long TempsInit = 0;
unsigned long TempsReel = 0;
unsigned long TempsPenal = 0;
unsigned long TempsSec = 0;
unsigned long TempsMil = 0;
unsigned long TempsMin = 0;
int RegCible = 0;
//void admin();
//void TestCible();
//void PreIPSC();
//void RegPoint();
//void PreRandom();
//void Menu();
//void finCibleChoix();
//void ScrollingArrows ();
void PreSpeed();
void TopDepart();
unsigned long hitfactor = 0;
boolean EtatButtonHaut;
boolean EtatButtonBas;
boolean EtatButtonSelect;
boolean suivant;
unsigned long time_since_last_reset = 0;
int interval1 = 10000;
int interval2 = 20000;
int interval3 = 30000;
int intervalTemps = 0;
int ValMenuChrono = 1;
//int ValMenuCibleChoix = 1;
//int PenaliteCibleChoix;
//unsigned long PointPenaliteCibleChoix = 0;
unsigned long Score = 0;
//int CibleChoix;
void setup() {
Cibles1 = EEPROM.read(1);
Cibles2 = EEPROM.read(2);
Cibles3 = EEPROM.read(3);
Cibles4 = EEPROM.read(4);
Cibles5 = EEPROM.read(5);
Cibles6 = EEPROM.read(6);
//PenaliteCibleChoix = EEPROM.read(7);
pinMode(ButtonSelect, INPUT_PULLUP);
Serial.begin(9600);
Serial.println('F');
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" CIBLES ");
delay(1000);
lcd.setCursor(0, 1);
lcd.print(" INTERACTIVES ");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Merci Naudnaud ");
delay(1000);
lcd.setCursor(0, 1);
lcd.print(" Merci Krispies");
delay(2000);
tone(12, 500, 100);
delay(100);
tone(12, 550, 100);
delay(100);
tone(12, 600, 100);
delay(100);
tone(12, 650, 100);
delay(100);
tone(12, 700, 100);
delay(100);
tone(12, 750, 100);
delay(100);
lcd.clear();
} // fin setup
//*********************************************
void loop() {
MenuChrono();
} // fon loop
//*********************************************
void TopDepart() {
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Depart dans:");
lcd.setCursor(9,1);
lcd.print("sec");
randomSeed( millis() );
PreCounterseconde = random(2, 8);
while(1) {
if (PreCounterseconde >= 10 ) {
lcd.setCursor(6,1);
lcd.print(PreCounterseconde, DEC); }
if (PreCounterseconde < 10 ) {
lcd.setCursor(6,1);
lcd.print("0");
lcd.setCursor(7,1);
lcd.print(PreCounterseconde, DEC); }
delay(1000);
PreCounterseconde--;
if (PreCounterseconde == 0)
{Serial.println('S');
ChronoRapide (); }
}
}
********************************************************************
pour AffichageZones
- Code:
void AffichageZones (){
lcd.clear();
lcd.setCursor(1,0);
lcd.print("C1:");
lcd.setCursor(4,0);
lcd.print(Zone1);
lcd.setCursor(1,1);
lcd.print("C2:");
lcd.setCursor(4,1);
lcd.print(Zone2);
lcd.setCursor(9,0);
lcd.print("C3:");
lcd.setCursor(12,0);
lcd.print(Zone3);
lcd.setCursor(9,1);
lcd.print("C4:");
lcd.setCursor(12,1);
lcd.print(Zone4);
//------------- ATTENTE APPUI BOUTON ---------------
do {
suivant = false;
EtatButtonSelect = digitalRead(ButtonSelect);
EtatButtonHaut = digitalRead(ButtonHaut);
EtatButtonBas = digitalRead(ButtonBas);
if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
{delay(250);tone(12,500,150);suivant = true;}
}
while (suivant != true);
//----------------------------
lcd.clear();
lcd.setCursor(5,0);
lcd.print("C5:");
lcd.setCursor(8,0);
lcd.print(Zone5);
lcd.setCursor(5,1);
lcd.print("C6:");
lcd.setCursor(8,1);
lcd.print(Zone6);
}
********************************************************************
pour ChronoRapide
- Code:
void ChronoRapide () {
time_since_last_reset = millis();
while((millis()- time_since_last_reset) < intervalTemps){ // tant que la duree du jeu est inferieure a la duree choisie
ChronoRapideGame();
}
MenuChrono(); // Retour au Menu
}
//-----------------------------------------------------
void ChronoRapideGame() {
// Affichage sur LCD
lcd.clear();
tone(12, 1000, 500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Points:");
lcd.setCursor(9,0);
lcd.print(Point);
lcd.setCursor(0,1);
lcd.print("OK pour Arreter");
TempsInit = (millis()); // initialisation compteur temps
while(1) {
hitfactor = 0;
if (digitalRead(ButtonSelect) == HIGH) // Appui sur bouton Haut pour forcer l'arret de la partie en cours
{(millis()- time_since_last_reset) >= intervalTemps; // si la duree du jeu atteint la duree choisie
Serial.println('Z'); // on envoie le signal 'F' au boitier principal
finChronoRapideGame(); }
if (Serial.available()>0) {
received = Serial.read();
// Enregistrement des points selon la cible touchee
//Cibles 1
if(received == 'A')
{Point = (Point + Cibles1);
tone(12, 1000, 500);
NbtiresReel++;
Zone1++;
lcd.setCursor(9,0);
lcd.print(Point); }
//Cible 2
if(received == 'B')
{Point = (Point + Cibles2);
tone(12, 1000, 500);
NbtiresReel++;
Zone2++;
lcd.setCursor(9,0);
lcd.print(Point); }
//Cible 3
if(received == 'C')
{Point = (Point + Cibles3);
tone(12, 1000, 500);
NbtiresReel++;
Zone3++;
lcd.setCursor(9,0);
lcd.print(Point); }
//Cible 4
if(received == 'D')
{Point = (Point + Cibles4);
tone(12, 1000, 500);
NbtiresReel++;
Zone4++;
lcd.setCursor(9,0);
lcd.print(Point); }
//Cible 5
if(received == 'E')
{Point = (Point + Cibles5);
tone(12, 1000, 500);
NbtiresReel++;
Zone5++;
lcd.setCursor(9,0);
lcd.print(Point); }
//Cible 6
if(received == 'F')
{Point = (Point + Cibles6);
tone(12, 1000, 500);
NbtiresReel++;
Zone6++;
lcd.setCursor(9,0);
lcd.print(Point); }
}
if ((millis()- time_since_last_reset) >= intervalTemps)
{ Serial.println('Z');
finChronoRapideGame(); }
}
}
//--------------------------------------------------------------------
void finChronoRapideGame() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin de la partie");
tone(12, 100, 1000);
delay(1000);
tone(12, 1000, 1000);
delay(1000);
tone(12, 5000, 1000);
hitfactor = (Point*1000)/intervalTemps;
while (1) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin de la partie");
lcd.setCursor(8,1);
lcd.print("points");
lcd.setCursor(2, 1);
lcd.print(Point);
========================================================
do {
suivant = false;
EtatButtonSelect = digitalRead(ButtonSelect);
EtatButtonHaut = digitalRead(ButtonHaut);
EtatButtonBas = digitalRead(ButtonBas);
if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
{delay(250);tone(12,500,150);suivant = true;}
}
while (suivant != true);
========================================================
lcd.clear(); // Naedioba: affichage facteur de tir
lcd.setCursor(0,0);
lcd.print("Facteur de tir");
lcd.setCursor(0, 1);
lcd.print(hitfactor);
========================================================
do {
suivant = false;
EtatButtonSelect = digitalRead(ButtonSelect);
EtatButtonHaut = digitalRead(ButtonHaut);
EtatButtonBas = digitalRead(ButtonBas);
if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
{delay(250);tone(12,500,150);suivant = true;}
}
while (suivant != true);
AffichageZones (); // affichage des differentes cibles touchees
do {
suivant = false;
EtatButtonSelect = digitalRead(ButtonSelect);
EtatButtonHaut = digitalRead(ButtonHaut);
EtatButtonBas = digitalRead(ButtonBas);
if (EtatButtonSelect == HIGH || EtatButtonHaut == HIGH ||EtatButtonBas == HIGH)
{delay(250);tone(12,500,150);suivant = true;}
}
while (suivant != true);
========================================================
// Remise a zero
NbtiresReel = 0;
intervalTemps = 0;
time_since_last_reset = 0;
TempsInit = 0;
TempsPenal = 0;
TempsReel = 0;
TempsMin = 0;
TempsSec = 0;
TempsMil = 0;
hitfactor = 0;
Point = 0;
Zone1 = 0;
Zone2 = 0;
Zone3 = 0;
Zone4 = 0;
Zone5 = 0;
Zone6 = 0;
MenuChrono(); // Retour au Menu Principal
}
}
********************************************************************
pour MenuChrono
- Code:
void MenuChrono() {
intervalTemps = 0; // initialisation de intervalTemps
while(1) {
//if(digitalRead(ButtonHaut) == HIGH && digitalRead(ButtonBas) == HIGH) //Appui sur boutons Haut et Bas pour forcer l'arret
// {tone(12, 800, 50);
// MenuChrono();} // Retour au Menu Principal
if(digitalRead(ButtonHaut) == HIGH)
{tone(12, 800, 50);
ValMenuChrono++;}
if(digitalRead(ButtonBas) == HIGH)
{tone(12, 800, 50);
ValMenuChrono--;}
if(ValMenuChrono >=4)
{ValMenuChrono = 1;}
if(ValMenuChrono <=0)
{ValMenuChrono = 3;}
switch (ValMenuChrono) {
case 1: // cas 1
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-CHRONO RAPIDE-");
lcd.setCursor(0,1);
lcd.print(" A: 10 secondes ");
if(digitalRead(ButtonSelect) == HIGH)
{tone(12, 800, 50);
delay(50);
intervalTemps = interval1; // interval1 = 10sec
TopDepart();
}
delay(DelayBP2);
break;
case 2: // cas 2
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-CHRONO RAPIDE-");
lcd.setCursor(0,1);
lcd.print(" B: 20 secondes ");
if(digitalRead(ButtonSelect) == HIGH)
{tone(12, 800, 50);
intervalTemps = interval2; // interval2 = 20sec
TopDepart();
}
delay(DelayBP);
break;
case 3: // cas 3
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-CHRONO RAPIDE-");
lcd.setCursor(0,1);
lcd.print(" C: 30 secondes ");
if(digitalRead(ButtonSelect) == HIGH)
{tone(12, 800, 50);
intervalTemps = interval3; // interval2 = 30sec
TopDepart();
}
delay(DelayBP);
break;
} // fin Switch
} // fin while
} // fin MenuChrono
********************************************************************
Amuse-toi bien !