Bombe Airsoft Mode domination *

Description :

Deux chronos reliés à deux interrupteurs. Déclenchement du chrono via l’interrupteur, ce qui met le second chrono en pause et qui permet de pouvoir en réappuyant sur l’autre inter de reprendre le chrono la ou il en était tout en mettant l’autre chrono en pause a son tour. Le chrono qui arrive au temps imparti déclenche une sirène de fin de partie.  

 

 

    Prérequis :

Matériel :

  • 1 x Carte Arduino Uno
  • 2 x Boutons
  • 1 x Led
  • 1 x LCD 20×4
  • 1 x Module I2C
  • 1 x Module 1 Relais 5V
  • 1 x Buzzer
  • 1 x Clavier numérique 4×4
  • 1 x Module Capteur d’Inclinaison Mercure
  • Fils de connexion
  • 1 x Breadboard

Version IDE :

Bibliothèque :

  • Keypad.h
  • LiquidCrystal_I2C.h

 

 

Vidéo de démonstration :

 

Schéma de câblage :

 

Code :

//Gestion des entrées//////////////////
const int btrouge = A3;    //Broche du bouton rouge
const int btvert = A2;     //Broche du bouton vert
const int cptmercure = A1; //Broche capteur mercure
///////////////////////////////////////

//Gestion des sorties//////////////////
const int bipper = 12;     //Broche du bipper
const int ledrouge = 11;   //Broche Led rouge
const int relayalarme = 10;//Broche Relay alarme
///////////////////////////////////////

