Partage
  • Partager sur Facebook
  • Partager sur Twitter

demande d'aide pour un prog arduino

    10 mai 2014 à 22:56:36

    bonsoir a tous;

    je suis nouveau sur le forum et dans le monde de l'arduino, j'ai donc suivi les cours mais je doit vous avouer que je suis plus manuel qu'intéllectuel donc j'ai pas tout assimilé et certain truc que j'ai pas compris mais malgrès tout je me suis lancé dans un petit projet pour mon équipe sprotive...

    je pratique l'airsoft et pour pimenter un peu les parties avec mon equipe j'ai decidé de creer une bombe factice sur base arduino.

    donc voila j'ai réalisé la partie electronique, et j'ai trouvé et modifié un code pour gerer le système. donc j'explique. le montage sera dans une mallette possedant un micro swith comme contacteur d'ouverture de couvercle et un autre comme contacteur anti soulèvement( déplacement) et aussi une clé de piratage. le principe est simple il y a un compte a rebours activé/désactivé par code via un clavier 16 touches. si l'équipe adverse ouvre la malette  ou la déplace une sirène se déclenche==>fin de partie par contre si l'équipe adverse insert une clé de piratage(clé usb) elle peut aisément ouvrir et déplacer la mallette pour essayer de la désamorcer.

    donc mon problème se situe au niveau des contacteurs, le compte a rebours marche nickel et les code fonctionnent impec mais des que je veut activer les contacteurs je n'y arrive pas. j'ai essayé plusieurs manière mais a chaque fois le compte a rebours s'intterompt quelque soit l'état du contacteur(HIGH ou LOW) et quelque soit sont état physique (appuyé ou relaché).

    pour le branchement du lcd je passe par un 74hc595n et le clavier est branché en direct ( les broches sont enoncés en début de prog).

    pour le branchement des microswitchs je les ais branchés comme dans le tuto, j'ai a coup sur fais une erreur quelque part mais la je sèche et je fais donc humblement appel a vos connaissances, branchement? code? je ne sais pas et je ne trouve pas! si vous pouviez aider le jeune padawan que je suis dans cet univers fantastique qu'est "l'arduino" je vous en serai très reconnaissant.

     voici le code utilisé et dans son état actuel

    /*programme bombe airsoft avec compte a rebours 
    *contacteurs anti-soulevement et anti ouverture
    *et prise piratage, activation et desactivation par code.
    *programme trouvé sur different sites et modifié par Freeman83
    */
    
    // Déclaration de la librairie :
    #include <LiquidCrystal.h>
    #include <Keypad.h> // inclusion de la librairie pour clavier matriciel 
    #include <ShiftLCD.h>
    ShiftLCD lcd(10, 12, 11);
    
    /* initialise la librairie en précisant les sorties utilisées
    *Les connexions sont les suivantes :
    * LCD broche RS connectée à la broche QH/7 du 74HC595
    * LCD broche Enable connecté à la broche QG/6 du 74HC595
    * LCD broche D4 connectée à la broche QD/3  du 74HC595
    * LCD broche D5 connectée à la broche QC/2  du 74HC595
    * LCD broche D6 connectée à la broche QB/1  du 74HC595
    * LCD broche D7 connectée à la broche QA/15 du 74HC595
    * LCD broche R/W connectée à la masse
    * Potentiomètre 10K :une broche à +5V l’autre à la masse
    * celle du milieu à la broche LCD VO 
    * clavier broche C4 connectée a la broche 2 
    * clavier broche C3 connectée a la broche 3
    * clavier broche C2 connectée a la broche 4
    * clavier broche C1 connectée a la broche 5
    * clavier broche L4 connectée a la broche A2
    * clavier broche L3 connectée a la broche A3
    * clavier broche L2 connectée a la broche A4
    * clavier broche L1 connectée a la broche A5
    *contacteur couvercle connecté a la broche 6 de l'arduino R3
    *contacteur déplacement connecté a la broche 7 de l'arduino R3
    *clé USB connecté a la broche 8 de l'arduino R3
    *buzzer connecté a la broche 13 de l'arduino R3
    */
    
    
    //--- Constantes utilisées avec le clavier 4x4
    const byte LIGNES = 4; // 4 lignes
    const byte COLONNES = 4; //4 colonnes
    
    //--- Définition des touches 
    char touches[LIGNES][COLONNES] = {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
    
    int contacteur_couvercle = 6;
    int contacteur_deplacement = 7;
    int cle_usb = 8;
    int speakerpin = 13;
    int L1 = A5;
    int L2 = A4;
    int L3 = A3;
    int L4 = A2;
    int C1 = 5;
    int C2 = 4;
    int C3 = 3;
    int C4 = 2;
    
    // tableaux de lignes et colonnes
    byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
    byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier
    
    
    Keypad keypad = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
    
    //Define all the bomb states  
    #define READY 0
    #define ARMED 1
    #define DISARMED 2
    #define DETONATED 3
    #define speakerPin 13
    int etat1; //etat du contacteur couvercle
    int etat2; //etat du contacteur deplacement
    int etat3; //etat de la cle usb
    int second=30, minute=1, hour=0; // declare time variables
    int bombState=0; //0 = Ready, 1 = Armed, 2 = Disarmed, 3 = detonated
    int repeat=0;//flag to prevent repeat of getArmCode();
    int repeatAdm=0; //flag to prevent repeat of getAadminCode();
    int repeatDisarm=0;//flag to prevent repeat of getDisarmCode();
    int repeatBuzzer=0;//flag to prevent buzzer from running multiple times.
    int repeatTimerEdit=0;//flag to prevent repeat of timer edit function
    //int speakerPin = 13;//broche de connection du buzzer.
    int blinkArmed = 0;  // flag for blink text
    int blinkDisarmed = 0;  // flag to blink disarmed msg
    int nbBlinkDisarmed = 6;  // flag for number of blink disarmed msg (real number of blink = nbBlinkDisarmed / 2)
    long previousTime = 0;//holds previous time in ms
    long previousDelay = 0;//holds previous time in ms since buzzer was active
    long interval = 60000;//60 second delay
    
    char hour_str[4]; // For Convert int in char
    char minute_str[4]; // For Convert int in char
    char second_str[4]; // For Convert int in char
    char timeInt_str[0];  // For Convert int in char
    char newcode_str[0];
    char newarmcode_str[0];
    char newdisarmcode_str[0];
    
    
    char ArmCode[] = "123456";//code pour armer la bombe
    char disarmCode[] = "123456";//code pour desarmer la bombe
    char adminCode[] = "AD9514";//code administrateur pour entrer dans le menu
    
    char ENTER_KEY = '#';
    char CANCEL_KEY = '*';//stores the cancel key variable.
    char timeSetKey = '*';//touche a presser pour entrer le code.
    
    
    
    void setup()
    {lcd.begin(16, 2);
                    lcd.clear();
                    lcd.setCursor(1, 0 );
                    lcd.print( "Bombe  Factice" );
                    lcd.setCursor( 3, 1 );
                    lcd.print( "GOOD GAME" );
                    delay(3000);
                    lcd.setCursor( 1, 0 );
                    lcd.print( "Bombe  Factice" );
                    lcd.setCursor( 3, 1 );
                    lcd.print( "BY FREEMAN" );
                    delay(3000);
                    lcd.clear();
                    
      ////backlightOn();
      //blinkCursor();
      //stopVscroll();
      
      pinMode(speakerPin, OUTPUT);//definir l'etat de broche de sortie pour le buzzer
      pinMode(contacteur_couvercle, INPUT); //definir l'etat de la broche pour le contacteur couvercle.
      pinMode(contacteur_deplacement, INPUT); //definir l'etat de la broche pour le contacteur deplacement.
      pinMode(cle_usb, INPUT); //definir l'etat de la broche pour la clé usb.
      
      digitalWrite(contacteur_couvercle, LOW); //definir la valeur du contacteur couvercle
      digitalWrite(contacteur_deplacement, LOW); //definir la valeur du contacteur de deplacement
      digitalWrite(cle_usb, LOW); //definir la valeur de la cle usb
      
    }
    
    
    
    
    
    void loop()
    
    {
       
    
      switch (bombState) {
    lcd.clear();
                    
        /***********************************************************
         *Ready state prepares bomb, waits for arm code to be input
         *
         ************************************************************/
      case READY:
        int resultOfGetArmCode;
        lcd.clear();
        lcd.setCursor(0, 0 );
        delay(100);
        //showCursor();
        //blinkCursor();
    
        lcd.print("Enter ArmCode :"); //Notification du statut.
        digitalWrite(speakerPin, HIGH);
        resultOfGetArmCode = getArmCode();
    
        if (resultOfGetArmCode == 1) {
          lcd.clear();
          lcd.setCursor(0, 0 );
          delay(100);
          lcd.print("Correct");
          delay(500);
          lcd.clear();
          bombState = ARMED; //debut du compte a rebours
    
        }//Close getArmCode(); = true
    
        if (resultOfGetArmCode == 0) {  //si le code est faux, l'ecran affiche "incorrect"
          tryAgainMsg();        
    
       }// Close getArmCode(); = false.
    
        break;
    
        /**************************************************
         *Armed state. Countdown starts, waits for pushbutton to be pressed.
         *If button is pressed, wait for code from keypad.
         ***************************************************/
    
      case ARMED:
        {  
          char disarmKey = keypad.getKey();
          
          
         etat1 = digitalRead(contacteur_couvercle); 
         etat2 = digitalRead(contacteur_deplacement);
         etat3 = digitalRead(cle_usb);
         
            if (etat1 == HIGH);
            bombState = DETONATED; //si le contacteur couvercle est relaché la bombe explose
           
    
            if (etat2 == HIGH);
            bombState = DETONATED; //si le contacteur de deplacement est relaché la bombe explose 
            
        
            if (etat3 == LOW); //si la cle usb est inseré les contacteurs couvercle et deplacement sont consideré comme appuyé
              etat1 = LOW;
              etat2 = LOW; 
              
              
    
          if (disarmKey == '#') {
           char reslutOfDisarm;
            lcd.clear();    
            lcd.setCursor(0, 0 );
    
            delay(100);
            lcd.print("Enter DisarmCode"); //si la touche de desarmement # est pressée, l'utilisateur peux entrer le code.
            reslutOfDisarm = getDisarmCode();
    
            if (reslutOfDisarm == true) {  
              lcd.clear();
              bombState = DISARMED; //la bombe passe a l'etat desarmé.
              break;
            } //close getDisarmCode(); = True
    
    
            if (reslutOfDisarm == false) {
              tryAgainMsg();
    
              if (second >= 15) {
                second = second - 15;
              }
    
             else {
                if (minute == 0 && hour == 0) {
                  second=1; //detonate.
                }
                if (minute > 0) {
                  second = 60 - (15 - second);
                  minute = minute - 1;
               }
    
                if (hour > 0 && minute == 0) {
                  second = 60 - (15 - second);
                  minute = 59;
                  hour = hour - 1 ;
                }
              }    
            } //close getDisarmCode(); = false  
         } //close if
    
        }
        countdown(); //si la touche de desarmement # n'est pas pressée, continue le compte a rebours.
    
        break;
    
        /**************************************************************
         *DISARMED. Counter stopped, displays "bomb disarmed"
         *
         **************************************************************/
    
      case DISARMED:
        int blinkDisarmFlag;
        blinkDisarmFlag = 0;
        
        //hideCursor();
    
        for (nbBlinkDisarmed; nbBlinkDisarmed > 0; nbBlinkDisarmed--){  // blink msg
          if (blinkDisarmFlag == 1){  
            lcd.setCursor(1, 0 );
            lcd.print("BOMBE DESARMEE"); //indique le statut bombe desarmée.
            lcd.setCursor(1, 1 );
            lcd.print("GOOD JOB TEAM");
            delay(5000);
            lcd.clear();
            lcd.setCursor(1, 0 );
            lcd.print("GOOD JOB TEAM"); //bomb has been disarmed, inform user.
            lcd.setCursor(1, 1 );
            lcd.print("BOMBE DESARMEE");
            delay(9000);
          
    
      asm volatile ("  jmp 0");
           blinkDisarmFlag = 0;
            
          }
          else{
            lcd.clear();
            delay(1000);        
            blinkDisarmFlag = 1;
          }  
        } // end blink
        break;
    
        /*******************************************************
         *Detonated. activate buzzer for 8 beeps, then 1 long.
         *Print "Have A Nice Day. to LCD.
         ********************************************************/
    
      case DETONATED:
        if (repeatBuzzer == 0) { //make sure buzzer for loop has not already been run.
    
          digitalWrite(speakerpin, LOW);//declencher le buzzer
          lcd.clear();
          lcd.setCursor(3, 0 );
          lcd.print("EXPLOSION"); //loop message informing user of bomb detonation.
          //lcd.setCursor(0, 1 );
          //lcd.print("Have A Nice Day"); //loop message informing user of bomb detonation.
          delay(5000);//attendre 5 secondes
          digitalWrite(speakerpin, HIGH);//arreter le buzzer
          repeatBuzzer = 1;//set flag to prevent code from looping again.
        }
    
        else {
          //lcd.setCursor(0, 0 );
          //lcd.print("EXPLOSION"); //loop message informing user of bomb detonation.
          lcd.setCursor(1, 1 );
          lcd.print("Have A Nice Day"); //loop message informing user of bomb detonation.
          delay(9000);
          
    
      asm volatile ("  jmp 0");
    
       }
    
      }//closes switch
    }//closes loop
    /*void software_Reset()
    {
    }*/
    /***********************************************************
     * Main countdown timer                                     *
     *                 countdown()                              *
     ************************************************************/
    void countdown(){
    
     static unsigned long lastTick = 0; // set up a local variable to hold the last time we decremented one second
      static unsigned long currentMillis = 0;
      // (static variables are initialized once and keep their values between function calls)
    
      // decrement one second every 1000 milliseconds
      if (second > 0) {
        if (millis() - lastTick >= 1000) {
          lastTick = millis();
          second--;
          serialOutput();
        }
      }
    
      // decrement one minute every 60 seconds
      if (minute > 0) {
        if (second <= 0) {
          minute--;
          second = 60; // reset seconds to 60
    
        }
      }
    
      // decrement one hour every 60 minutes
      if (hour > 0) {
        if (minute <= 0) {
          hour--;
          minute = 60; // reset minutes to 60
        }//closes if
      }//closes if
    
    
      //the code below beeps the siren once every minute.
      currentMillis = millis();
      if (currentMillis - previousTime > interval)
      {
        previousTime = currentMillis;
        previousDelay = currentMillis;
    
        digitalWrite(speakerPin, LOW);//turn on buzzer
      }
    
      if (currentMillis - previousDelay > 100) {//100ms chirp duration
        digitalWrite(speakerPin, HIGH);//turn off buzzer
      }
    } //close countdown();
    
    
    /***********************************************************************
     *                          getArmCode();                               *
     *  Grabs the code to arm the bomb from the keypad.                     *
     *                                                                      *
     ************************************************************************/
    boolean getArmCode(){
      // returns true when all PW keys are pressed in sequence
      // returns false when number of keys in pW pressed but don't exactly match the PW
      // CANCEL_KEY erases all previous digits input
      int count=0;  // how many keys we have
      int matchCount=0;  // how many keys match
      lcd.setCursor(0, 1 );
    
      if(repeat == 0){
    
        for(count=0, matchCount=0; count < sizeof(ArmCode)-1; count++){
          char key;
          char key_str[0];  // Define as string
    
          do{
            key = keypad.getKey();
            delay (100);
          }
          while(key == '\0');
    
          key_str[0] = key;
          lcd.print(key_str);
    
          if (key == timeSetKey && repeatTimerEdit == 0){
    // ***************** MOD HERE *********************   ============> Random codes for arm & disarm    
           timerSet();
            return 2;
         }      
    
         if(key == ArmCode[count]) {
            matchCount++;
          }
    
          else if(key == CANCEL_KEY){
            count=0;
            matchCount=0;
            return 0;
          }
        }//close for loop
     }//close repeat flag check
    
      // here when the same number of keys pressed as characters in the PW
      if(matchCount == count) {
        repeat=1;
        return 1;
      }
    
      else {
        return 0;
      }
    }//close getArmCode();
    
    
    /**********************************************************************
     *                   getDisarmCode();                                  *
     *    Gets disarm code from keypad.                                    *
     *                                                                     *
     ***********************************************************************/
    boolean getDisarmCode(){
    
      // returns true when all PW keys are pressed in sequence
      // returns false when number of keys in pW pressed but don't exactly match the PW
      // CANCEL_KEY erases all previous digits input
    
      int count=0;  // how many keys we have
      int matchCount=0;  // how many keys match
      long disarmTime = millis()+9000L;//7000 instead of 15000 b/c of added delays making total 30s
    
      lcd.setCursor(0, 1 );
      //showCursor();
      //blinkCursor();
    
      if(repeatDisarm == 0){
    
        for(count=0, matchCount=0; count < sizeof(disarmCode)-1; count++){
          char key;
          char key_str[0];  // Define as string
    
          do{
            if(disarmTime < millis()){ //if 15 seconds have passed, bail out
              break;
            }
    
            key = keypad.getKey();
           delay (100);      
         }
          while(key == '\0');
    
          key_str[0] = key;
          lcd.print(key_str);
    
          if(key == disarmCode[count]) {
            matchCount++;
          }
    
          else if(key == CANCEL_KEY){
            count=0;
            matchCount=0;
            return false;
          }
    
          if(disarmTime < millis()) {
            return false;
            break;
         }
    
        }// close for loop
      } //close repeat flag check
    
        // here when the same number of keys pressed as characters in the PW
      if(matchCount == count) {
        repeatDisarm=1;
        return true;
      }
      else {
        return false;
    
      }
    }//close getDisarmCode();
    
    
    /**********************************************************************
     *                   getAdminCode();                                  *
     *    Gets admin code from keypad.                                    *
     *                                                                     *
     ***********************************************************************/
    boolean getAdminCode(){
    
      // returns true when all PW keys are pressed in sequence
      // returns false when number of keys in pW pressed but don't exactly match the PW
      // CANCEL_KEY erases all previous digits input
    
      int count=0;  // how many keys we have
      int matchCount=0;  // how many keys match
    
      lcd.setCursor(0, 1 );
    
    
      for(count=0, matchCount=0; count < sizeof(adminCode)-1; count++){
        char key;
        char key_str[0];  // Define as string
    
        do{
          key = keypad.getKey();
          delay (100);
        }
        while(key == '\0');
    
    //    itoa(key, key_str,10);
        key_str[0] = key;
        lcd.print(key_str);
      //  lcd.print(itoa(key, key_str,16));
    
    
        if(key == adminCode[count]) {
          matchCount++;
        }
    
        else if(key == CANCEL_KEY){
          count=0;
          matchCount=0;
          return false;
        }
    
      }// close for loop
    
      // here when the same number of keys pressed as characters in the PW
      if(matchCount == count) {
        return true;
      }
      else{
        return false;
      }
      // Do nothing if pwd is false / Parent function send tryAgin msg
    }//close getAdminCode();
    
    
    /*********************************************************************
     *                        Timer edit function                         *
     *                                                                    *
     *                                                                    *
     **********************************************************************/
    void timerSet(){
      lcd.clear();
      lcd.print("Enter AdminCode");
      char resultOfGetAdmCode;
    
      resultOfGetAdmCode = getAdminCode();
    
      if (resultOfGetAdmCode == true){
        char timeInt;
        char newcode;
        char newarmcode;
        char newdisarmcode;
        char menupage;
        int newadmincode;
        lcd.clear();  
        lcd.setCursor(0, 0 );
        lcd.print("1.Admin 2.Time");
        lcd.setCursor(0, 1 );
        lcd.print("3.Arm 4.Disarm");
        do{
          menupage = keypad.getKey();
        }
        while(menupage == '\0' || menupage == '*' || menupage == '0' || menupage > 52);
        
        switch(menupage) {
          case '1': // Edit admin code
            lcd.clear();
            lcd.setCursor(0, 0 );
            lcd.print("new admin code :");
            lcd.setCursor(0, 1 );
            do{
               newcode = keypad.getKey();
               delay (100);
            }
           while(newcode == '\0');
           newcode_str[0] = newcode;
           lcd.print(newcode_str);
           adminCode[0] = newcode_str[0];
           newadmincode = (newcode - '0') * 10;//get first digit and convert to int
           do{
           newcode = keypad.getKey();
           delay (100);
            }
            while(newcode == '\0');
            newcode_str[0] = newcode;
            lcd.print(newcode_str);
            adminCode[1] = newcode_str[0];
            newadmincode = (newcode - '0') + newadmincode;//get second digit.
            do{
           newcode = keypad.getKey();
           delay (100);
            }
            while(newcode == '\0');
            newcode_str[0] = newcode;
            lcd.print(newcode_str);
            adminCode[2] = newcode_str[0];
            newadmincode = (newcode - '0') + newadmincode;//get 3rd digit.
            do{
           newcode = keypad.getKey();
           delay (100);
            }
            while(newcode == '\0');
            newcode_str[0] = newcode;
            lcd.print(newcode_str);
            adminCode[3] = newcode_str[0];
            newadmincode = (newcode - '0') + newadmincode;//get 4th digit.
            do{
           newcode = keypad.getKey();
           delay (100);
            }
            while(newcode == '\0');
            newcode_str[0] = newcode;
            lcd.print(newcode_str);
            adminCode[4] = newcode_str[0];
            newadmincode = (newcode - '0') + newadmincode;//get 5th digit.
            do{
           newcode = keypad.getKey();
           delay (100);
            }
            while(newcode == '\0');
            newcode_str[0] = newcode;
            lcd.print(newcode_str);
            adminCode[5] = newcode_str[0];
            newadmincode = (newcode - '0') + newadmincode;//get 6th digit.
          
             //newcode = 'L';
     
             
              lcd.clear();
              
              lcd.setCursor(0, 0 );
              lcd.print("NEW ADMINCODE");
              lcd.setCursor(0, 1 );
              lcd.print(adminCode);
              delay(5000);
              lcd.clear();
            
            break;
            
            case '3': // Edit armcode
            lcd.clear();
            lcd.setCursor(0, 0 );
            lcd.print("new armcode :");
            lcd.setCursor(0, 1 );
            do{
               newarmcode = keypad.getKey();
               delay (100);
            }
           while(newarmcode == '\0');
           newarmcode_str[0] = newarmcode;
           lcd.print(newarmcode_str);
           ArmCode[0] = newarmcode_str[0];
           newarmcode = (newarmcode - '0') * 10;//get first digit and convert to int
           do{
           newarmcode = keypad.getKey();
           delay (100);
            }
            while(newarmcode == '\0');
            newarmcode_str[0] = newarmcode;
            lcd.print(newarmcode_str);
            ArmCode[1] = newarmcode_str[0];
            newarmcode = (newarmcode - '0') + newarmcode;//get second digit.
            do{
           newarmcode = keypad.getKey();delay (100);
            }
            while(newarmcode == '\0');
            newarmcode_str[0] = newarmcode;
            lcd.print(newarmcode_str);
            ArmCode[2] = newarmcode_str[0];
            newarmcode = (newarmcode - '0') + newarmcode;//get 3rd digit.
            do{
           newarmcode = keypad.getKey();
           delay (100);
            }
            while(newarmcode == '\0');
            newarmcode_str[0] = newarmcode;
            lcd.print(newarmcode_str);
            ArmCode[3] = newarmcode_str[0];
            newarmcode = (newarmcode - '0') + newarmcode;//get 4th digit.
            do{
           newarmcode = keypad.getKey();
           delay (100);
            }
            while(newarmcode == '\0');
            newarmcode_str[0] = newarmcode;
            lcd.print(newarmcode_str);
            ArmCode[4] = newarmcode_str[0];
            newarmcode = (newarmcode - '0') + newarmcode;//get 5th digit.
            do{
           newarmcode = keypad.getKey();
           delay (100);
            }
            while(newarmcode == '\0');
            newarmcode_str[0] = newarmcode;
            lcd.print(newarmcode_str);
            ArmCode[5] = newarmcode_str[0];
            newarmcode = (newarmcode - '0') + newarmcode;//get 6th digit.
          
             //newcode = 'L';
     
             
              lcd.clear();
              
              lcd.setCursor(0, 0 );
              lcd.print("NEW ARMCODE");
              lcd.setCursor(0, 1 );
              lcd.print(ArmCode);
              delay(5000);
              lcd.clear();
            
            break;
            
            case '4': // Edit disarmcode
            lcd.clear();
            lcd.setCursor(0, 0 );
            lcd.print("new disarmcode :");
            lcd.setCursor(0, 1 );
            do{
               newdisarmcode = keypad.getKey();
            delay (100);
          }
           while(newdisarmcode == '\0');
           newdisarmcode_str[0] = newdisarmcode;
           lcd.print(newdisarmcode_str);
           disarmCode[0] = newdisarmcode_str[0];
           newdisarmcode = (newdisarmcode - '0') * 10;//get first digit and convert to int
           do{
           newdisarmcode = keypad.getKey();
           delay (100);
            }
            while(newdisarmcode == '\0');
            newdisarmcode_str[0] = newdisarmcode;
            lcd.print(newdisarmcode_str);
            disarmCode[1] = newdisarmcode_str[0];
            newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get second digit.
            do{
           newdisarmcode = keypad.getKey();
           delay (100);
            }
            while(newdisarmcode == '\0');
            newdisarmcode_str[0] = newdisarmcode;
            lcd.print(newdisarmcode_str);
            disarmCode[2] = newdisarmcode_str[0];
            newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 3rd digit.
            do{
           newdisarmcode = keypad.getKey();
           delay (100);
            }
            while(newdisarmcode == '\0');
            newdisarmcode_str[0] = newdisarmcode;
            lcd.print(newdisarmcode_str);
            disarmCode[3] = newdisarmcode_str[0];
            newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 4th digit.
            do{
           newdisarmcode = keypad.getKey();
           delay (100);
            }
            while(newdisarmcode == '\0');
            newdisarmcode_str[0] = newdisarmcode;
            lcd.print(newdisarmcode_str);
            disarmCode[4] = newdisarmcode_str[0];
            newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 5th digit.
            do{
           newdisarmcode = keypad.getKey();
           delay (100);
            }
            while(newdisarmcode == '\0');
            newdisarmcode_str[0] = newdisarmcode;
            lcd.print(newdisarmcode_str);
            disarmCode[5] = newdisarmcode_str[0];
            newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 6th digit.
          
             //newcode = 'L';
     
    
             lcd.clear();
              
              lcd.setCursor(0, 0 );
              lcd.print("NEW DISARMCODE");
              lcd.setCursor(0, 1 );
              lcd.print(disarmCode);
              delay(5000);
              lcd.clear();
            
            break;
            
          case '2': // Timer
            lcd.clear();
           lcd.print("Enter xx Hours");
            lcd.setCursor(0, 1 );
            do{
               timeInt = keypad.getKey();
            }
            while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
            timeInt_str[0] = timeInt;
            lcd.print(timeInt_str);
      
            hour = (timeInt - '0') * 10;//get first digit and convert to int
            do{
            timeInt = keypad.getKey();
            }
            while(timeInt == '\0');
            timeInt_str[0] = timeInt;
            lcd.print(timeInt_str);
        
            hour = (timeInt - '0') + hour;//get second digit.
            delay(800);
              lcd.clear();
              timeInt = 'L';
              // ------------------------------------------------------------------
              lcd.print("Enter xx Minutes");
              lcd.setCursor(0, 1 );
              do{
                timeInt = keypad.getKey();
              }
              while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
              timeInt_str[0] = timeInt;
              lcd.print(timeInt_str);
          
              while (timeInt < '0' || timeInt > '6'){
                timeInt = keypad.getKey();
              }
              minute = (timeInt - '0') * 10;//get first digit and convert to int
              do{
                timeInt = keypad.getKey();
              }
              while(timeInt == '\0');
              minute = (timeInt - '0') + minute;//get second digit.
              timeInt_str[0] = timeInt;
              lcd.print(timeInt_str);
              delay(800);  
             lcd.clear();
              timeInt = 'L';
              // ------------------------------------------------------------------
              lcd.print("Enter xx Seconds");
              lcd.setCursor(0, 1 );
              do{
                timeInt = keypad.getKey();
              }
              while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
              timeInt_str[0] = timeInt;
              lcd.print(timeInt_str);
          
              while (timeInt < '0' || timeInt > '6'){
                timeInt = keypad.getKey();
              }
              second = (timeInt - '0') * 10;//get first digit and convert to int
              do{
                timeInt = keypad.getKey();
              }
              while(timeInt == '\0');
              second = (timeInt - '0') + second;//get second digit.
              timeInt_str[0] = timeInt;
              lcd.print(timeInt_str);
              delay(800);    
              lcd.clear();
              timeInt = 'L';
              lcd.print("Time set :");
              lcd.setCursor(0, 1 );
              itoa (hour, hour_str, 10);
              itoa (minute, minute_str, 10);
              itoa (second, second_str, 10);
              lcd.print(hour_str);
              lcd.print(":");
              lcd.print(minute_str);
              lcd.print(":");
              lcd.print(second_str);
             delay(2000);  
             // ---------------------- Put randomize here --------------------------
              repeatTimerEdit = 1;
            }//end of getAdminCode == true
          
            if(resultOfGetAdmCode == false){
             tryAgainMsg();
             // Do nothing if pwd is false / Parent function send tryAgin msg
            
           }
            lcd.clear();
          }//end of timer edit function
    }
    
    
    
    /****************************************************************
     *                     serialOutput();                           *
     *    prints the values of the timer over the serial connection  *
     *         and onto the LCD                                      *
     *****************************************************************/
    void serialOutput() {
    
      
      itoa (hour, hour_str, 10);
      itoa (minute, minute_str, 10);
      itoa (second, second_str, 10);
      
    
      if(bombState != DISARMED){
      
       lcd.setCursor(0, 0 );
        delay(20);
        if (blinkArmed == 0){
          lcd.print("!!   ARMED    !!");
          blinkArmed=1;
        }
        else {
          lcd.print("!!            !!");
          blinkArmed=0;      
        }
        lcd.setCursor(0, 1 );
        
        lcd.print("Time = ");
        if (hour <=9) {
        lcd.print("0");
        lcd.print(hour_str); // the hour, sent to the screen in decimal format
        }
        else{
        lcd.print(hour_str);
       }
        lcd.print(":"); // a colon between the hour and the minute
        if (minute <=9) {
        lcd.print("0");
        lcd.print(minute_str); // the minute, sent to the screen in decimal format
        }
        else{
        lcd.print(minute_str);
        }
        lcd.print(":"); // a colon between the minute and the second
        if (second <=9) {
        lcd.print("0");
        lcd.print(second_str); // the minute, sent to the screen in decimal format
        }
        else{
          lcd.print(second_str);
        }
        //termination condition
      }
      if (second == 0 && minute == 0 && hour == 0) {
        lcd.clear();
        
        bombState = DETONATED; //clear LCD and set bomb state to "detonated" when timer runs out
      }
    
      if (bombState == DISARMED) {
        lcd.clear();
     }
    }//close serialOutput();
    
    
    void tryAgainMsg(){
      lcd.clear();
      //hideCursor();
      delay(100);        
      lcd.print("T");
      delay(150);
      lcd.print("r");
      delay(150);
      lcd.print("y");
      delay(150);        
      lcd.print(" ");
      delay(150);
      lcd.print("a");
      delay(150);          
     lcd.print("g");
      delay(150);
      lcd.print("a");
      delay(150);          
     lcd.print("i");
      delay(150);
      lcd.print("n");
      delay(150);
      lcd.print(" ");
      delay(150);
      lcd.print("!");
      delay(1000);  
    }
    
    void incorrectMsg(){
      lcd.clear();
      
      delay(100);        
      lcd.print("I");
      delay(350);
      lcd.print("n");
      delay(350);
      lcd.print("c");
      delay(350);        
      lcd.print("o");
      delay(350);
      lcd.print("r");
      delay(350);          
     lcd.print("r");
      delay(350);
      lcd.print("e");
      delay(350);          
     lcd.print("c");
      delay(350);
      lcd.print("t");
      delay(1000);  
    }
    //END of bomb program.



    merci d'avance a tous

    -
    Edité par freeman832210 10 mai 2014 à 23:00:17

    • Partager sur Facebook
    • Partager sur Twitter
      10 mai 2014 à 23:42:27

      Wahou ! 1000 lignes de code !

      On peut déjà dire un grand bravo a celui qui prendra soin de tout lire dans les moindre détails.

      Voici déjà les points que je relève après un survole de ton code :

      ==========

      Ligne 138 à 140 : un digitalWrite sur des pin en INPUT, je doute fort que tu ai pu voir ça dans le tuto, que voulais tu faire exactement ?

      ==========

      Ligne 154 : une ligne de code à l’intérieur d'un switch sans être une case précise, c'est une erreur (mais peut être que le compilateur l'accepte plus ou moins)

      ==========

      Ligne 212, 213, 214 : il aurait été préférable de faire ce if AVANT de déclarer la bombe DETONATED parce que là, c'est un peu trop tard ^^

      ==========

      Ligne 204, 208, 211 et peut-être d'autre :  très probablement l'orginie de ton problème ... il ne faut JAMAIS mettre de point virgule après un if.

      // Ecrire ceci :
      if ( a == 2 );
          b++;
      
      // Revient au même que écrire ceci :
      if ( a == 2 ) {
          // Rien;
      }
      b++;
      
      // Bref, dans tous les cas, b++ est exécuté

      ==========

      Inutile de continuer à lire le reste, supprimer ces ; devrait résoudre ton problème (ou alors, c'est que tu en as plusieurs).

      -
      Edité par lorrio 10 mai 2014 à 23:43:41

      • Partager sur Facebook
      • Partager sur Twitter
        11 mai 2014 à 13:42:11

        tout d'abord merci de la réponse rapide, j'ai donc procédé au changements,

        lignes 138 a 140 supprimés, j'ai voulu initialisé l'état des sortie mais effectivement ce sont des entrée donc inutile, je devais être très fatigué quand j'ai écrit ça.

        lignes 204, 208, 211 j'ai supprimé le ;

        lignes 212, 213 et 214 je les ai décalé au début et ça marche,  quand a la ligne 154 j'ai laissé ça n'a pas l'air de gêner  le programme.

        le projet fonctionne j'ai plus qu'a faire le montage définitif dans la mallette et voir si je peut rajouter des LED clignotantes pour égayer un peu le tout.

        encore une petite question, la sirène que je met est récupéré sur une alarme de fenêtre, (avec son circuit pour la variation de ton)

        mais quand je le branche et qu'il se déclenche ça me fait varier l'intensité du rétro-éclairage du LCD, comme quand cela tire trop de jus sur l'alim de l'arduino, pourtant l'alim d'origine de l'alarme est en 4,5V doit-je faire une alim séparée et gerer le tout par un relais ou l'alim de l'arduino suffit?

        • Partager sur Facebook
        • Partager sur Twitter
          11 mai 2014 à 14:25:29

          De là à faire varier un rétroéclairage, c'est vraiment que ça consomme beaucoup.

          Beaucoup trop pour ce que peut délivrer l'alimentation de l'arduino.

          Donc comme tu l'as dis, il te faut que la sirène soit alimentée par autre chose que l'alimentation arduino.

          Libre à toi de choisir le moyen que tu préfères : soit un relais, soit un bon transistor.

          • Partager sur Facebook
          • Partager sur Twitter
            12 mai 2014 à 22:09:22

            ok merci de la réponse, je pense que je vais choisir l'option du transistor, plus simple a réalisé et moins encombrant. par contre comment je calcule la valeur du transistor que je doit prendre histoire de ne pas le voir cramer a la première utilisation
            • Partager sur Facebook
            • Partager sur Twitter
              12 mai 2014 à 22:21:39

              La première chose à faire, c'est de mesurer le courant dont tu as besoin.

              Donc tu branches directement ta sirène sur le 4.5V avec un ampèremètre en série et tu mesure le courant.

              Une fois que tu connais ça, tu prends un transistor capable de faire passer ce courant (en gardant une bonne marge si tu ne veux pas qu'il chauffe) et ça ira ;)

              • Partager sur Facebook
              • Partager sur Twitter
                14 mai 2014 à 20:48:27

                ok merci beaucoup je reviendrais sur le forum pour un autre projet qui n'a rien a voir avec l'airsoft mais qui reste tout aussi passionnant.

                • Partager sur Facebook
                • Partager sur Twitter
                  29 mai 2014 à 22:10:42

                  rebonjour, j'ai fini le montage définitif du circuit électronique et j'ai branché la prise usb (récupéré sur une carte mère d'ordi portable)et je me retrouve avec un prob au niveau fonctionnement. je m'explique mon contacteur déplacement fonctionne, celui d'ouverture aussi mais au niveau de la clé usb ca ne fonctionne pas, la bombe passe directement en "état detonated" comme si il me reconnaissait pas la clé usb. lors de mes tests j'ai utilisé un micro switch( bouton poussoir NO) et cela marchait trés bien (je n'avais pas encore la prise usb femelle pour le test).  je vous avoue que la je sèche, j'ai testé la prise usb male et femelle le courant passe sans problème, j'ai donc modifié le code sans succès mais comme il fonctionnait avec le micro switch je ne vois pas pourquoi il devrai être modifié, autre hypothèse la resistance soudée a la prise usb gène le passage de l'information? mais j'ai fais comme sur les micros switchs qui eux fonctionnent bien donc je cherche un peut d'aide. merci d'avance.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 mai 2014 à 22:17:41

                    Une petit photo ou un schéma pour comparer ce que donne ton montage avec le microswitch et avec la clef USB serait bienvenue parce que là, ton problème est tout simplement incompréhensible.

                    Et surtout, explique nous comment tu t'y ai pris pour raccorder cette prise USB à ton arduino.

                    -
                    Edité par lorrio 29 mai 2014 à 22:18:30

                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 mai 2014 à 0:45:47

                      alors pour le raccordement de la clé usb j'ai tout simplement branché a l'identique des micro switch c.a.d. un coté a la masse et l'autre sur la sortie 13 comme indiqué dans le programme. pour le câblage de la prise usb j'ai tout simplement soudé un fil pour ponter le + et le - de la prise (1ere et 4eme broche de la prise mâle uniquement) et donc un fil sur la première broche et un autre sur la dernière. de plus comme sur les micro switch j'ai soudé une résistance sur le fil relié a la masse, peut être que la résistance a une valeur trop élevé mais j'ai mis la même que sur les micro switch. c'est donc la que je ne comprend plus le truc. est ce que la clé usb peut être considéré comme un interrupteur? absente circuit ouvert et inséré circuit fermé?

                      là je sèche et je viens encore de tester ce soir les micro swiths fonctionnent mais pas la clé usb. le code doit-il être modifié?

                      j'essaie de faire des photos du montage et je les posterais au besoin.

                      merci d'avance.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 mai 2014 à 1:34:50

                        Une clef USB, ça ne se comporte ni comme un circuit ouvert, ni comme un circuit fermé.

                        A l’intérieur, c'est toute une électronique dont tu ne maitrises pas du tout le comportement.

                        Ce que tu devrais faire, c'est démonter ta clef (ou une vieille dont tu ne te sert plus) et souder un fil qui fait un court circuit entre les 4 broches de l'USB (VCC, D+, D-, GND).

                        Coté arduino, il te faudra relier une des broches du port femelle au GND, l'autre à l'arduino avec une pull-up sur 5V.

                        Lorsque la clef n'est pas branché, l'arduino va donc lire le 5V (HIGH) gràce à la pull-up.

                        Lorsque la clef sera branchée, le court-circuit que tu auras fais dedans va connecté le GND à l'arduino va lire LOW.

                        ==========

                        Ou alors, j'ai une autre idée qui permettrait de ne pas modifier la clef mais je ne suis pas sur qu'elle marche...

                        Dans tous les cas, il faudra modifier le programme car une simple I/O ne fonctionnera pas.

                        En théorie, en fonctionnement normale, une clef USB consomme du courant et c'est cette consommation qu'il faudrait détecter.

                        Pour le branchement, c'est assez simple :

                        VCC_arduino ====> résistance 10 ohm ====> VCC_USB
                        
                        GND_arduino ============================> GND_USB

                        Si la clef n'est pas branchée, alors il n'y a pas de courant et VCC_USB = 5V

                        Si la clef est branchée et consomme 100mA, la résistance va avoir une chute tension de 10*0.1=1V et VCC_USB = 4V.

                        Il suffit alors de permettre à l'arduino de mesurer VCC_USB gràce à une pin ANA et c'est gagné ;)

                        Le montage devient alors :

                        VCC_arduino ====> résistance 10 ohm ====++====> VCC_USB
                                                                ||
                        ANA_arduino <===========================++
                           
                        GND_arduino ==================================> GND_USB

                        Bien sur, la résistance de 10 ohm est à adaptée en fonction de la consommation de ta clef USB.

                        SI ta clef consomme beaucoup, il faudra surement mettre une résistance plus faible.

                        Si ta clef consomme peu, il faudra surement mettre une résistance plus forte.

                        Et dans tous les cas, mondifier le programme pour faire des analogRead avec comparaison de seuil et non des digitalRead.

                        -
                        Edité par lorrio 31 mai 2014 à 1:50:34

                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 mai 2014 à 13:07:05

                          j'ai oublié de dire que ma clé usb mâle c'est en fait le coté usb d'un câble iphone qui était coupé donc en principe ça ne doit rien consommer, je pensait utiliser la clé pour fermer le circuit et donc le passer en low, comme les micro switch qui sont appuyé, le courant passe, (en état low) et quand on ouvre ou que l'on déplace la mallette ils sont relaché et le courant ne passe plus (en état high).

                          la clé usb servirais de ce fait comme un 3eme interrupteur, absente circuit ouvert (état high), présente circuit fermé(état low).

                          est-ce possible ou faut-il que je fasse comme tu as dit et que je fasse un pull-up?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 mai 2014 à 14:31:48

                            Alors là, je ne te suis plus du tout ...

                            Sans schéma de câblage (même sous paint, c'est pas grave) et/ou photo du montage, impossible de t'en dire d'avantage.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              31 mai 2014 à 15:39:12

                              voila le shema de mon montage actuel si ca peut aider.

                              -
                              Edité par freeman832210 1 juin 2014 à 10:43:23

                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 juin 2014 à 20:20:32

                                Donc si je comprends bien, 2 fils vers la prise USB :

                                l'un connecté sur une pin INPUT de l'arduino

                                l'autre connecté sur GND au travers d'une résistance

                                Mais comment à tu branché ça sur ta prise USB (quels pins ?) et quelle genre de clef utilise tu ?

                                ==========

                                Au passage, j'en profites pour dire que ce forum ne génère pas d'alerte lors de l'édition d'un message donc si tu ne veux pas à nouveau perdre 3 ou 4 jours à attendre, poste un message à la place de edit.

                                -
                                Edité par lorrio 5 juin 2014 à 20:22:31

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 juin 2014 à 21:21:19

                                  ok pour le délai j'avais compris mais je suis pas trop pressé je prépare le projet pour septembre. oui effectivement c'est le cas. j'ai soudé un fil sur le premier et le dernier pin de la prise et idem sur la clé qui est une prise usb d'un cable de syncro iphone( qui etait coupé je précise). je suis aussi en train de me demander si la valeur de la résistance n'as pas un effect sur la détection par l'arduino?

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 juin 2014 à 21:35:31

                                    En effet, c'est assez étrange ton montage ...

                                    Normalement, on utilise un pull up avec court-circuit au GND.

                                    EN clair, que ce soit pour les bouton ou ta clef USB, tu devrais faire ce montage :

                                    2 fils qui partent du bouton :

                                    - le premier relié directement au GND

                                    - le second reliée à l'arduino et une résistance (et l'autre bout de la résistance sur VDD).

                                    ET éventuellement un condensateur pour supprimer les rebonds.

                                    Bref, ça donne ça :

                                    Lorsque le bouton est relaché, arduino lit HIGH.

                                    Lorque le bouton est enfoncé, arduino lit LOW.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      5 juin 2014 à 21:43:06

                                      (C'est marrant il me dit quelque chose ce schéma :-° :D )

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Retrouvez moi sur mon blog et ma chaine Youtube !

                                        5 juin 2014 à 22:20:42

                                        ok mon montage n'est pas vraiment correct mais comme j'ai beaucoup de mal a comprendre ce genre de schéma du coup je vois pas trop comment brancher le tout mais si je comprend bien ce que tu veut dire( et a ma pauvre compréhension du schéma) sur mon fil qui est relié à la broche dédié de l'arduino (dans mon cas  broche 6,7 et 8) doit être aussi relié a une résistance qui est elle même relié au +5V est-ce bien ça?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          5 juin 2014 à 22:25:59

                                          C'est pourtant simple à comprendre, y'a qu'à suivre les fils.

                                          De la broche 7 arduino, tu vas à une pin du bouton en faisant un détours par une des pin de la résistance.

                                          Ensuite, tu relies l'autre pin de la résistance au VDD.

                                          Et pour finir, tu relies l'autre pin du bouton au GND.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            9 juin 2014 à 2:09:25

                                            bon j'ai modifié mon montage pour faire comme tu l'as dis et j'ai gagné en rapidité de reaction sur les deux switch mais pour la clé ca ne marche pas . et ca ne marche pas non plus si je remplace la clé par un BP .
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              9 juin 2014 à 7:53:56

                                              Donc si je comprends bien, tu as branché ta brise USB :

                                              - sur GND d'un coté

                                              - sur l'arduino avec pull-up de l'autre coté

                                              Et lorsque tu mets un BP à la place, ça ne marche pas ???

                                              ==========

                                              Là, ce n'est pas vraiment normal !

                                              Essayes de regardé si tu ne t'es pas trompé de pin sur l'arduino ou si tu n'as pas un fil mal connecté.

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                9 juin 2014 à 17:31:27

                                                j'ai tout vérifié, pas de mauvaise connexion sur les éléments, les deux switch fonctionnent, mais pas la clé.

                                                j'avais modifié une ligne de code pour un essai et c'était une erreur de ma part, j'ai remis comme il faut et la clé marche. mais du coup j'ai le micro swith du contacteur déplacement qui ne fonctionne plus, j'inverse les switchs l'un et l'autre fonctionne sur la sortie 6 mais l'un comme l'autre ne fonctionnent pas sur la sortie 7 (est-ce possible qu'elle soit grillé?) j'ai donc essayé sur une autre sortie pour voir (en changeant le pin dans le code bien sur) et ça ne marche pas non plus......erreur dans le code? mais je vois pas où.

                                                donc maintenant j'ai un switch qui marche, une clé qui marche et un switch qui marche pas.je ne comprend plus rien.

                                                je remet ici le code mis a jour. si il y a une erreur dedans ca doit concerner les switchs (ligne 212 à 222)

                                                /*programme bombe airsoft avec compte a rebours 
                                                *contacteurs anti-soulevement et anti ouverture
                                                *et prise piratage, activation et desactivation par code.
                                                *programme trouvé sur different sites et modifié par Freeman83
                                                *avec un merci a PIC-PAC 
                                                */
                                                
                                                // Déclaration de la librairie :
                                                #include <LiquidCrystal.h>
                                                #include <Keypad.h> // inclusion de la librairie pour clavier matriciel 
                                                #include <ShiftLCD.h>//inclusion de la librairie pour l'utilisation du shift register 8 bit 74HC595
                                                ShiftLCD lcd(10, 12, 11);//definition des broches pour le lcd
                                                
                                                /* initialise la librairie en précisant les sorties utilisées
                                                * Les connexions sont les suivantes :
                                                * 74HC595 broche 8 connecté a la masse
                                                * 74HC595 broche 10 connecté au +5v
                                                * 74HC595 broche 11 connecté a la broche 12 de l'arduino R3
                                                * 74HC595 broche 12 connecté a la broche 11 de l'arduino R3
                                                * 74HC595 broche 13 connecté a la masse
                                                * 74HC595 broche 14 connecté a la broche 10 de l'arduino R3
                                                * 74HC595 broche 16 connecté au +5v
                                                * 74HC595 broches 4 et 5 sont deux sorties possibles, broche 9 n'est pas utilisé
                                                * LCD broche RS connectée à la broche    QH/7 du 74HC595
                                                * LCD broche Enable connecté à la broche QG/6 du 74HC595
                                                * LCD broche D4 connectée à la broche    QD/3  du 74HC595
                                                * LCD broche D5 connectée à la broche    QC/2  du 74HC595
                                                * LCD broche D6 connectée à la broche    QB/1  du 74HC595
                                                * LCD broche D7 connectée à la broche    QA/15 du 74HC595
                                                * LCD broche R/W connectée à la masse
                                                * LCD broche D0, D1, D2, D3 connecté à la masse
                                                * Potentiomètre 10K :une broche à +5V l’autre à la masse
                                                * celle du milieu à la broche LCD VO 
                                                * clavier broche C4 connectée a la broche 2 
                                                * clavier broche C3 connectée a la broche 3
                                                * clavier broche C2 connectée a la broche 4
                                                * clavier broche C1 connectée a la broche 5
                                                * clavier broche L4 connectée a la broche A2
                                                * clavier broche L3 connectée a la broche A3
                                                * clavier broche L2 connectée a la broche A4
                                                * clavier broche L1 connectée a la broche A5
                                                *contacteur couvercle connecté a la broche 6 de l'arduino R3
                                                *contacteur déplacement connecté a la broche 7 de l'arduino R3
                                                *clé USB connecté a la broche 8 de l'arduino R3
                                                *buzzer connecté a la broche 13 de l'arduino R3
                                                */
                                                
                                                
                                                //--- Constantes utilisées avec le clavier 4x4
                                                const byte LIGNES = 4; // 4 lignes
                                                const byte COLONNES = 4; //4 colonnes
                                                
                                                //--- Définition des touches 
                                                char touches[LIGNES][COLONNES] = {
                                                  {'1','2','3','A'},
                                                  {'4','5','6','B'},
                                                  {'7','8','9','C'},
                                                  {'*','0','#','D'}
                                                };
                                                
                                                int contacteur_couvercle = 6;
                                                int contacteur_deplacement = 7;
                                                int cle_usb = 8;
                                                int speakerpin = 13;
                                                int L1 = A5;
                                                int L2 = A4;
                                                int L3 = A3;
                                                int L4 = A2;
                                                int C1 = 5;
                                                int C2 = 4;
                                                int C3 = 3;
                                                int C4 = 2;
                                                
                                                // tableaux de lignes et colonnes
                                                byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
                                                byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier
                                                
                                                
                                                Keypad keypad = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                                                
                                                //Defini tous les etats de la bombe 
                                                #define READY 0
                                                #define ARMED 1
                                                #define DISARMED 2
                                                #define DETONATED 3
                                                #define speakerPin 13
                                                int etat1; //etat du contacteur couvercle
                                                int etat2; //etat du contacteur deplacement
                                                int etat3; //etat de la cle usb
                                                int second=30, minute=1, hour=0; // declare time variables
                                                int bombState=0; //0 = Ready, 1 = Armed, 2 = Disarmed, 3 = detonated
                                                int repeat=0;//flag to prevent repeat of getArmCode();
                                                int repeatAdm=0; //flag to prevent repeat of getAadminCode();
                                                int repeatDisarm=0;//flag to prevent repeat of getDisarmCode();
                                                int repeatBuzzer=0;//flag to prevent buzzer from running multiple times.
                                                int repeatTimerEdit=0;//flag to prevent repeat of timer edit function
                                                //int speakerPin = 13;//broche de connection du buzzer.
                                                int blinkArmed = 0;  // flag for blink text
                                                int blinkDisarmed = 0;  // flag to blink disarmed msg
                                                int nbBlinkDisarmed = 6;  // flag for number of blink disarmed msg (real number of blink = nbBlinkDisarmed / 2)
                                                long previousTime = 0;//holds previous time in ms
                                                long previousDelay = 0;//holds previous time in ms since buzzer was active
                                                long interval = 60000;//60 second delay
                                                
                                                char hour_str[4]; // For Convert int in char
                                                char minute_str[4]; // For Convert int in char
                                                char second_str[4]; // For Convert int in char
                                                char timeInt_str[0];  // For Convert int in char
                                                char newcode_str[0];
                                                char newarmcode_str[0];
                                                char newdisarmcode_str[0];
                                                
                                                
                                                char ArmCode[] = "123456";//code pour armer la bombe
                                                char disarmCode[] = "123456";//code pour desarmer la bombe
                                                char adminCode[] = "AD9514";//code administrateur pour entrer dans le menu
                                                
                                                char ENTER_KEY = '#';
                                                char CANCEL_KEY = '*';//stores the cancel key variable.
                                                char timeSetKey = '*';//touche a presser pour entrer le code.
                                                
                                                
                                                
                                                void setup()
                                                {lcd.begin(16, 2);
                                                                lcd.clear();
                                                                lcd.setCursor(1, 0 );
                                                                lcd.print( "Bombe  Factice" );
                                                                lcd.setCursor( 3, 1 );
                                                                lcd.print( "GOOD GAME" );
                                                                delay(3000);
                                                                lcd.setCursor( 1, 0 );
                                                                lcd.print( "Bombe  Factice" );
                                                                lcd.setCursor( 3, 1 );
                                                                lcd.print( "BY FREEMAN" );
                                                                delay(3000);
                                                                lcd.clear();
                                                                
                                                  ////backlightOn();
                                                  //blinkCursor();
                                                  //stopVscroll();
                                                  
                                                  pinMode(speakerPin, OUTPUT);//definir l'etat de broche de sortie pour le buzzer
                                                  pinMode(contacteur_couvercle, INPUT); //definir l'etat de la broche pour le contacteur couvercle.
                                                  pinMode(contacteur_deplacement, INPUT); //definir l'etat de la broche pour le contacteur deplacement.
                                                  pinMode(cle_usb, INPUT); //definir l'etat de la broche pour la clé usb.
                                                  
                                                  
                                                }
                                                
                                                
                                                
                                                
                                                
                                                void loop()
                                                
                                                {
                                                   
                                                
                                                  switch (bombState) {
                                                lcd.clear();
                                                                
                                                    /***********************************************************
                                                     *Ready state prepares bomb, waits for arm code to be input
                                                     *
                                                     ************************************************************/
                                                  case READY:
                                                    int resultOfGetArmCode;
                                                    lcd.clear();
                                                    lcd.setCursor(0, 0 );
                                                    delay(100);
                                                    //showCursor();
                                                    //blinkCursor();
                                                
                                                    lcd.print("Enter ArmCode :"); //Notification du statut.
                                                    digitalWrite(speakerPin, HIGH);
                                                    resultOfGetArmCode = getArmCode();
                                                
                                                    if (resultOfGetArmCode == 1) {
                                                      lcd.clear();
                                                      lcd.setCursor(0, 0 );
                                                      delay(100);
                                                      lcd.print("Correct");
                                                      delay(500);
                                                      lcd.clear();
                                                      bombState = ARMED; //debut du compte a rebours
                                                
                                                    }//Close getArmCode(); = true
                                                
                                                    if (resultOfGetArmCode == 0) {  //si le code est faux, l'ecran affiche "incorrect"
                                                      tryAgainMsg();        
                                                
                                                   }// Close getArmCode(); = false.
                                                
                                                    break;
                                                
                                                    /**************************************************
                                                     *Armed state. Countdown starts, waits for pushbutton to be pressed.
                                                     *If button is pressed, wait for code from keypad.
                                                     ***************************************************/
                                                
                                                  case ARMED:
                                                    {  
                                                      char disarmKey = keypad.getKey();
                                                      
                                                      
                                                     etat1 = digitalRead(contacteur_couvercle); 
                                                     etat2 = digitalRead(contacteur_deplacement);
                                                     etat3 = digitalRead(cle_usb);
                                                     
                                                     
                                                        if (etat3 == LOW) //si la cle usb est inseré les contacteurs couvercle et deplacement sont consideré comme appuyé
                                                        etat1 = LOW;
                                                        etat2 = LOW; 
                                                          
                                                          
                                                        if (etat1 == HIGH)
                                                        bombState = DETONATED; //si le contacteur couvercle est relaché la bombe explose
                                                       
                                                
                                                        if (etat2 == HIGH)
                                                        bombState = DETONATED; //si le contacteur de deplacement est relaché la bombe explose 
                                                          
                                                
                                                      if (disarmKey == '#') {
                                                       char reslutOfDisarm;
                                                        lcd.clear();    
                                                        lcd.setCursor(0, 0 );
                                                
                                                        delay(100);
                                                        lcd.print("Enter DisarmCode"); //si la touche de desarmement # est pressée, l'utilisateur peux entrer le code.
                                                        reslutOfDisarm = getDisarmCode();
                                                
                                                        if (reslutOfDisarm == true) {  
                                                          lcd.clear();
                                                          bombState = DISARMED; //la bombe passe a l'etat desarmé.
                                                          break;
                                                        } //close getDisarmCode(); = True
                                                
                                                
                                                        if (reslutOfDisarm == false) {
                                                          tryAgainMsg();
                                                
                                                          if (second >= 15) {
                                                            second = second - 15;
                                                          }
                                                
                                                         else {
                                                            if (minute == 0 && hour == 0) {
                                                              second=1; //detonate.
                                                            }
                                                            if (minute > 0) {
                                                              second = 60 - (15 - second);
                                                              minute = minute - 1;
                                                           }
                                                
                                                            if (hour > 0 && minute == 0) {
                                                              second = 60 - (15 - second);
                                                              minute = 59;
                                                              hour = hour - 1 ;
                                                            }
                                                          }    
                                                        } //close getDisarmCode(); = false  
                                                     } //close if
                                                
                                                    }
                                                    countdown(); //si la touche de desarmement # n'est pas pressée, continue le compte a rebours.
                                                
                                                    break;
                                                
                                                    /**************************************************************
                                                     *DISARMED. Counter stopped, displays "bomb disarmed"
                                                     *
                                                     **************************************************************/
                                                
                                                  case DISARMED:
                                                    int blinkDisarmFlag;
                                                    blinkDisarmFlag = 0;
                                                    
                                                    //hideCursor();
                                                
                                                    for (nbBlinkDisarmed; nbBlinkDisarmed > 0; nbBlinkDisarmed--){  // blink msg
                                                      if (blinkDisarmFlag == 1){  
                                                        lcd.setCursor(1, 0 );
                                                        lcd.print("BOMBE DESARMEE"); //indique le statut bombe desarmée.
                                                        lcd.setCursor(1, 1 );
                                                        lcd.print("GOOD JOB TEAM");
                                                        delay(5000);
                                                        lcd.clear();
                                                        lcd.setCursor(1, 0 );
                                                        lcd.print("GOOD JOB TEAM"); //bomb has been disarmed, inform user.
                                                        lcd.setCursor(1, 1 );
                                                        lcd.print("BOMBE DESARMEE");
                                                        delay(5000);
                                                      
                                                
                                                  asm volatile ("  jmp 0");
                                                       blinkDisarmFlag = 0;
                                                        
                                                      }
                                                      else{
                                                        lcd.clear();
                                                        delay(1000);        
                                                        blinkDisarmFlag = 1;
                                                      }  
                                                    } // end blink
                                                    break;
                                                
                                                    /*******************************************************
                                                     *Detonated. activate buzzer for 8 beeps, then 1 long.
                                                     *Print "Have A Nice Day. to LCD.
                                                     ********************************************************/
                                                
                                                  case DETONATED:
                                                    if (repeatBuzzer == 0) { //make sure buzzer for loop has not already been run.
                                                
                                                      digitalWrite(speakerpin, LOW);//declencher le buzzer
                                                      lcd.clear();
                                                      lcd.setCursor(3, 0 );
                                                      lcd.print("EXPLOSION"); //loop message informing user of bomb detonation.
                                                      //lcd.setCursor(0, 1 );
                                                      //lcd.print("Have A Nice Day"); //loop message informing user of bomb detonation.
                                                      delay(5000);//attendre 5 secondes
                                                      digitalWrite(speakerpin, HIGH);//arreter le buzzer
                                                      repeatBuzzer = 1;//set flag to prevent code from looping again.
                                                    }
                                                
                                                    else {
                                                      //lcd.setCursor(0, 0 );
                                                      //lcd.print("EXPLOSION"); //loop message informing user of bomb detonation.
                                                      lcd.setCursor(1, 1 );
                                                      lcd.print("Have A Nice Day"); //loop message informing user of bomb detonation.
                                                      delay(9000);
                                                      
                                                
                                                  asm volatile ("  jmp 0");
                                                
                                                   }
                                                
                                                  }//closes switch
                                                }//closes loop
                                                /*void software_Reset()
                                                {
                                                }*/
                                                /***********************************************************
                                                 * Main countdown timer                                     *
                                                 *                 countdown()                              *
                                                 ************************************************************/
                                                void countdown(){
                                                
                                                 static unsigned long lastTick = 0; // set up a local variable to hold the last time we decremented one second
                                                  static unsigned long currentMillis = 0;
                                                  // (static variables are initialized once and keep their values between function calls)
                                                
                                                  // decrement one second every 1000 milliseconds
                                                  if (second > 0) {
                                                    if (millis() - lastTick >= 1000) {
                                                      lastTick = millis();
                                                      second--;
                                                      serialOutput();
                                                    }
                                                  }
                                                
                                                  // decrement one minute every 60 seconds
                                                  if (minute > 0) {
                                                    if (second <= 0) {
                                                      minute--;
                                                      second = 60; // reset seconds to 60
                                                
                                                    }
                                                  }
                                                
                                                  // decrement one hour every 60 minutes
                                                  if (hour > 0) {
                                                    if (minute <= 0) {
                                                      hour--;
                                                      minute = 60; // reset minutes to 60
                                                    }//closes if
                                                  }//closes if
                                                
                                                
                                                  //the code below beeps the siren once every minute.
                                                  currentMillis = millis();
                                                  if (currentMillis - previousTime > interval)
                                                  {
                                                    previousTime = currentMillis;
                                                    previousDelay = currentMillis;
                                                
                                                    digitalWrite(speakerPin, LOW);//turn on buzzer
                                                  }
                                                
                                                  if (currentMillis - previousDelay > 100) {//100ms chirp duration
                                                    digitalWrite(speakerPin, HIGH);//turn off buzzer
                                                  }
                                                } //close countdown();
                                                
                                                
                                                /***********************************************************************
                                                 *                          getArmCode();                               *
                                                 *  Grabs the code to arm the bomb from the keypad.                     *
                                                 *                                                                      *
                                                 ************************************************************************/
                                                boolean getArmCode(){
                                                  // returns true when all PW keys are pressed in sequence
                                                  // returns false when number of keys in pW pressed but don't exactly match the PW
                                                  // CANCEL_KEY erases all previous digits input
                                                  int count=0;  // how many keys we have
                                                  int matchCount=0;  // how many keys match
                                                  lcd.setCursor(0, 1 );
                                                
                                                  if(repeat == 0){
                                                
                                                    for(count=0, matchCount=0; count < sizeof(ArmCode)-1; count++){
                                                      char key;
                                                      char key_str[0];  // Define as string
                                                
                                                      do{
                                                        key = keypad.getKey();
                                                        delay (100);
                                                      }
                                                      while(key == '\0');
                                                
                                                      key_str[0] = key;
                                                      lcd.print(key_str);
                                                
                                                      if (key == timeSetKey && repeatTimerEdit == 0){
                                                // ***************** MOD HERE *********************   ============> Random codes for arm & disarm    
                                                       timerSet();
                                                        return 2;
                                                     }      
                                                
                                                     if(key == ArmCode[count]) {
                                                        matchCount++;
                                                      }
                                                
                                                      else if(key == CANCEL_KEY){
                                                        count=0;
                                                        matchCount=0;
                                                        return 0;
                                                      }
                                                    }//close for loop
                                                 }//close repeat flag check
                                                
                                                  // here when the same number of keys pressed as characters in the PW
                                                  if(matchCount == count) {
                                                    repeat=1;
                                                    return 1;
                                                  }
                                                
                                                  else {
                                                    return 0;
                                                  }
                                                }//close getArmCode();
                                                
                                                
                                                /**********************************************************************
                                                 *                   getDisarmCode();                                  *
                                                 *    Gets disarm code from keypad.                                    *
                                                 *                                                                     *
                                                 ***********************************************************************/
                                                boolean getDisarmCode(){
                                                
                                                  // returns true when all PW keys are pressed in sequence
                                                  // returns false when number of keys in pW pressed but don't exactly match the PW
                                                  // CANCEL_KEY erases all previous digits input
                                                
                                                  int count=0;  // how many keys we have
                                                  int matchCount=0;  // how many keys match
                                                  long disarmTime = millis()+9000L;//7000 instead of 15000 b/c of added delays making total 30s
                                                
                                                  lcd.setCursor(0, 1 );
                                                  //showCursor();
                                                  //blinkCursor();
                                                
                                                  if(repeatDisarm == 0){
                                                
                                                    for(count=0, matchCount=0; count < sizeof(disarmCode)-1; count++){
                                                      char key;
                                                      char key_str[0];  // Define as string
                                                
                                                      do{
                                                        if(disarmTime < millis()){ //if 15 seconds have passed, bail out
                                                          break;
                                                        }
                                                
                                                        key = keypad.getKey();
                                                       delay (100);      
                                                     }
                                                      while(key == '\0');
                                                
                                                      key_str[0] = key;
                                                      lcd.print(key_str);
                                                
                                                      if(key == disarmCode[count]) {
                                                        matchCount++;
                                                      }
                                                
                                                      else if(key == CANCEL_KEY){
                                                        count=0;
                                                        matchCount=0;
                                                        return false;
                                                      }
                                                
                                                      if(disarmTime < millis()) {
                                                        return false;
                                                        break;
                                                     }
                                                
                                                    }// close for loop
                                                  } //close repeat flag check
                                                
                                                    // here when the same number of keys pressed as characters in the PW
                                                  if(matchCount == count) {
                                                    repeatDisarm=1;
                                                    return true;
                                                  }
                                                  else {
                                                    return false;
                                                
                                                  }
                                                }//close getDisarmCode();
                                                
                                                
                                                /**********************************************************************
                                                 *                   getAdminCode();                                  *
                                                 *    Gets admin code from keypad.                                    *
                                                 *                                                                     *
                                                 ***********************************************************************/
                                                boolean getAdminCode(){
                                                
                                                  // returns true when all PW keys are pressed in sequence
                                                  // returns false when number of keys in pW pressed but don't exactly match the PW
                                                  // CANCEL_KEY erases all previous digits input
                                                
                                                  int count=0;  // how many keys we have
                                                  int matchCount=0;  // how many keys match
                                                
                                                  lcd.setCursor(0, 1 );
                                                
                                                
                                                  for(count=0, matchCount=0; count < sizeof(adminCode)-1; count++){
                                                    char key;
                                                    char key_str[0];  // Define as string
                                                
                                                    do{
                                                      key = keypad.getKey();
                                                      delay (100);
                                                    }
                                                    while(key == '\0');
                                                
                                                //    itoa(key, key_str,10);
                                                    key_str[0] = key;
                                                    lcd.print(key_str);
                                                  //  lcd.print(itoa(key, key_str,16));
                                                
                                                
                                                    if(key == adminCode[count]) {
                                                      matchCount++;
                                                    }
                                                
                                                    else if(key == CANCEL_KEY){
                                                      count=0;
                                                      matchCount=0;
                                                      return false;
                                                    }
                                                
                                                  }// close for loop
                                                
                                                  // here when the same number of keys pressed as characters in the PW
                                                  if(matchCount == count) {
                                                    return true;
                                                  }
                                                  else{
                                                    return false;
                                                  }
                                                  // Do nothing if pwd is false / Parent function send tryAgin msg
                                                }//close getAdminCode();
                                                
                                                
                                                /*********************************************************************
                                                 *                        Timer edit function                         *
                                                 *                                                                    *
                                                 *                                                                    *
                                                 **********************************************************************/
                                                void timerSet(){
                                                  lcd.clear();
                                                  lcd.print("Enter AdminCode");
                                                  char resultOfGetAdmCode;
                                                
                                                  resultOfGetAdmCode = getAdminCode();
                                                
                                                  if (resultOfGetAdmCode == true){
                                                    char timeInt;
                                                    char newcode;
                                                    char newarmcode;
                                                    char newdisarmcode;
                                                    char menupage;
                                                    int newadmincode;
                                                    lcd.clear();  
                                                    lcd.setCursor(0, 0 );
                                                    lcd.print("1.Admin 2.Time");
                                                    lcd.setCursor(0, 1 );
                                                    lcd.print("3.Arm 4.Disarm");
                                                    do{
                                                      menupage = keypad.getKey();
                                                    }
                                                    while(menupage == '\0' || menupage == '*' || menupage == '0' || menupage > 52);
                                                    
                                                    switch(menupage) {
                                                      case '1': // Edit admin code
                                                        lcd.clear();
                                                        lcd.setCursor(0, 0 );
                                                        lcd.print("new admin code :");
                                                        lcd.setCursor(0, 1 );
                                                        do{
                                                           newcode = keypad.getKey();
                                                           delay (100);
                                                        }
                                                       while(newcode == '\0');
                                                       newcode_str[0] = newcode;
                                                       lcd.print(newcode_str);
                                                       adminCode[0] = newcode_str[0];
                                                       newadmincode = (newcode - '0') * 10;//get first digit and convert to int
                                                       do{
                                                       newcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newcode == '\0');
                                                        newcode_str[0] = newcode;
                                                        lcd.print(newcode_str);
                                                        adminCode[1] = newcode_str[0];
                                                        newadmincode = (newcode - '0') + newadmincode;//get second digit.
                                                        do{
                                                       newcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newcode == '\0');
                                                        newcode_str[0] = newcode;
                                                        lcd.print(newcode_str);
                                                        adminCode[2] = newcode_str[0];
                                                        newadmincode = (newcode - '0') + newadmincode;//get 3rd digit.
                                                        do{
                                                       newcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newcode == '\0');
                                                        newcode_str[0] = newcode;
                                                        lcd.print(newcode_str);
                                                        adminCode[3] = newcode_str[0];
                                                        newadmincode = (newcode - '0') + newadmincode;//get 4th digit.
                                                        do{
                                                       newcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newcode == '\0');
                                                        newcode_str[0] = newcode;
                                                        lcd.print(newcode_str);
                                                        adminCode[4] = newcode_str[0];
                                                        newadmincode = (newcode - '0') + newadmincode;//get 5th digit.
                                                        do{
                                                       newcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newcode == '\0');
                                                        newcode_str[0] = newcode;
                                                        lcd.print(newcode_str);
                                                        adminCode[5] = newcode_str[0];
                                                        newadmincode = (newcode - '0') + newadmincode;//get 6th digit.
                                                      
                                                         //newcode = 'L';
                                                 
                                                         
                                                          lcd.clear();
                                                          
                                                          lcd.setCursor(0, 0 );
                                                          lcd.print("NEW ADMINCODE");
                                                          lcd.setCursor(0, 1 );
                                                          lcd.print(adminCode);
                                                          delay(5000);
                                                          lcd.clear();
                                                        
                                                        break;
                                                        
                                                        case '3': // Edit armcode
                                                        lcd.clear();
                                                        lcd.setCursor(0, 0 );
                                                        lcd.print("new armcode :");
                                                        lcd.setCursor(0, 1 );
                                                        do{
                                                           newarmcode = keypad.getKey();
                                                           delay (100);
                                                        }
                                                       while(newarmcode == '\0');
                                                       newarmcode_str[0] = newarmcode;
                                                       lcd.print(newarmcode_str);
                                                       ArmCode[0] = newarmcode_str[0];
                                                       newarmcode = (newarmcode - '0') * 10;//get first digit and convert to int
                                                       do{
                                                       newarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newarmcode == '\0');
                                                        newarmcode_str[0] = newarmcode;
                                                        lcd.print(newarmcode_str);
                                                        ArmCode[1] = newarmcode_str[0];
                                                        newarmcode = (newarmcode - '0') + newarmcode;//get second digit.
                                                        do{
                                                       newarmcode = keypad.getKey();delay (100);
                                                        }
                                                        while(newarmcode == '\0');
                                                        newarmcode_str[0] = newarmcode;
                                                        lcd.print(newarmcode_str);
                                                        ArmCode[2] = newarmcode_str[0];
                                                        newarmcode = (newarmcode - '0') + newarmcode;//get 3rd digit.
                                                        do{
                                                       newarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newarmcode == '\0');
                                                        newarmcode_str[0] = newarmcode;
                                                        lcd.print(newarmcode_str);
                                                        ArmCode[3] = newarmcode_str[0];
                                                        newarmcode = (newarmcode - '0') + newarmcode;//get 4th digit.
                                                        do{
                                                       newarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newarmcode == '\0');
                                                        newarmcode_str[0] = newarmcode;
                                                        lcd.print(newarmcode_str);
                                                        ArmCode[4] = newarmcode_str[0];
                                                        newarmcode = (newarmcode - '0') + newarmcode;//get 5th digit.
                                                        do{
                                                       newarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newarmcode == '\0');
                                                        newarmcode_str[0] = newarmcode;
                                                        lcd.print(newarmcode_str);
                                                        ArmCode[5] = newarmcode_str[0];
                                                        newarmcode = (newarmcode - '0') + newarmcode;//get 6th digit.
                                                      
                                                         //newcode = 'L';
                                                 
                                                         
                                                          lcd.clear();
                                                          
                                                          lcd.setCursor(0, 0 );
                                                          lcd.print("NEW ARMCODE");
                                                          lcd.setCursor(0, 1 );
                                                          lcd.print(ArmCode);
                                                          delay(5000);
                                                          lcd.clear();
                                                        
                                                        break;
                                                        
                                                        case '4': // Edit disarmcode
                                                        lcd.clear();
                                                        lcd.setCursor(0, 0 );
                                                        lcd.print("new disarmcode :");
                                                        lcd.setCursor(0, 1 );
                                                        do{
                                                           newdisarmcode = keypad.getKey();
                                                        delay (100);
                                                      }
                                                       while(newdisarmcode == '\0');
                                                       newdisarmcode_str[0] = newdisarmcode;
                                                       lcd.print(newdisarmcode_str);
                                                       disarmCode[0] = newdisarmcode_str[0];
                                                       newdisarmcode = (newdisarmcode - '0') * 10;//get first digit and convert to int
                                                       do{
                                                       newdisarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newdisarmcode == '\0');
                                                        newdisarmcode_str[0] = newdisarmcode;
                                                        lcd.print(newdisarmcode_str);
                                                        disarmCode[1] = newdisarmcode_str[0];
                                                        newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get second digit.
                                                        do{
                                                       newdisarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newdisarmcode == '\0');
                                                        newdisarmcode_str[0] = newdisarmcode;
                                                        lcd.print(newdisarmcode_str);
                                                        disarmCode[2] = newdisarmcode_str[0];
                                                        newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 3rd digit.
                                                        do{
                                                       newdisarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newdisarmcode == '\0');
                                                        newdisarmcode_str[0] = newdisarmcode;
                                                        lcd.print(newdisarmcode_str);
                                                        disarmCode[3] = newdisarmcode_str[0];
                                                        newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 4th digit.
                                                        do{
                                                       newdisarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newdisarmcode == '\0');
                                                        newdisarmcode_str[0] = newdisarmcode;
                                                        lcd.print(newdisarmcode_str);
                                                        disarmCode[4] = newdisarmcode_str[0];
                                                        newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 5th digit.
                                                        do{
                                                       newdisarmcode = keypad.getKey();
                                                       delay (100);
                                                        }
                                                        while(newdisarmcode == '\0');
                                                        newdisarmcode_str[0] = newdisarmcode;
                                                        lcd.print(newdisarmcode_str);
                                                        disarmCode[5] = newdisarmcode_str[0];
                                                        newdisarmcode = (newdisarmcode - '0') + newdisarmcode;//get 6th digit.
                                                      
                                                         //newcode = 'L';
                                                 
                                                
                                                         lcd.clear();
                                                          
                                                          lcd.setCursor(0, 0 );
                                                          lcd.print("NEW DISARMCODE");
                                                          lcd.setCursor(0, 1 );
                                                          lcd.print(disarmCode);
                                                          delay(5000);
                                                          lcd.clear();
                                                        
                                                        break;
                                                        
                                                      case '2': // Timer
                                                        lcd.clear();
                                                       lcd.print("Enter xx Hours");
                                                        lcd.setCursor(0, 1 );
                                                        do{
                                                           timeInt = keypad.getKey();
                                                        }
                                                        while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
                                                        timeInt_str[0] = timeInt;
                                                        lcd.print(timeInt_str);
                                                  
                                                        hour = (timeInt - '0') * 10;//get first digit and convert to int
                                                        do{
                                                        timeInt = keypad.getKey();
                                                        }
                                                        while(timeInt == '\0');
                                                        timeInt_str[0] = timeInt;
                                                        lcd.print(timeInt_str);
                                                    
                                                        hour = (timeInt - '0') + hour;//get second digit.
                                                        delay(800);
                                                          lcd.clear();
                                                          timeInt = 'L';
                                                          // ------------------------------------------------------------------
                                                          lcd.print("Enter xx Minutes");
                                                          lcd.setCursor(0, 1 );
                                                          do{
                                                            timeInt = keypad.getKey();
                                                          }
                                                          while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
                                                          timeInt_str[0] = timeInt;
                                                          lcd.print(timeInt_str);
                                                      
                                                          while (timeInt < '0' || timeInt > '6'){
                                                            timeInt = keypad.getKey();
                                                          }
                                                          minute = (timeInt - '0') * 10;//get first digit and convert to int
                                                          do{
                                                            timeInt = keypad.getKey();
                                                          }
                                                          while(timeInt == '\0');
                                                          minute = (timeInt - '0') + minute;//get second digit.
                                                          timeInt_str[0] = timeInt;
                                                          lcd.print(timeInt_str);
                                                          delay(800);  
                                                         lcd.clear();
                                                          timeInt = 'L';
                                                          // ------------------------------------------------------------------
                                                          lcd.print("Enter xx Seconds");
                                                          lcd.setCursor(0, 1 );
                                                          do{
                                                            timeInt = keypad.getKey();
                                                          }
                                                          while(timeInt == '\0' || timeInt < '0' || timeInt > '6');
                                                          timeInt_str[0] = timeInt;
                                                          lcd.print(timeInt_str);
                                                      
                                                          while (timeInt < '0' || timeInt > '6'){
                                                            timeInt = keypad.getKey();
                                                          }
                                                          second = (timeInt - '0') * 10;//get first digit and convert to int
                                                          do{
                                                            timeInt = keypad.getKey();
                                                          }
                                                          while(timeInt == '\0');
                                                          second = (timeInt - '0') + second;//get second digit.
                                                          timeInt_str[0] = timeInt;
                                                          lcd.print(timeInt_str);
                                                          delay(800);    
                                                          lcd.clear();
                                                          timeInt = 'L';
                                                          lcd.print("Time set :");
                                                          lcd.setCursor(0, 1 );
                                                          itoa (hour, hour_str, 10);
                                                          itoa (minute, minute_str, 10);
                                                          itoa (second, second_str, 10);
                                                          lcd.print(hour_str);
                                                          lcd.print(":");
                                                          lcd.print(minute_str);
                                                          lcd.print(":");
                                                          lcd.print(second_str);
                                                         delay(2000);  
                                                         // ---------------------- Put randomize here --------------------------
                                                          repeatTimerEdit = 1;
                                                        }//end of getAdminCode == true
                                                      
                                                        if(resultOfGetAdmCode == false){
                                                         tryAgainMsg();
                                                         // Do nothing if pwd is false / Parent function send tryAgin msg
                                                        
                                                       }
                                                        lcd.clear();
                                                      }//end of timer edit function
                                                }
                                                
                                                
                                                
                                                /****************************************************************
                                                 *                     serialOutput();                           *
                                                 *    prints the values of the timer over the serial connection  *
                                                 *         and onto the LCD                                      *
                                                 *****************************************************************/
                                                void serialOutput() {
                                                
                                                  
                                                  itoa (hour, hour_str, 10);
                                                  itoa (minute, minute_str, 10);
                                                  itoa (second, second_str, 10);
                                                  
                                                
                                                  if(bombState != DISARMED){
                                                  
                                                   lcd.setCursor(0, 0 );
                                                    delay(20);
                                                    if (blinkArmed == 0){
                                                      lcd.print("!!   ARMED    !!");
                                                      blinkArmed=1;
                                                    }
                                                    else {
                                                      lcd.print("!!            !!");
                                                      blinkArmed=0;      
                                                    }
                                                    lcd.setCursor(0, 1 );
                                                    
                                                    lcd.print("Time = ");
                                                    if (hour <=9) {
                                                    lcd.print("0");
                                                    lcd.print(hour_str); // the hour, sent to the screen in decimal format
                                                    }
                                                    else{
                                                    lcd.print(hour_str);
                                                   }
                                                    lcd.print(":"); // a colon between the hour and the minute
                                                    if (minute <=9) {
                                                    lcd.print("0");
                                                    lcd.print(minute_str); // the minute, sent to the screen in decimal format
                                                    }
                                                    else{
                                                    lcd.print(minute_str);
                                                    }
                                                    lcd.print(":"); // a colon between the minute and the second
                                                    if (second <=9) {
                                                    lcd.print("0");
                                                    lcd.print(second_str); // the minute, sent to the screen in decimal format
                                                    }
                                                    else{
                                                      lcd.print(second_str);
                                                    }
                                                    //termination condition
                                                  }
                                                  if (second == 0 && minute == 0 && hour == 0) {
                                                    lcd.clear();
                                                    
                                                    bombState = DETONATED; //clear LCD and set bomb state to "detonated" when timer runs out
                                                  }
                                                
                                                  if (bombState == DISARMED) {
                                                    lcd.clear();
                                                 }
                                                }//close serialOutput();
                                                
                                                
                                                void tryAgainMsg(){
                                                  lcd.clear();
                                                  //hideCursor();
                                                  delay(100);        
                                                  lcd.print("T");
                                                  delay(150);
                                                  lcd.print("r");
                                                  delay(150);
                                                  lcd.print("y");
                                                  delay(150);        
                                                  lcd.print(" ");
                                                  delay(150);
                                                  lcd.print("a");
                                                  delay(150);          
                                                 lcd.print("g");
                                                  delay(150);
                                                  lcd.print("a");
                                                  delay(150);          
                                                 lcd.print("i");
                                                  delay(150);
                                                  lcd.print("n");
                                                  delay(150);
                                                  lcd.print(" ");
                                                  delay(150);
                                                  lcd.print("!");
                                                  delay(1000);  
                                                }
                                                
                                                void incorrectMsg(){
                                                  lcd.clear();
                                                  
                                                  delay(100);        
                                                  lcd.print("I");
                                                  delay(350);
                                                  lcd.print("n");
                                                  delay(350);
                                                  lcd.print("c");
                                                  delay(350);        
                                                  lcd.print("o");
                                                  delay(350);
                                                  lcd.print("r");
                                                  delay(350);          
                                                 lcd.print("r");
                                                  delay(350);
                                                  lcd.print("e");
                                                  delay(350);          
                                                 lcd.print("c");
                                                  delay(350);
                                                  lcd.print("t");
                                                  delay(1000);  
                                                }
                                                //END of bomb program.



                                                -
                                                Edité par freeman832210 9 juin 2014 à 17:36:13

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  9 juin 2014 à 19:11:45

                                                  Un problème qui revient souvent ... Pas de point virgule après un if !

                                                  Ainsi que l'obligation de mettre des accolade dès qu'il y a plus d'une instruction.

                                                  D'ailleurs, une bonne pratique consiste à TOUJOURS mettre des accolades (car ça évite ce genre de bug).

                                                  Et sinon, pour que ça marche, tu ferais mieux de faire le test de clef USB avant de faire les tests de détonation ...

                                                  // Test de clef USB avant les tests de détonnation
                                                  if (etat3 == LOW) { // Une accolade ouvrante ICI car 2 instructions
                                                      etat1 = LOW;
                                                      etat2 = LOW;
                                                  } // Une accolade fermante ICI
                                                  
                                                  // Test de détonnation n°1
                                                  if (etat1 == HIGH) // Pas de Point virgule ICI
                                                      bombState = DETONATED; // Une indentation ICI, ça fait plus propre
                                                  
                                                  // Test de détonnation n°2
                                                  if (etat2 == HIGH) // Pas de Point virgule ICI
                                                      bombState = DETONATED; // Une indentation ICI, ça fait plus propre



                                                          

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    9 juin 2014 à 19:15:10

                                                    Au passage, j'en profite pour faire une petite citation ...

                                                    Bref, deux problèmes que je t'avais déjà évoqué mais que tu n'as pas du tout corrigé.

                                                    lorrio a écrit:

                                                    Ligne 212, 213, 214 : il aurait été préférable de faire ce if AVANT de déclarer la bombe DETONATED parce que là, c'est un peu trop tard ^^

                                                    ==========

                                                    Ligne 204, 208, 211 et peut-être d'autre :  très probablement l'orginie de ton problème ... il ne faut JAMAIS mettre de point virgule après un if.

                                                    // Ecrire ceci :
                                                    if ( a == 2 );
                                                        b++;
                                                    
                                                    // Revient au même que écrire ceci :
                                                    if ( a == 2 ) {
                                                        // Rien;
                                                    }
                                                    b++;
                                                    
                                                    // Bref, dans tous les cas, b++ est exécuté


                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      9 juin 2014 à 22:42:19

                                                      lorrio a écrit:

                                                      Au passage, j'en profite pour faire une petite citation ...

                                                      Bref, deux problèmes que je t'avais déjà évoqué mais que tu n'as pas du tout corrigé.

                                                      lorrio a écrit:

                                                      Ligne 212, 213, 214 : il aurait été préférable de faire ce if AVANT de déclarer la bombe DETONATED parce que là, c'est un peu trop tard ^^

                                                      ==========

                                                      Ligne 204, 208, 211 et peut-être d'autre :  très probablement l'orginie de ton problème ... il ne faut JAMAIS mettre de point virgule après un if.

                                                      // Ecrire ceci :
                                                      if ( a == 2 );
                                                          b++;
                                                      
                                                      // Revient au même que écrire ceci :
                                                      if ( a == 2 ) {
                                                          // Rien;
                                                      }
                                                      b++;
                                                      
                                                      // Bref, dans tous les cas, b++ est exécuté



                                                      sans vouloir t'offenser si je me suis permis de remettre le code c'est parce que les problèmes que tu mentionnent on étés corrigé suite a ton intervention et le seul truc qu'il me manque d'après ce que tu dis sont les accolades sur la partie de test de la clé usb, ce que je vais m'empresser de rectifier, quand aux test ils attendront demain.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        17 septembre 2014 à 19:52:12

                                                        bonsoir,

                                                         pour faire suite a ce projet, tout est fonctionnel, j'ai même rajouter des bips pour marquer le décompte du temps.

                                                        je voulais savoir si je pouvais ajouter un 74hc595n a mon montage pour piloter un ensemble de led et leur appliquer une variation d'intensité, en sachant que j'en ai déja un pour l'écran, et que mes seules sorties encore dispo sont A0,A1 et 1,2(rx et tx)

                                                        il m'en faut 3 pour gerer le 74hc595n mais est-ce que je peut mélanger les sorties analogique et numériques, et est-ce que je peut utiliser les sorties RX et/ou TX.

                                                        merci d'avance.

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          17 septembre 2014 à 20:39:32

                                                          Il est tout a fait possible d'utiliser les pin Analogue en mode digital :

                                                          The analog input pins can be used as digital pins, referred to as A0, A1, etc.

                                                          Ce qui donne le code suivant :

                                                          pinMode(A0, OUTPUT);
                                                          digitalWrite(A0, LOW);

                                                          Il est aussi possible d'utiliser les pin 0 et 1 mais il ne sera alors plus possible d'utiliser le Serial (chose qui ne devrait pas te déranger car tu as un LCD pour afficher des messages).

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            17 septembre 2014 à 21:55:40

                                                            ok donc il me suffit de déclarer mes pins pour le second 74hc595n et je peut les utiliser comme n'importe quel pin.

                                                            mais pour déclarer mes pins du 74hc595n pour mon lcd je suis passé par un shiftlcd auquel j'ai attribué des pins, pour le second 74hc595n qui va gerer mes leds je ne devrais pas aussi avoir un shift" quelque chose" pour ne pas foutre la pagaille? ou sinon je doit faire comme dans le tuto?

                                                            http://fr.openclassrooms.com/sciences/cours/arduino-pour-bien-commencer-en-electronique-et-en-programmation/ajouter-des-sorties-numeriques-a-l-arduino

                                                            merci d'avance.

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            demande d'aide pour un prog arduino

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown