Partage
  • Partager sur Facebook
  • Partager sur Twitter

Serrure électronique codé avec Arduino

Programme

    12 juin 2022 à 18:27:38

     Bonsoir, je suis étudiante et pour le PFE je travaille sur un projet domotique, seulement j'ai un problème sur le code. Enfaite lorsque je compile mon code, j'essaie de saisir mon mot de passe sur le clavier pour déverrouiller la porte, mais je n'ai le temps de saisir le deuxième chiffres du mot de passe, qu'on me refuse l'accès. Bref je n'ai pas le temps de saisir tout le mot de passe, je ne sais pas pourquoi. Svp une aide.

        Voici mon code:

    #include <Keypad.h>

    #include <LiquidCrystal.h>

    #include <Servo.h>

    Servo myservo;

    int pos=0;//position du servomoteur

    LiquidCrystal lcd(A4,A5,A3,A2,A1,A0);

    const byte lignes=5;

    const byte colonnes=4;

    char key[lignes][colonnes]={

      {'1','2','3'},

      {'4','5','6'},

      {'7','8','9'},

      {'*','0','#'}

    };

     byte lignePins[lignes]={12,11,7,6};

     byte colonnePins[colonnes]={5,4,3};

     Keypad keypad= Keypad(makeKeymap(key), lignePins, colonnePins, lignes, colonnes);

     char password="0123";

     int currentposition=0;

     void setup() {

      displayscreen();

      //serial,begin(9600);

      myservo.attach(13);// connexion du servo moteur

      lcd.begin(16,2);

     }

    void loop() {

      delay(500);

      if(currentposition==0)

      {

        displayscreen();

      }

      int n;

      char code=keypad.getKey();

      if (code != NO_KEY)

      {

        lcd.clear();

        lcd.setCursor(0,0);

        lcd.print("MOT DE PASSE:");

        lcd.setCursor(7,1);

        lcd.print(" ");

        lcd.setCursor(7,1);

        for( n=0; n<=currentposition; ++n)

        {

          lcd.print("*");

        //Keypress();

        }

        if (code==password)

        {

          ++currentposition;

         if (currentposition==4)

        {

          unlockdoor();

          currentposition=0;

        }

        }    

       else

      {

        incorrect();

      currentposition=0;

      }

        }

      }

    //----------------Function 1- OUVRIRE LA PORTE-----------------//

    void unlockdoor(){

      delay(900);

      lcd.setCursor(0,0);

        lcd.println("  ");

        lcd.setCursor(1,0);

        lcd.print("ACCES GARANTIE ");

        lcd.setCursor(4,1);

        lcd.println("BIENVENUE!!");

        lcd.setCursor(15,1);

        lcd.println(" ");

        lcd.setCursor(16,1);

        lcd.println(" ");

        lcd.setCursor(14,1);

        lcd.println(" ");

        lcd.setCursor(13,1);

        lcd.println(" ");

        for(pos=180;pos>=0;pos-=5)//OUVERTURE DE PORTE

        {

          myservo.write(pos);

          delay(5);

        }

        delay(2000);

        delay(1000);

        counterbeep();

        delay(1000);

        for(pos=0;pos<=180;pos+=5)//FERMETURE DE PORTE

        {// in steps of 1 degree

          myservo.write(pos);

          delay(15);

          currentposition=0;

          lcd.clear();

          displayscreen();

        }

    }

    //---------------------Function 2- MAUVAIS CODE----------------//

    void incorrect()

    {

      delay(500);

      lcd.clear();

       lcd.setCursor(1,0);

        lcd.print("CODE ");

        lcd.setCursor(6,0);

        lcd.print("INCORRECT ");

        lcd.setCursor(15,1);

        lcd.println(" ");

        lcd.setCursor(4,1);

        lcd.println("IMPOSSIBLE ");

        lcd.setCursor(13,1);

        lcd.println(" ");

        Serial.println("CODE INCORRECT ");

        delay(3000);

        lcd.clear();

        displayscreen();

    }

    //-----------------Function 3- CLEAR THE SCREEN-------------------//

    void clearscreen(){

        lcd.setCursor(0,0);

        lcd.print(" ");

        lcd.setCursor(0,1);

        lcd.print(" ");

        lcd.setCursor(0,2);

        lcd.println(" ");

        lcd.setCursor(0,3);

        lcd.println(" ");

    }

    //-------------------Function 4- DISPLAY FUNCTION-------------------//

    void displayscreen()

    {

      lcd.setCursor(0,0);

      lcd.println(" ENTRER LE CODE ");

      lcd.setCursor(1,1);

      lcd.println("POUR OUVRIR");

       }

    //---------------Function 5- Count down----------------//

    void counterbeep()  {

      delay(1200);

      lcd.clear();

      lcd.setCursor(2,15);

      lcd.println(" ");

      lcd.setCursor(2,14);

      lcd.println(" ");

      lcd.setCursor(2,0); 

      delay(200);

      lcd.println("GET IN WITHIN:::");

      lcd.setCursor(4,1);

      lcd.print("5");

        delay(200);

        lcd.clear();

        lcd.setCursor(2,0);

        lcd.println("GET IN WITHIN ");

        delay(1000);

        lcd.setCursor(2,0);

        lcd.print("GET IN WITHIN ");

        lcd.setCursor(4,1);//2

        lcd.print("4");

        delay(100);

        lcd.clear();

        lcd.setCursor(2,0);

        lcd.println("GET IN WITHIN: ");

        delay(1000);

        lcd.setCursor(2,0);

        lcd.println("GET IN WITHIN: ");

        lcd.setCursor(4,1);

        lcd.print("3");

        delay(100);

        lcd.clear();

        lcd.setCursor(2,0);

        lcd.println("GET IN WITHIN:");

        delay(1000);

        lcd.setCursor(2,0);

        lcd.println("GET IN WITHIN:");

        lcd.setCursor(4,1);

        lcd.print("2");

        delay(100);

        lcd.clear();

        lcd.setCursor(2,0);

        lcd.println("GET IN WITHIN ");

        delay(1000);

        lcd.setCursor(4,1);

        lcd.print("1");

        delay(100);

        lcd.clear();

        lcd.setCursor(2,0);

        lcd.println("GET IN WITHIN:");

        delay(1000);

        delay(40);

        lcd.clear();

        lcd.setCursor(2,0);

        lcd.println("REFERMER");

        delay(500);

        lcd.setCursor(12,0);

        lcd.print(".");

        delay(500);

        lcd.setCursor(13,0);

        lcd.println(".");

        delay(500);

        lcd.setCursor(14,0);

        lcd.print(".");

        delay(400);

        lcd.clear();

        lcd.setCursor(4,0);

        lcd.println("FERMER!");

        delay(440);

    }

    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2022 à 18:49:27

      Alors déjà utilise la balise code , et secundu , ce n'est pas du C , mais du C++ :p
      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2022 à 19:37:40

        le problème c'est ton if(code == password) quand tu rentres ton 1er chiffre (sauf erreur de ma part) tu passes dans ce test qui sera donc faux, donc tu lances la fonction incorrect().

        Le problème c'est ta gestion de l'avancement de la saisie qui se fait dans ce if, il devrait être au dessus (un niveau au dessus) de ce test ( je rentre mon 1er numéro, j'incrémente ma position, est-ce que j'ai rentré 4 numéros, sinon je boucle pour lire le numéro suivant; si oui (4 numéro) je teste si mon code est le password et seulement, j'ouvre ou indique l'erreur.

        • Partager sur Facebook
        • Partager sur Twitter

        Serrure électronique codé avec 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