//Gestion Keypad///////////////////////
#include <Keypad.h>
const int ROW_NUM = 4; //four rows
const int COLUMN_NUM = 4; //four columns
char keys[ROW_NUM][COLUMN_NUM] = {
  {'1','2','3', 'H'},
  {'4','5','6', 'B'},
  {'7','8','9', 'G'},
  {'*','0','#', 'D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
///////////////////////////////////////

//Gestion LCD /////////////////////////
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display
byte tiretdroite[8] = {B00001,B00001,B00001,B00001,B00001,B00001,B00001,B00001};
byte tiretgauche[8] = {B10000,B10000,B10000,B10000,B10000,B10000,B10000,B10000};
byte barrepleinechargement[8] = {B11111,B00000,B11111,B11111,B11111,B11111,B00000,B11111};
byte barrevidechargement[8] = {B11111,B00000,B00000,B00000,B00000,B00000,B00000,B11111};
byte fleche[] = {B00000,B00100,B00010,B11111,B00010,B00100,B00000,B00000};
///////////////////////////////////////

//Variables programmes ////////////////

//Variable gestion entrées
boolean EtatboutonVert;
boolean EtatboutonRouge;
boolean EtatcptMercure;

//
int NavModejeu = 1;  //Navigation mode jeu
int Nbmodejeu = 3;   //Nombre de jeux programmer
int Modedejeu = 0;   //Stock le N° du jeu selectionner
int Animation[4] = {4,0,14,0};
unsigned long TimerBip[4] = {0, 0, 0, 0};

//Variable gestion du clavier
char key;

//Variable gestion du temps
unsigned long currentTime;

//Variable Bt reset
unsigned long Timereset = 0;
int ImpulsBtReset = 0; //Stock le nombre impulsion sur bouton reset   

//Variable Mode Domination
int NavModeDomination = 0;  //Navigation dans mode Domination
int TpsjeuDomination[7] = {0, 0, 0, 0, 0, 0, 0}; //Stock la valeur des temps(H,H,M,M,S,S,M)
boolean Actifcptmouv = 0;
int GestionTemps[6] = {0, 0, 0, 0, 0, 0};
unsigned long Timersecpartie = 0;
boolean Btactif[2] = {0, 0};
//
unsigned long Tpsscrutation;
unsigned long Clignotementsaisie;
///////////////////////////////////////

void setup(){
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.createChar(2, tiretdroite);
  lcd.createChar(3, tiretgauche);
  lcd.createChar(4, barrepleinechargement);
  lcd.createChar(5, barrevidechargement);
  lcd.createChar(6, fleche);
  
  pinMode(btrouge,INPUT_PULLUP);
  pinMode(btvert,INPUT_PULLUP);
  pinMode(cptmercure,INPUT);
  pinMode(bipper,OUTPUT);
  pinMode(ledrouge,OUTPUT);
  pinMode(relayalarme,OUTPUT);
  intro(); 
  chargement();
  lcd.clear();

}
  
void loop(){
  currentTime = millis();
  int TpsScrutation = currentTime - Tpsscrutation;
  Serial.print("Tps scrutation ");
  Serial.print(TpsScrutation);
  Serial.println(" ms");
  Tpsscrutation =  millis();
  key = "99";
  key = keypad.getKey();
  btreset(); 
  if(Modedejeu == 0){
    selectmodejeu();  
  }
  else if(Modedejeu == 1){
    Domination();
  }
  else{
    Modedejeu = 0;
    NavModejeu = 1;
  }
}

void selectmodejeu(){
//SELECTION DU MODE DE JEU ////////////
  if (key == 'B' && Modedejeu == 0){
    if(NavModejeu == Nbmodejeu){
      NavModejeu = 1;
    }
    else{
      NavModejeu++;   
    }    
  }
  else if (key == 'H' && Modedejeu == 0){
    if(NavModejeu == 1){
      NavModejeu = Nbmodejeu;
    }
    else{
      NavModejeu--;   
    }
  }
  else if (key == '#' && Modedejeu == 0){
    Modedejeu = NavModejeu;
    NavModejeu = 0;
    key == ' ';  
  }
  
  switch (NavModejeu) {
    case 0:
      break;
    case 1:
      lcd.setCursor(0, 0);
      lcd.print("SELECTION DU JEUX : ");
      lcd.setCursor(2, 1);
      lcd.print("Domination ");
      lcd.setCursor(2, 2);
      lcd.print("--------");
      lcd.setCursor(2, 3);
      lcd.print("--------");
      lcd.setCursor(0, 1);
      lcd.write(byte(6));
      lcd.setCursor(0, 2);
      lcd.print(" ");
      lcd.setCursor(0, 3);
      lcd.print(" ");
      break;
    case 2:
      lcd.setCursor(0, 1);
      lcd.print(" ");
      lcd.setCursor(0, 2);
      lcd.write(byte(6));
      lcd.setCursor(0, 3);
      lcd.print(" ");
      break;
    case 3:
      lcd.setCursor(0, 1);
      lcd.print(" ");
      lcd.setCursor(0, 2);
      lcd.print(" ");
      lcd.setCursor(0, 3);
      lcd.write(byte(6));
      break;
    default:
      break;
  }
///////////////////////////////////////
}

int saisieclavier(int Saisie){
//GESTION SAISIE CLAVIER //////////////
  if (key == '1'){
    Saisie = 1;      
  }
  else if(key == '2'){
    Saisie = 2;      
  } 
  else if(key == '3'){
    Saisie = 3;      
  } 
  else if(key == '4'){
    Saisie = 4;      
  } 
  else if(key == '5'){
    Saisie = 5;      
  } 
  else if(key == '6'){
    Saisie = 6;      
  } 
  else if(key == '7'){
    Saisie = 7;      
  } 
  else if(key == '8'){
    Saisie = 8;      
  } 
  else if(key == '9'){
    Saisie = 9;      
  } 
  else if(key == '0'){
    Saisie = 0;      
  } 
  return(Saisie);   
///////////////////////////////////////
}

int flechehaut(){
//GESTION BOUTON FLECHE HAUT ///////
  int Saisie = 0;
  if (key == 'H'){
    Saisie = 1;      
  }
  else{
    Saisie = 0;   
  }
  return Saisie;  
///////////////////////////////////////    
}

int flechebas(){
//GESTION BOUTON FLECHE BAS ///////
  int Saisie = 0;
  if (key == 'B'){
    Saisie = -1;      
  }
  else{
    Saisie = 0;   
  }
  return Saisie;  
///////////////////////////////////////    
}

int btgauche(){
//GESTION BOUTON FLECHE GAUCHE ///////
  int Saisie = 0;
  if (key == 'G'){
    Saisie = -1;      
  }
  else{
    Saisie = 0;   
  }
  return Saisie;  
///////////////////////////////////////    
}

int btdroite(){
//GESTION BOUTON FLECHE DROITE ///////
  int Saisie = 0;
  if (key == 'D'){
    Saisie = 1;      
  }
  else{
    Saisie = 0;   
  }
  return Saisie;  
///////////////////////////////////////    
}

int btvalider(){
//GESTION BOUTON VALIDER /////////////
  int Saisie = 0;
  if (key == '#'){
    Saisie = 1;      
  }
  else{
    Saisie = 0;   
  }
  return Saisie;  
///////////////////////////////////////    
}

void btreset(){
//GESTION BOUTON RESET ////////////////
  if (key == '*' && Timereset == 0){   
    Timereset = millis();
    ImpulsBtReset++;
  }
  else if (key == '*' && ImpulsBtReset == 3 ){
    reset();  
  }
  else if (key == '*' && Timereset > 0 && currentTime < (Timereset+2000)){
    ImpulsBtReset++;
  }
  else if (Timereset > 0 && currentTime > (Timereset+2000)){
    ImpulsBtReset = 0;
    Timereset = 0;
  } 
///////////////////////////////////////    
}

void reset(){
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("  - Bombe Reset. -   ");
  delay(2000);
  digitalWrite(ledrouge , LOW);
  digitalWrite(bipper  , LOW);
  digitalWrite(relayalarme  , LOW);
  ImpulsBtReset = 0;
  Timereset = 0;
  Timersecpartie = 0;
  //Variables à remettre à 0 pour le reset
  NavModejeu = 1;
  Modedejeu = 0;
  //Variable Mode Domination à remettre à 0 pour le reset
  NavModeDomination = 0;
  for (int i = 0; i <= 5; i++) {
    GestionTemps[i] = 0;
  }
  for (int i = 0; i <= 3; i++) {
    TimerBip[i] = 0;
  }
  Animation[0] = 4;
  Animation[1] = 0;
  Animation[2] = 14;
  Animation[3] = 0;
  Btactif[0] = 0;
  Btactif[1] = 0;  
  Clignotementsaisie = 0;
}

void intro(){
//INTRO BOMB SIMULATOR ////////////////
  lcd.setCursor(0, 0);
  lcd.print("-- Bomb simulator --");
  lcd.setCursor(0, 3);
  lcd.print("     -- V1.1 --     ");
  delay(500);   
///////////////////////////////////////
}

void chargement(){
//BARRE CHARGEMENT ////////////////////
  lcd.setCursor(1, 1);
  lcd.write(byte(2));
  for (int i = 2; i <= 17; i++) {
      lcd.setCursor(i, 1);
      lcd.write(byte(5));
  }
  lcd.setCursor(18, 1);
  lcd.write(byte(3));
  for (int i = 2; i <= 17; i++) {
      lcd.setCursor(i, 1);
      lcd.write(byte(4));
      delay(100);
  } 
/////////////////////////////////////// 
}

void Domination(){
//GESTION JEU DOMINATION //////////////
  switch (NavModeDomination) {
    case 0:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("  -- DOMINATION --  ");
      NavModeDomination++;
      break;
    case 1:
      chargement();
      NavModeDomination++;
      break;
    case 2:
      lcd.setCursor(0, 1);
      lcd.print("   Temps de jeu :   ");
      lcd.setCursor(6, 2);
      lcd.print(TpsjeuDomination[0]);
      lcd.setCursor(7, 2);
      lcd.print(TpsjeuDomination[1]);
      lcd.setCursor(8, 2);
      lcd.print(":");
      lcd.setCursor(9, 2);
      lcd.print(TpsjeuDomination[2]);
      lcd.setCursor(10, 2);
      lcd.print(TpsjeuDomination[3]);
      lcd.setCursor(11, 2);
      lcd.print(":");
      lcd.setCursor(12, 2);
      lcd.print(TpsjeuDomination[4]);
      lcd.setCursor(13, 2);
      lcd.print(TpsjeuDomination[5]);
      NavModeDomination++;
      break;
    case 3:
      //Saisie H 
      if ((currentTime < (Clignotementsaisie+500)) && btdroite() == 0 && btvalider() == 0){
        lcd.setCursor(6, 2);
        lcd.print(" "); 
      }
      else if ((currentTime >= (Clignotementsaisie+500) && currentTime < (Clignotementsaisie+1600)) || btdroite() == 1 || btvalider() == 1){
        lcd.setCursor(6, 2);
        lcd.print(TpsjeuDomination[0]);
      }
      else if (currentTime >= (Clignotementsaisie+1600)){
        Clignotementsaisie = currentTime;      
      } 
      Serial.println(key);
      if(TpsjeuDomination[1] <= 3 && (key == '0' || key == '1' || key == '2')){
        TpsjeuDomination[0] = saisieclavier(TpsjeuDomination[0]);
        lcd.setCursor(6, 2);
        lcd.print(TpsjeuDomination[0]);
        NavModeDomination++;    
      }
      else if(TpsjeuDomination[1] > 3 && (key == '0' || key == '1')){
        TpsjeuDomination[0] = saisieclavier(TpsjeuDomination[0]);
        lcd.setCursor(6, 2);
        lcd.print(TpsjeuDomination[0]);
        NavModeDomination++;   
      }
      NavModeDomination = NavModeDomination + btdroite() + btvalider();
      break;
    case 4:
      //Saisie HH
      if ((currentTime < (Clignotementsaisie+500)) && btdroite() == 0 && btgauche() == 0 && btvalider() == 0){
        lcd.setCursor(7, 2);
        lcd.print(" "); 
      }
      else if ((currentTime >= (Clignotementsaisie+500) && currentTime < (Clignotementsaisie+1600)) || btdroite() == 1 || btgauche() == -1 || btvalider() == 1){
        lcd.setCursor(7, 2);
        lcd.print(TpsjeuDomination[1]);
      }
      else if (currentTime >= (Clignotementsaisie+1600)){
        Clignotementsaisie = currentTime;      
      }
      if(TpsjeuDomination[0] < 2 && (key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key == '7' || key == '8' || key == '9')){
        TpsjeuDomination[1] = saisieclavier(TpsjeuDomination[1]);
        lcd.setCursor(7, 2);
        lcd.print(TpsjeuDomination[1]);
        NavModeDomination++;    
      }
      else if(TpsjeuDomination[0] >= 2 && (key == '0' || key == '1' || key == '2' || key == '3')){
        TpsjeuDomination[1] = saisieclavier(TpsjeuDomination[1]);
        lcd.setCursor(7, 2);
        lcd.print(TpsjeuDomination[1]);
        NavModeDomination++;    
      }
      NavModeDomination = NavModeDomination + btgauche() + btdroite() + btvalider();
      break;
    case 5:
      //Saisie M
      if ((currentTime < (Clignotementsaisie+500)) && btdroite() == 0 && btgauche() == 0 && btvalider() == 0){
        lcd.setCursor(9, 2);
        lcd.print(" "); 
      }
      else if ((currentTime >= (Clignotementsaisie+500) && currentTime < (Clignotementsaisie+1600)) || btdroite() == 1 || btgauche() == -1 || btvalider() == 1){
        lcd.setCursor(9, 2);
        lcd.print(TpsjeuDomination[2]);
      }
      else if (currentTime >= (Clignotementsaisie+1600)){
        Clignotementsaisie = currentTime;      
      } 
      if(key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5'){
        TpsjeuDomination[2] = saisieclavier(TpsjeuDomination[2]);
        lcd.setCursor(9, 2);
        lcd.print(TpsjeuDomination[2]);
        NavModeDomination++;    
      }
      NavModeDomination = NavModeDomination + btgauche() + btdroite() + btvalider();
      break;
    case 6:
      //Saisie MM
      if ((currentTime < (Clignotementsaisie+500)) && btdroite() == 0 && btgauche() == 0 && btvalider() == 0){
        lcd.setCursor(10, 2);
        lcd.print(" "); 
      }
      else if ((currentTime >= (Clignotementsaisie+500) && currentTime < (Clignotementsaisie+1600)) || btdroite() == 1  || btgauche() == -1 || btvalider() == 1){
        lcd.setCursor(10, 2);
        lcd.print(TpsjeuDomination[3]);
      }
      else if (currentTime >= (Clignotementsaisie+1600)){
        Clignotementsaisie = currentTime;      
      } 
      if(key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key == '7' || key == '8' || key == '9'){
        TpsjeuDomination[3] = saisieclavier(TpsjeuDomination[3]);
        lcd.setCursor(10, 2);
        lcd.print(TpsjeuDomination[3]);
        NavModeDomination++;    
      }
      NavModeDomination = NavModeDomination + btgauche() + btdroite() + btvalider();
      break;
    case 7:
      //Saisie S
      if ((currentTime < (Clignotementsaisie+500)) && btdroite() == 0 && btgauche() == 0 && btvalider() == 0){
        lcd.setCursor(12, 2);
        lcd.print(" "); 
      }
      else if ((currentTime >= (Clignotementsaisie+500) && currentTime < (Clignotementsaisie+1600)) || btdroite() == 1 || btgauche() == -1 || btvalider() == 1){
        lcd.setCursor(12, 2);
        lcd.print(TpsjeuDomination[4]);
      }
      else if (currentTime >= (Clignotementsaisie+1600)){
        Clignotementsaisie = currentTime;      
      } 
      if(key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5'){
        TpsjeuDomination[4] = saisieclavier(TpsjeuDomination[4]);
        lcd.setCursor(12, 2);
        lcd.print(TpsjeuDomination[4]);
        NavModeDomination++;    
      }
      NavModeDomination = NavModeDomination + btgauche() + btdroite() + btvalider();
      break;
    case 8:
      //Saisie SS
      if ((currentTime < (Clignotementsaisie+500)) && btdroite() == 0 && btgauche() == 0 && btvalider() == 0){
        lcd.setCursor(13, 2);
        lcd.print(" "); 
      }
      else if ((currentTime >= (Clignotementsaisie+500) && currentTime < (Clignotementsaisie+1600)) || btdroite() == 1  || btgauche() == -1 || btvalider() == 1){
        lcd.setCursor(13, 2);
        lcd.print(TpsjeuDomination[5]);
      }
      else if (currentTime >= (Clignotementsaisie+1600)){
        Clignotementsaisie = currentTime;      
      } 
      if(key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key == '7' || key == '8' || key == '9'){
        TpsjeuDomination[5] = saisieclavier(TpsjeuDomination[5]);
        lcd.setCursor(13, 2);
        lcd.print(TpsjeuDomination[5]);
        NavModeDomination++;    
      }
      NavModeDomination = NavModeDomination + btgauche() + btdroite() + btvalider();
      break;
    case 9:
      lcd.setCursor(0, 3);
      lcd.print("Press # pour valider");
      if(btgauche() == -1){
        lcd.setCursor(0, 3);
        lcd.print("                    ");  
      }
      NavModeDomination = NavModeDomination + btgauche() + btvalider();
      break;
    case 10:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("  -- DOMINATION --  ");
      lcd.setCursor(0, 1);
      lcd.print("   Debut du jeu :   ");
      NavModeDomination++;
      break;
    case 11:
    //Saisie M
      if ((currentTime < (Clignotementsaisie+500)) && btdroite() == 0 && btgauche() == 0 && btvalider() == 0){
        lcd.setCursor(5, 2);
        lcd.print(" "); 
      }
      else if ((currentTime >= (Clignotementsaisie+500) && currentTime < (Clignotementsaisie+1600)) || btdroite() == 1 || btgauche() == -1 || btvalider() == 1){
        lcd.setCursor(5, 2);
        lcd.print(TpsjeuDomination[6]);
      }
      else if (currentTime >= (Clignotementsaisie+1600)){
        Clignotementsaisie = currentTime;      
      }
      if(key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5'){
        TpsjeuDomination[6] = saisieclavier(TpsjeuDomination[6]);
        lcd.setCursor(5, 2);
        lcd.print(TpsjeuDomination[6]);
        NavModeDomination++;    
      }
      if(TpsjeuDomination[6] <=1){
        lcd.setCursor(6, 2);
        lcd.print(" minute ");
      }
      else{
        lcd.setCursor(6, 2);
        lcd.print(" minutes");
      }
      NavModeDomination = NavModeDomination + btdroite() + btvalider();
      break;
    case 12:
      lcd.setCursor(0, 3);
      lcd.print("Press # pour valider");
      if(btgauche() == -1){
        lcd.setCursor(0, 3);
        lcd.print("                    ");  
      }
      NavModeDomination = NavModeDomination + btgauche() + btvalider();
      break;
    case 13:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("  -- DOMINATION --  ");
      lcd.setCursor(1, 1);
      lcd.print("Capteur mouvement  ");
      lcd.setCursor(0, 3);
      lcd.print("Press # pour valider");
      NavModeDomination++;
      break;
    case 14:
      if ((currentTime < (Clignotementsaisie+500)) && btdroite() == 0 && btgauche() == 0){
        lcd.setCursor(4, 2);
        lcd.print("-         -"); 
      }
      else if ((currentTime >= (Clignotementsaisie+500) && currentTime < (Clignotementsaisie+1600)) || btdroite() == 1 || btgauche() == -1){
        if(Actifcptmouv == 0){
          lcd.setCursor(4, 2);
          lcd.print("-  Actif  -");  
        }
        else{
          lcd.setCursor(4, 2);
          lcd.print("- Inactif -");  
        }
      }
      else if (currentTime >= (Clignotementsaisie+1600)){
        Clignotementsaisie = currentTime;      
      }
      if (flechehaut() == 1 || flechebas() == -1){
        Actifcptmouv = !Actifcptmouv;  
      }
      NavModeDomination = NavModeDomination + btvalider();
      break;
    case 15:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("  -- DOMINATION --  ");
      NavModeDomination++;
      break;
    case 16:
      lcd.setCursor(0, 1);
      lcd.print("Tps jeu : ");
      lcd.setCursor(12, 1);
      lcd.print(TpsjeuDomination[0]);
      lcd.setCursor(13, 1);
      lcd.print(TpsjeuDomination[1]);
      lcd.setCursor(14, 1);
      lcd.print(":");
      lcd.setCursor(15, 1);
      lcd.print(TpsjeuDomination[2]);
      lcd.setCursor(16, 1);
      lcd.print(TpsjeuDomination[3]);
      lcd.setCursor(17, 1);
      lcd.print(":");
      lcd.setCursor(18, 1);
      lcd.print(TpsjeuDomination[4]);
      lcd.setCursor(19, 1);
      lcd.print(TpsjeuDomination[5]);
      lcd.setCursor(0, 2);
      lcd.print("Debut jeu : ");
      lcd.setCursor(14, 2);
      lcd.print(TpsjeuDomination[6]);
      lcd.setCursor(15, 2);
      lcd.print(" min");
      lcd.setCursor(0, 3);
      lcd.print("Press # pour lancer");
      NavModeDomination = NavModeDomination + btvalider();
      break;
    case 17:
      lcd.clear();
      GestionTemps[0] = TpsjeuDomination[6];
      lcd.setCursor(0, 0);
      lcd.print("  -- DOMINATION --  ");
      lcd.setCursor(0, 1);
      lcd.print("   Debut du jeu :   ");
      lcd.setCursor(6, 2);
      lcd.print("00");  
      lcd.setCursor(8, 2);
      lcd.print(":0");
      lcd.setCursor(10, 2);
      lcd.print(GestionTemps[0]);
      lcd.setCursor(11, 2);
      lcd.print(":");
      lcd.setCursor(12, 2);
      lcd.print("00");
      NavModeDomination++;
      break;
    case 18:
      if(Timersecpartie == 0){
        Timersecpartie = currentTime; 
      }
      else if (currentTime > (Timersecpartie + 1000)){
        if(GestionTemps[1] > 0){
          GestionTemps[1]--;
          if(GestionTemps[1] >= 10){
            lcd.setCursor(12, 2);
            lcd.print(GestionTemps[1]);  
          }
          else{
            lcd.setCursor(12, 2);
            lcd.print("0");
            lcd.setCursor(13, 2);
            lcd.print(GestionTemps[1]);
          }
        }
      else if(GestionTemps[1] == 0 && GestionTemps[0] > 0){
        GestionTemps[1] = 59;
        GestionTemps[0]--;
          lcd.setCursor(10, 2);
          lcd.print(GestionTemps[0]);
          lcd.setCursor(12, 2);
          lcd.print(GestionTemps[1]);
      }
      else{
        NavModeDomination++;  
      }
        Timersecpartie = currentTime;     
      } 
      bipper1();
      break; 
    case 19:
      for (int i = 0; i <= 5; i++) {
        GestionTemps[i] = 0;
      }
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("  -- DOMINATION --  ");
      lcd.setCursor(0, 1);
      lcd.print("Equipe R    Equipe V");
      lcd.setCursor(0, 2);
      lcd.print("00:00:00");
      lcd.setCursor(12, 2);
      lcd.print("00:00:00");
      lcd.setCursor(0, 3);
      lcd.print("Objectif :");
      lcd.setCursor(12, 3);
      lcd.print(TpsjeuDomination[0]);
      lcd.setCursor(13, 3);
      lcd.print(TpsjeuDomination[1]);
      lcd.setCursor(14, 3);
      lcd.print(":");
      lcd.setCursor(15, 3);
      lcd.print(TpsjeuDomination[2]);
      lcd.setCursor(16, 3);
      lcd.print(TpsjeuDomination[3]);
      lcd.setCursor(17, 3);
      lcd.print(":");
      lcd.setCursor(18, 3);
      lcd.print(TpsjeuDomination[4]);
      lcd.setCursor(19, 3);
      lcd.print(TpsjeuDomination[5]);
      digitalWrite(ledrouge , HIGH);
      NavModeDomination++;
      break; 
    case 20:
      bipper3();
      EtatboutonVert = digitalRead(btvert);
      EtatboutonRouge = digitalRead(btrouge);
      EtatcptMercure = digitalRead(cptmercure);
      if(EtatcptMercure == 0 && Actifcptmouv == 0){
        bipper4();
         Serial.println(EtatcptMercure);
      }
      else{
        if(Btactif[0] == 1){
          bipper1();  
        }
        else if (Btactif[1] == 1){
          bipper2();  
        }  
      }
      if(EtatboutonVert == 0){
        Btactif[0] = 0;
        Btactif[1] = 1;     
      }
      else if (EtatboutonRouge == 0){
        Btactif[0] = 1;
        Btactif[1] = 0;     
      }
      if(Timersecpartie == 0){
        currentTime = millis();
        Timersecpartie = currentTime; 
      }
      else if (currentTime > (Timersecpartie + 1000)){ 
        if(Btactif[0] == 1){
          GestionTemps[2]++;  
          if(GestionTemps[2] >= 10){
            lcd.setCursor(6, 2);
            lcd.print(GestionTemps[2]);  
          }
          else{
            lcd.setCursor(6, 2);
            lcd.print("0");
            lcd.setCursor(7, 2);
            lcd.print(GestionTemps[2]);
          }
        }
        else if(Btactif[1] == 1){
          GestionTemps[5]++;
          if(GestionTemps[5] >= 10){
            lcd.setCursor(18, 2);
            lcd.print(GestionTemps[5]);  
          }
          else{
            lcd.setCursor(18, 2);
            lcd.print("0");
            lcd.setCursor(19, 2);
            lcd.print(GestionTemps[5]);
          }
        }
        Timersecpartie = currentTime;  
      }
      if(GestionTemps[5] > 59){
        GestionTemps[4]++;  
        GestionTemps[5] = 0;
        if(GestionTemps[4] >= 10){
          lcd.setCursor(15, 2);
          lcd.print(GestionTemps[4]);  
        }
        else{
          lcd.setCursor(15, 2);
          lcd.print("0");
          lcd.setCursor(16, 2);
          lcd.print(GestionTemps[4]);
        }
        lcd.setCursor(18, 2);
        lcd.print("0");
        lcd.setCursor(19, 2);
        lcd.print(GestionTemps[5]);
      }
      if(GestionTemps[4] > 59){
        GestionTemps[3]++;  
        GestionTemps[4] = 0;
        if(GestionTemps[0] >= 10){
          lcd.setCursor(12, 2);
          lcd.print(GestionTemps[3]);  
        }
        else{
          lcd.setCursor(12, 2);
          lcd.print("0");
          lcd.setCursor(13, 2);
          lcd.print(GestionTemps[3]);
        }
        lcd.setCursor(15, 2);
        lcd.print("0");
        lcd.setCursor(16, 2);
        lcd.print(GestionTemps[4]);
      }
      if(GestionTemps[2] > 59){
        GestionTemps[1]++;  
        GestionTemps[2] = 0;
        if(GestionTemps[1] >= 10){
          lcd.setCursor(3, 2);
          lcd.print(GestionTemps[1]);  
        }
        else{
          lcd.setCursor(3, 2);
          lcd.print("0");
          lcd.setCursor(4, 2);
          lcd.print(GestionTemps[1]);
        }
        lcd.setCursor(6, 2);
        lcd.print("0");
        lcd.setCursor(7, 2);
        lcd.print(GestionTemps[2]);
      }
      if(GestionTemps[1] > 59){
        GestionTemps[0]++;  
        GestionTemps[1] = 0;
        if(GestionTemps[0] >= 10){
          lcd.setCursor(0, 2);
          lcd.print(GestionTemps[0]);  
        }
        else{
          lcd.setCursor(0, 2);
          lcd.print("0");
          lcd.setCursor(1, 2);
          lcd.print(GestionTemps[0]);
        }
        lcd.setCursor(3, 2);
        lcd.print("0");
        lcd.setCursor(4, 2);
        lcd.print(GestionTemps[1]);
      }
      if( (GestionTemps[0] >= ((TpsjeuDomination[0]*10) + TpsjeuDomination[1])) && (GestionTemps[1] >= (TpsjeuDomination[2]*10) + TpsjeuDomination[3]) && (GestionTemps[2] >= (TpsjeuDomination[4]*10) + TpsjeuDomination[5])){
        NavModeDomination++; 
        TimerBip[2] = currentTime;  
        lcd.clear();  
      }
      if( (GestionTemps[3] >= ((TpsjeuDomination[0]*10) + TpsjeuDomination[1])) && (GestionTemps[4] >= (TpsjeuDomination[2]*10) + TpsjeuDomination[3]) && (GestionTemps[5] >= (TpsjeuDomination[4]*10) + TpsjeuDomination[5])){
        NavModeDomination = 22;  
        TimerBip[2] = currentTime; 
        lcd.clear();  
      }
      break;
    case 21:
      digitalWrite(ledrouge , LOW);
      lcd.setCursor(0, 0);
      lcd.print("  -- DOMINATION --  ");
      lcd.setCursor(0, 2);
      lcd.print("     Rouge WIN     ");
      animation1();
      bipper3();
      break; 
    case 22:
      digitalWrite(ledrouge , LOW);
      lcd.setCursor(0, 0);
      lcd.print("  -- DOMINATION --  ");
      lcd.setCursor(0, 2);
      lcd.print("     Vert  WIN     ");
      animation1();
      bipper3();
      break;    
    default:
      break;
  }
}

void animation1(){
  if(Timersecpartie == 0){
    Timersecpartie = currentTime; 
  }
  else if (currentTime > (Timersecpartie + 100)){
    Timersecpartie = currentTime; 
    if(Animation[1] == 0 && Animation[0] < 13){
      Animation[0]++; 
      Animation[2]--;
      lcd.setCursor(Animation[0], 3);
      lcd.print("-"); 
      lcd.setCursor(Animation[2], 1);
      lcd.print("-"); 
    }
    else if (Animation[1] == 0 && Animation[0] == 13){
      Animation[1] = 1;
    }
    else if (Animation[1] == 1 && Animation[0] > 4){
      lcd.setCursor(Animation[0], 3);
      lcd.print(" "); 
      lcd.setCursor(Animation[2], 1);
      lcd.print(" ");   
      Animation[0]--; 
      Animation[2]++;
    }
    else if(Animation[1] == 1 && Animation[0] == 4){
      lcd.setCursor(Animation[0], 3);
      lcd.print(" "); 
      lcd.setCursor(Animation[2], 1);
      lcd.print(" "); 
      Animation[1] = 0;  
    }  
  }  
}

void bipper1(){
  if(TimerBip[0] == 0){
    TimerBip[0] = currentTime; 
  }
  else if (currentTime > (TimerBip[0] + 950) && currentTime < (TimerBip[0] + 1000)){
    digitalWrite(bipper , HIGH); 
  }
  else if (currentTime > (TimerBip[0] + 1000)){
    TimerBip[0] = currentTime; 
    digitalWrite(bipper, LOW);
  }  
}

void bipper2(){
  if(TimerBip[1] == 0){
    TimerBip[1] = currentTime; 
  }
  else if (currentTime > (TimerBip[1] + 750) && currentTime < (TimerBip[1] + 800)){
    digitalWrite(bipper , HIGH); 
  }
  else if (currentTime > (TimerBip[1] + 850) && currentTime < (TimerBip[1] + 900)){
    digitalWrite(bipper, LOW);
  }
  else if (currentTime > (TimerBip[1] + 950) && currentTime < (TimerBip[1] + 1000)){
    digitalWrite(bipper , HIGH); 
  }
  else if (currentTime > (TimerBip[1] + 1000)){
    TimerBip[1] = currentTime; 
  digitalWrite(bipper, LOW);
  } 
}

void bipper3(){
  if(TimerBip[2] == 0){
    TimerBip[2] = currentTime; 
  }
  else if (currentTime > TimerBip[2] && currentTime < (TimerBip[2] + 2500)){
    digitalWrite(bipper , HIGH); 
    digitalWrite(relayalarme , HIGH); 
  }
  else if (currentTime > (TimerBip[2] + 2500)){
    digitalWrite(bipper, LOW);
    digitalWrite(relayalarme, LOW);
  }
}

void bipper4(){
  
  if(TimerBip[3] == 0){
    TimerBip[3] = currentTime; 
  }
  else if (currentTime > (TimerBip[3]) && currentTime < (TimerBip[3] + 100)){
    digitalWrite(bipper , HIGH); 
  }
  else if (currentTime > (TimerBip[3] + 200) && currentTime < (TimerBip[3] + 300)){
    digitalWrite(bipper, LOW);
  }
  else if (currentTime > (TimerBip[3] + 300) && currentTime < (TimerBip[3] + 400)){
    digitalWrite(bipper , HIGH); 
  }
  else if (currentTime > (TimerBip[3] + 400) && currentTime < (TimerBip[3] + 500)){ 
    digitalWrite(bipper, LOW);
  } 
  else if (currentTime > (TimerBip[3] + 500)){
    TimerBip[3] = currentTime;
  }
}

 


 

Cet article a 5 commentaires

  1. johnny

    Bonjour,
    super boulot. J’ai déjà réalisé la bombe et elle a un succès fou sur le terrain.
    Tu mets dans ton schéma un uno et dans ta liste matériel un nano.
    Lequel choisir ?
    Petite demande : est-il possible de mettre un temps de jeu, avec au final, le temps de possession pour chaque équipe, car je souhaiterai en réaliser plusieurs à placer sur le terrain ?
    En te remerciant pour ta réponse.

    1. steven

      Bonjour,
      Merci pour le retour effectivement petit, erreur la carte, mais il faut bien utiliser une Uno.
      Pour ta demande, contacte-moi, car je n’ai pas bien compris ce que tu désirais.
      Cordialement,

      1. johnny

        Merci pour ta réponse.
        En mode domination, si tu rentre 1 mn, la partie se termine automatiquement après 1 mn de prise de la borne par une équipe, ce qui fait que si tu mets un temps plus long, la partie peut ne jamais se finir.
        J’aurai aimé savoir s’il était possible de rentrer un temps de jeu général par exemple 15 mn et à la fin du compte à rebours, savoir qui a tenu la borne le plus longtemps. Dans ce cas, c’est l’orga qui décide du temps de jeu.

  2. Arnaud

    Bonjour,

    Merci pour le travail réalisé,

    J’aimerais savoir s’il est possible de rajouter deux Leds afin de savoir quelle équipe tient la borne sans être à coté de celle-ci et sans lire l’écran.
    si l’équipe rouge tient la borne une led rouge s’allume et si c’es l’équipe verte, une Led verte s’allume.

    1. steven

      Bonjour oui possible
      Vous pouvez facilement l’ajouter dans le programme.
      J’avais réalisé une nouvelle version avec un ruban de led, mais j’ai malheureusement perdu le programme.
      Dès que j’ai un peu de temps, je vais m’occuper de le re faire.

      Cordialement,

Laisser un commentaire