Airsoft Krispies

Bonjour à tous et bienvenue


    Bombe Airsoft

    Partagez
    avatar
    pic-pac
    ecrou or
    ecrou or

    Messages : 663
    Date d'inscription : 20/06/2011
    Age : 36
    Localisation : Issoire (63)

    Bombe Airsoft

    Message par pic-pac le Dim 25 Aoû - 18:04

    Salut les amis,

    voila maintenant un bon moment que j'avais pas travaillé dessus mais aujourd'hui elle me convient suffisamment pour vous la poster aujourd'hui
    la voici dans sa petite mallette.


    Liste du Materiel:

    un Arduino ou un Atmega 328
    1 clavier matriciel 12 touches
    1 crystal 16 Mhz (si vous choisissez l'Atmega 328)
    1 potentiometre 10K
    1 ecran LCD 2 lignes 16 colones
    1 LM7805 (si vous choisissez l'Atmega 328, permet de passer de 9V en 5V)
    1 Buzzer

    Le détail de l'Atmega 328


    Le schema de branchement sur un ATmega 328


    la petite vidéo de changement du temps (pour changer le code d'amorçage, de désamorçage ou le code admin c'est la même façon de faire), amorçage puis explosion mais je n'ai pas encore monté le buzzer



    la petite vidéo du désamorçage


    Code:
    /******************************************************************************************
     * Airsoft C4 Prop by Joshua Burgess  
     * v2 modify by PIC-PAC
     * 13/08/2013
     *******************************************************************************************/

    /******************************************************************************************
     *
     *  TO DO
     *  ajouter option fil à couper
     *******************************************************************************************/

    #include <Keypad.h>

    #include <LiquidCrystal.h>
     // initialize the library with the numbers of the interface pins
     LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
     // set up the LCD's number of columns and rows:


    const byte ROWS = 4; //four rows
    const byte COLS = 3; //three columns
    char keys[ROWS][COLS] = {
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
      {'*','0','#'}
    };
    byte rowPins[ROWS] = {A1, A2, A3, A4}; //connect to the row pinouts of the keypad
    byte colPins[COLS] = {5, 6, 7}; //connect to the column pinouts of the keypad

    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

    //Define all the bomb states  
    #define READY 0
    #define ARMED 1
    #define DISARMED 2
    #define DETONATED 3
    #define speakerPin 2

    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 = 2;//pin that the piezo buzzer is connected to.
    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 to arm the bomb
    char disarmCode[] = "123456";//code to disarm the bomb
    char adminCode[] = "123456";//code to change timer

    char ENTER_KEY = '#';
    char CANCEL_KEY = '*';//stores the cancel key variable.
    char timeSetKey = '*';//key to press to set the code.

    void setup()
    {lcd.begin(16, 2);
                    lcd.clear();
                    lcd.setCursor(2, 0 );
                    lcd.print( "Bombe Factice" );
                    lcd.setCursor( 3, 1 );
                    lcd.print( "GOOD GAME" );
                    delay(2000);
                    lcd.setCursor( 2, 0 );
                    lcd.print( "Bombe Factice" );
                    lcd.setCursor( 3, 1 );
                    lcd.print( "BY PIC-PAC" );
                    delay(2000);
                    lcd.clear();
      ////backlightOn();
      //blinkCursor();
      //stopVscroll();
      pinMode(speakerPin, OUTPUT);//sets the output pin for the piezo buzzer
    }

    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 :"); //Notify user of status.

        resultOfGetArmCode = getArmCode();

        if (resultOfGetArmCode == 1) {
          lcd.clear();
          lcd.setCursor(0, 0 );
          delay(100);
          lcd.print("Correct");
          delay(500);
          lcd.clear();
          bombState = ARMED; //Start countdown

        }//Close getArmCode(); = true

        if (resultOfGetArmCode == 0) {  //if code fails print "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();

          if (disarmKey == '#') {
           char reslutOfDisarm;
            lcd.clear();    
            lcd.setCursor(0, 0 );

            delay(100);
            lcd.print("Enter DisarmCode"); //if disarm button is pressed, ask user to input code.
            reslutOfDisarm = getDisarmCode();

            if (reslutOfDisarm == true) {  
              lcd.clear();
              bombState = DISARMED; //and set bombState to disarmed.
              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(); //if disarm key has not been pressed, continue countdown.

        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(2, 0 );
            lcd.print("BOMB DISARMED"); //bomb has been disarmed, inform user.
            lcd.setCursor(2, 1 );
            lcd.print("GOOD JOB TEAM");
            delay(1000);
            lcd.setCursor(2, 0 );
            lcd.print("GOOD JOB TEAM"); //bomb has been disarmed, inform user.
            lcd.setCursor(2, 1 );
            lcd.print("BOMB DISARMED");
            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, HIGH);//turn on buzzer
          lcd.setCursor(0, 0 );
          lcd.print("BOOOOOOOOOOOOOOM"); //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);//wait 5 seconds
          digitalWrite(speakerPin, LOW);//turn off buzzer
          repeatBuzzer = 1;//set flag to prevent code from looping again.
        }

        else {
          //lcd.setCursor(0, 0 );
          //lcd.print("BOOOOOOOOOOOOOOM"); //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(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, HIGH);//turn on buzzer
      }

      if (currentMillis - previousDelay > 100) {//100ms chirp duration
        digitalWrite(speakerPin, LOW);//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()+7000L;//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.
    Je vous souhaite un bon courage et si vous avez des questions n’hésitez pas.

    je suis en train d'uploader des vidéos de fonctionnement de la bombinette, dès quelles seront uploader je vous mettrais les liens.
    Le prix de revient d'une bombinette est d'environ 30 à 40€.
    avatar
    csbrico
    vis inox
    vis inox

    Messages : 231
    Date d'inscription : 12/12/2012
    Localisation : un morceau de caillou dans le canal du mozambique ( mayotte)

    Re: Bombe Airsoft

    Message par csbrico le Lun 26 Aoû - 7:06

    super j'adore approuved approuved approuved approuved approuved approuved approuved approuved approuved approuved approuved approuved
    mais tu est sure d’avoirs mis assez de C4 ^^
    avatar
    pic-pac
    ecrou or
    ecrou or

    Messages : 663
    Date d'inscription : 20/06/2011
    Age : 36
    Localisation : Issoire (63)

    Re: Bombe Airsoft

    Message par pic-pac le Lun 26 Aoû - 19:02

    Code avec Fils à couper

    !!!!!ATTENTION CERTAINES SORTIES ONT ETES CHANGES!!!!!

    Code:

        /******************************************************************************************
         * Airsoft C4 Prop by Joshua Burgess
         * v3 modify by PIC-PAC
         * 19/09/2013
         *******************************************************************************************/

        /******************************************************************************************
         *
         *  TO DO
         *  plus rien pour l'instant
         *******************************************************************************************/

        #include <Keypad.h>

        #include <LiquidCrystal.h>
           // initialize the library with the numbers of the interface pins
           LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
           // set up the LCD's number of columns and rows:

        int boom;
        int ouf;


        const byte ROWS = 4; //four rows
        const byte COLS = 3; //three columns
        char keys[ROWS][COLS] = {
          {'1','2','3'},
          {'4','5','6'},
          {'7','8','9'},
          {'*','0','#'}
        };
        byte rowPins[ROWS] = {A0, A1, A2, A3}; //connect to the row pinouts of the keypad
        byte colPins[COLS] = {A4, A5, 7}; //connect to the column pinouts of the keypad

        Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

        //Define all the bomb states
        #define READY 0
        #define ARMED 1
        #define DISARMED 2
        #define DETONATED 3
        #define speakerPin 0

        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 = 2;//pin that the piezo buzzer is connected to.
        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 boom_str[0];
        char ouf_str[0];
        char continui1;
        char continui2;
        char ArmCode[] = "123456";//code to arm the bomb
        char disarmCode[] = "123456";//code to disarm the bomb
        char adminCode[] = "123456";//code to change timer

        char ENTER_KEY = '#';
        char CANCEL_KEY = '*';//stores the cancel key variable.
        char timeSetKey = '*';//key to press to set the code.

        void setup()
        {
                        pinMode(5, OUTPUT);
                        //les cables doivent tous etre branchés sur la sortie 5
              pinMode(1, INPUT);
                        pinMode(2, INPUT);
                        pinMode(3, INPUT);
                        pinMode(4, INPUT);
              // On passe les cables au niveau haut
              digitalWrite(5, HIGH);
                                      
                        lcd.begin(16, 2);
                        lcd.clear();
                        lcd.setCursor(2, 0 );
                        lcd.print( "Bombe Factice" );
                        lcd.setCursor( 3, 1 );
                        lcd.print( "GOOD GAME" );
                        delay(2000);
                        lcd.setCursor( 2, 0 );
                        lcd.print( "Bombe Factice" );
                        lcd.setCursor( 3, 1 );
                        lcd.print( "BY PIC-PAC" );
                        delay(2000);
                        lcd.clear();

          pinMode(speakerPin, OUTPUT);//sets the output pin for the piezo buzzer
        }

        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 :"); //Notify user of status.

            resultOfGetArmCode = getArmCode();

            if (resultOfGetArmCode == 1) {
              lcd.clear();
              lcd.setCursor(0, 0 );
              delay(100);
              lcd.print("Correct");
              delay(500);
              lcd.clear();
              bombState = ARMED; //Start countdown

            }//Close getArmCode(); = true

            if (resultOfGetArmCode == 0) {  //if code fails print "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:
            {
              continuite1();
              continuite2();
              continui1 = continuite1();
              continui2 = continuite2();
              if (continui1 == false) {
                  bombState = DETONATED; //and set bombState to disarmed.
                  break;
                }    
              if (continui2 == true) {
                  bombState = DISARMED; //and set bombState to disarmed.
                  break;
                }
              
              char disarmKey = keypad.getKey();
              if (disarmKey == '#') {
                char reslutOfDisarm;
                lcd.clear();  
                lcd.setCursor(0, 0 );
                lcd.print("Enter DisarmCode"); //if disarm button is pressed, ask user to input code.
                reslutOfDisarm = getDisarmCode();

                if (reslutOfDisarm == true) {
                  lcd.clear();
                  bombState = DISARMED; //and set bombState to disarmed.
                  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(); //if disarm key has not been pressed, continue countdown.

            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(2, 0 );
                lcd.print("BOMB DISARMED"); //bomb has been disarmed, inform user.
                lcd.setCursor(2, 1 );
                lcd.print("GOOD JOB TEAM");
                delay(1000);
                lcd.setCursor(2, 0 );
                lcd.print("GOOD JOB TEAM"); //bomb has been disarmed, inform user.
                lcd.setCursor(2, 1 );
                lcd.print("BOMB DISARMED");
                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, HIGH);//turn on buzzer
              lcd.clear();
              lcd.setCursor(0, 0 );
              lcd.print("BOOOOOOOOOOOOOOM"); //loop message informing user of bomb detonation.
              http://lcd.setCursor(0, 1 );
              http://lcd.print("Have A Nice Day"); //loop message informing user of bomb detonation.
              delay(5000);//wait 5 seconds
              digitalWrite(speakerPin, LOW);//turn off buzzer
              repeatBuzzer = 1;//set flag to prevent code from looping again.
            }

            else {
              http://lcd.setCursor(0, 0 );
              http://lcd.print("BOOOOOOOOOOOOOOM"); //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(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, HIGH);//turn on buzzer
          }

          if (currentMillis - previousDelay > 100) {//100ms chirp duration
            digitalWrite(speakerPin, LOW);//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();


        /**********************************************************************
         *                  continuite();                                    *
         *    continuité sur les fils.                                        *
         *                                                                    *
         ***********************************************************************/
        boolean continuite1(){
        
          // si le fil d'explosion est coupé :
              if (digitalRead(boom) == LOW) {
                 return false; // on renvoie 0
              }
                        else {
                        return true;
                        }
        }
        boolean continuite2(){
        
        // si le fil de désamorçage est coupé :
              if (digitalRead(ouf) == LOW) {
                 return true; // on renvoie 1
                        }
                        else {
                        return false;
                        }

        }
        /**********************************************************************
         *                  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()+7000L;//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");
            delay (2000);
            lcd.clear();
            lcd.setCursor(0, 0 );
            lcd.print("3.Arm 4.Disarm");
            lcd.setCursor(0, 1 );
            lcd.print("5.Wire");
            do{
              menupage = keypad.getKey();
            }
            while(menupage == '\0' || menupage == '*' || menupage == '0' || menupage > '5');
          
            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 '5': //fil a couper
                lcd.clear();
                lcd.setCursor(0, 0 );
                lcd.print("Choose Wire BOOM");
                do{
                  boom = keypad.getKey();
                }
                while(boom == '\0' || boom < '0' || boom > '4');
                boom_str[0] = boom;
                boom = atoi (boom_str);
                lcd.setCursor(0, 1 );
                lcd.print(boom);
                delay (2000);
                lcd.clear();
                lcd.setCursor(0, 0 );
                lcd.print("Choose Wire OUF");
                do{
                  ouf = keypad.getKey();
                }
                while(ouf == '\0' || ouf < '0' || ouf > '4');
                ouf_str[0] = ouf;
                ouf = atoi (ouf_str);
                lcd.setCursor(0, 1 );
                lcd.print(ouf);
                delay (2000);
              
          
                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.

    bon courage à vous et si vous avez des questions n’hésitez pas (je ne connais pas tout mais bon maintenant je pense que je m'en sors assez bien avec ce truc)


    _________________


    Dernière édition par pic-pac le Mar 1 Juil - 19:33, édité 2 fois
    avatar
    ptimaicosto
    vis rouillée
    vis rouillée

    Messages : 90
    Date d'inscription : 05/06/2011
    Age : 32
    Localisation : Ligny le ribault

    Re: Bombe Airsoft

    Message par ptimaicosto le Lun 26 Aoû - 23:46

    Les ATmega c'est fantastique !!! Jolie travai, et merci pour le code !
    avatar
    pic-pac
    ecrou or
    ecrou or

    Messages : 663
    Date d'inscription : 20/06/2011
    Age : 36
    Localisation : Issoire (63)

    Re: Bombe Airsoft

    Message par pic-pac le Mar 27 Aoû - 5:00

    Pas de soucis j'ai juste un soucis d'affichage pour le désamorçage que j'aimerais résoudre mais rien de bien méchant, puis j'aimerais rajouter une option pour des fils a couper mais je vais regarder ça plus tard
    avatar
    MISTER DEE
    boulon d'argent
    boulon d'argent

    Messages : 1148
    Date d'inscription : 04/01/2013
    Age : 46
    Localisation : Angers

    Re: Bombe Airsoft

    Message par MISTER DEE le Mar 27 Aoû - 15:25

    approuved  manque plus que le son avec haut parleur et un beau " bouuuum "

    super job.................
    avatar
    pic-pac
    ecrou or
    ecrou or

    Messages : 663
    Date d'inscription : 20/06/2011
    Age : 36
    Localisation : Issoire (63)

    Re: Bombe Airsoft

    Message par pic-pac le Mar 27 Aoû - 19:28

    Il est prevu, mais j'ai un soucis avec des buzzers, j'en ai qu'un seul qui accepte de fonctionner mais c'est qu'un détail
    avatar
    DJABA

    Messages : 11
    Date d'inscription : 31/07/2012
    Age : 38
    Localisation : LIOMER

    Re: Bombe Airsoft

    Message par DJABA le Mar 3 Sep - 23:48

    salut
    je souhaite réaliser se projet
    mais quand je transfère le code dans mon ARDUINO Duemilanove petit message d erreur



    sketch_sep03a:32: error: 'Keypad' does not name a type
    sketch_sep03a.ino: In function 'void loop()':
    sketch_sep03a:138: error: 'keypad' was not declared in this scope
    sketch_sep03a.ino: In function 'boolean getArmCode()':
    sketch_sep03a:331: error: 'keypad' was not declared in this scope
    sketch_sep03a.ino: In function 'boolean getDisarmCode()':
    sketch_sep03a:399: error: 'keypad' was not declared in this scope
    sketch_sep03a.ino: In function 'boolean getAdminCode()':
    sketch_sep03a:459: error: 'keypad' was not declared in this scope
    sketch_sep03a.ino: In function 'void timerSet()':
    sketch_sep03a:518: error: 'keypad' was not declared in this scope
    sketch_sep03a:529: error: 'keypad' was not declared in this scope
    sketch_sep03a:538: error: 'keypad' was not declared in this scope
    sketch_sep03a:547: error: 'keypad' was not declared in this scope
    sketch_sep03a:556: error: 'keypad' was not declared in this scope
    sketch_sep03a:565: error: 'keypad' was not declared in this scope
    sketch_sep03a:574: error: 'keypad' was not declared in this scope
    sketch_sep03a:603: error: 'keypad' was not declared in this scope
    sketch_sep03a:612: error: 'keypad' was not declared in this scope
    sketch_sep03a:621: error: 'keypad' was not declared in this scope
    sketch_sep03a:629: error: 'keypad' was not declared in this scope
    sketch_sep03a:638: error: 'keypad' was not declared in this scope
    sketch_sep03a:647: error: 'keypad' was not declared in this scope
    sketch_sep03a:676: error: 'keypad' was not declared in this scope
    sketch_sep03a:685: error: 'keypad' was not declared in this scope
    sketch_sep03a:694: error: 'keypad' was not declared in this scope
    sketch_sep03a:703: error: 'keypad' was not declared in this scope
    sketch_sep03a:712: error: 'keypad' was not declared in this scope
    sketch_sep03a:721: error: 'keypad' was not declared in this scope
    sketch_sep03a:749: error: 'keypad' was not declared in this scope
    sketch_sep03a:757: error: 'keypad' was not declared in this scope
    sketch_sep03a:771: error: 'keypad' was not declared in this scope
    sketch_sep03a:778: error: 'keypad' was not declared in this scope
    sketch_sep03a:782: error: 'keypad' was not declared in this scope
    sketch_sep03a:795: error: 'keypad' was not declared in this scope
    sketch_sep03a:802: error: 'keypad' was not declared in this scope
    sketch_sep03a:806: error: 'keypad' was not declared in this scope

    avez vous une idée pour résoudre ce problème merci
    avatar
    ju76
    vis rouillée
    vis rouillée

    Messages : 24
    Date d'inscription : 05/01/2013
    Age : 35
    Localisation : Seine maritime

    Re: Bombe Airsoft

    Message par ju76 le Mer 4 Sep - 10:40

    Salut,
    d'abord félicitation pour cette réalisation approuved 
    J'ai une petite question au sujet de ce type de montage.
    serait il possible d'ajouter en cas de code erroné par exemple le déclenchement via un chauffe bougie de voiture thermique, fonctionnant en 3v. le déclenchement d'un fumigéne qui symboliserais un piege chimique?
    avatar
    maxdarkdog
    ecrou or
    ecrou or

    Messages : 507
    Date d'inscription : 29/12/2011
    Age : 31
    Localisation : Strasbourg

    Re: Bombe Airsoft

    Message par maxdarkdog le Mer 4 Sep - 11:52




    Tu pourrait rajouter un gros buzzer ou une sirène 90DB pour la détonation et un petit buzzer type bip bip pour le décompte

    Edit: Mode boulet ON! J'avais pas lu plus haut... XD
    avatar
    Les Choux
    vis rouillée
    vis rouillée

    Messages : 135
    Date d'inscription : 13/07/2013
    Age : 21
    Localisation : Avenas 69

    Re: Bombe Airsoft

    Message par Les Choux le Mer 4 Sep - 13:49

    approuved 
    avatar
    pic-pac
    ecrou or
    ecrou or

    Messages : 663
    Date d'inscription : 20/06/2011
    Age : 36
    Localisation : Issoire (63)

    Re: Bombe Airsoft

    Message par pic-pac le Mer 4 Sep - 16:50

    @djaba regarde si tu as bien la librairie keypad dans ton logiciel Arduino sinon contact moi par mp en me donnant ton adresse mail et je te fais un dossier que je t'enverrais

    @ju76 c'est peut être possible mais il faut voir l'ampérage que demande la bougie, mais ça doit être jouable

    @maxdarkdog je suis en pleine réflexion pour la sirène de 90 DB, il serait possible de rajouter un petit buzzer pour les petits bip régulier mais après il va se poser un problème d'entrée sortie pour si je veux rajouter des fils a couper pour la désamorcer
    avatar
    ju76
    vis rouillée
    vis rouillée

    Messages : 24
    Date d'inscription : 05/01/2013
    Age : 35
    Localisation : Seine maritime

    Re: Bombe Airsoft

    Message par ju76 le Jeu 5 Sep - 10:04

    Merci Pic Pac.
    Pour toi quel ampérage ne doit pas dépasser la bougie?
    avatar
    maxdarkdog
    ecrou or
    ecrou or

    Messages : 507
    Date d'inscription : 29/12/2011
    Age : 31
    Localisation : Strasbourg

    Re: Bombe Airsoft

    Message par maxdarkdog le Jeu 5 Sep - 13:10

    ju76 a écrit:Merci Pic Pac.
    Pour toi quel ampérage ne doit pas dépasser la bougie?
    Ca dépends de l'ampérage max de la batterie, l'ampérage max admissible par le relais de puissance, la section de cable et la longueur de celui ci
    avatar
    pic-pac
    ecrou or
    ecrou or

    Messages : 663
    Date d'inscription : 20/06/2011
    Age : 36
    Localisation : Issoire (63)

    Re: Bombe Airsoft

    Message par pic-pac le Jeu 5 Sep - 20:19

    +1 mais après je pense qu'il faut faire des tests, sinon il existe des déclencheurs pour les feux d'artifices
    avatar
    maxdarkdog
    ecrou or
    ecrou or

    Messages : 507
    Date d'inscription : 29/12/2011
    Age : 31
    Localisation : Strasbourg

    Re: Bombe Airsoft

    Message par maxdarkdog le Jeu 5 Sep - 21:42

    Ouai c'est des inflammateurs et ca consomme rien en ampère et ca prends toutes les tensions a partir de 4 ou 5volts mais l'inconveniant c'est que c'est a usage unique...
    avatar
    pic-pac
    ecrou or
    ecrou or

    Messages : 663
    Date d'inscription : 20/06/2011
    Age : 36
    Localisation : Issoire (63)

    Re: Bombe Airsoft

    Message par pic-pac le Jeu 5 Sep - 21:44

    Oui mais sur certains sites tu payes 5€ les 100 environ tu fais un montage pour les changer rapidement et ça roule
    avatar
    ju76
    vis rouillée
    vis rouillée

    Messages : 24
    Date d'inscription : 05/01/2013
    Age : 35
    Localisation : Seine maritime

    Re: Bombe Airsoft

    Message par ju76 le Jeu 5 Sep - 23:50

    J'ai vu qu'il y a effectivement cette solution mais a priori le problème de c'est petites bêtes c'est que ca serais tres sensible et n'aime pas trop l’électricité statique.
    avatar
    maxdarkdog
    ecrou or
    ecrou or

    Messages : 507
    Date d'inscription : 29/12/2011
    Age : 31
    Localisation : Strasbourg

    Re: Bombe Airsoft

    Message par maxdarkdog le Ven 6 Sep - 6:44

    Non ca va pour en avoir déja manipulé pour des mortiers a mèche ca passe... mais bon ca a un prix (5€ les 100 j'ai jamais vu)

    par contre si tu a une petite batterie 12v (6Ah min) tu peux utiliser un autre système qui coute quasi rien


    Ingrédients:
    -Laine de fer
    -poudre Grise ou blanche
    -du fil electrique (scindex 2x1.5mm²)
    -du scotch

    Recette:
    -prendre 5cm de scotch et le poser a plat coté collant en haut (c'est le plus dur de la manip XD)
    -coller les 2 fils perpendiculairement au scotch et esacé de 1cm
    -prendre un petit bout de laine de fer et le coller sur les fils (un bout pas trop épais 100aine de fils maxi)
    -sur la laine de fer mettre la poudre blanche ou grise
    -refermer le scotch d'un coté seulement (laissez l'autre coté ouvert pour coller votre mèche)
    avatar
    ju76
    vis rouillée
    vis rouillée

    Messages : 24
    Date d'inscription : 05/01/2013
    Age : 35
    Localisation : Seine maritime

    Re: Bombe Airsoft

    Message par ju76 le Ven 6 Sep - 13:10

    Sinon je viens de trouver de inflamateur de meche réutilisable

    http://www.france-artifices.com/inflammateur-electrique-artifices-special-meche-lente,fr,4,1INFLA2V.cfm
    avatar
    maxdarkdog
    ecrou or
    ecrou or

    Messages : 507
    Date d'inscription : 29/12/2011
    Age : 31
    Localisation : Strasbourg

    Re: Bombe Airsoft

    Message par maxdarkdog le Ven 6 Sep - 13:25

    ou voi tu qu'il est réutilisable?

    C'est un one shot
    avatar
    droopaille
    boulon platine
    boulon platine

    Messages : 2505
    Date d'inscription : 03/04/2011
    Age : 42
    Localisation : Vitré (35)

    Re: Bombe Airsoft

    Message par droopaille le Sam 7 Sep - 18:52

    maxdarkdog a écrit:ou voi tu qu'il est réutilisable?

    C'est un one shot
    et où tu vois que c'est usage unique ?
    je recherche ce genre d'article pour un futur projet


    _________________
    Toutes mes créations
    avatar
    maxdarkdog
    ecrou or
    ecrou or

    Messages : 507
    Date d'inscription : 29/12/2011
    Age : 31
    Localisation : Strasbourg

    Re: Bombe Airsoft

    Message par maxdarkdog le Sam 7 Sep - 19:04

    Allumeur c'est 95% du temps usage unique (ancien chef au taff qui est k4)
    avatar
    ju76
    vis rouillée
    vis rouillée

    Messages : 24
    Date d'inscription : 05/01/2013
    Age : 35
    Localisation : Seine maritime

    Re: Bombe Airsoft

    Message par ju76 le Lun 9 Sep - 10:53

    Donc j'ai appellé une boutique d'artifice.
    Il m'ont dit qu'effectivement ils ne garantissent pas le fait que se soit réutilisable du fait de la chaleur générer par cherry  une fois allumé.
    Autant pour moi je me renseignerer mieux avant de poster la prochaine fois.
    avatar
    droopaille
    boulon platine
    boulon platine

    Messages : 2505
    Date d'inscription : 03/04/2011
    Age : 42
    Localisation : Vitré (35)

    Re: Bombe Airsoft

    Message par droopaille le Lun 9 Sep - 12:55

    et il existe pas un système réutilisable à part la bougie de préchauffage voiture ?


    _________________
    Toutes mes créations

    Contenu sponsorisé

    Re: Bombe Airsoft

    Message par Contenu sponsorisé


      La date/heure actuelle est Ven 18 Aoû - 20:21