Mot de passe

Bonjour.
Je suis entrain de réaliser un projet où l'on a besoin d'insérer un mot de passe (grâce à un digicode) pour pouvoir appuyer sur un bouton et actionner un moteur.
Cependant je ne sais pas comment structurer mon programme sur arduino.
Le bouton poussoir ne doit pas être fonctionnel tant que le bon mot de passe n'est pas validé.
J'ai besoin de votre aide, merci d'avance. :slight_smile:

hello

C'est pas exactement ce que je recherche :confused:

Donne nous un code et on t'aidera !!! C'est pas nous qui sommes noté ! On ne vas pas te donner un code tout cuit !!!
Au pire, demande a ton ami Google.

bonjour,
déjà il faudrait commencer par faire un code via l'exemple du lien donné.
ET le comprendre surtout, pour voir ce qu'il fait

ca sent le projet examen en plus, donc autant le dire de suite et LIRE CECI

pour la structure du code, c'est pas très compliqué
un flag à false pour le bouton
on entre un code en le terminant par * pour valider
si le code est faux, tu as perdu rejoue encore, flag false
si le code est bon, un flag à true
si flag true, alors le bouton est actif

voilà la structure

Bonjour, merci de votre aide. C'est bien pour un projet scolaire que je suis venu sur ce forum. :slight_smile:
J'ai déjà commencé mon programme pour faire fonctionner mes moteurs pas à pas avec des boutons poussoirs, le voici:

 #include <Stepper.h> // Inclus la librairie pour les fonctions stepper
 #define STEPS 100    //nombre de pas pour 1 tour moteur 

  //Créer une instance de la classe stepper pour définir notre moteur
  
  Stepper Mon_moteur1(STEPS, 8, 10, 9, 11);     // Sens horaire
  Stepper Mon_moteur2(STEPS, 4, 6, 5, 7);
 
  int  nb_pas = 768;  //Nombre de pas de rotation demandé au moteur
        
const int BP1= 12;     // La constante BP1 est affecté à la broche 12
const int BP2= 13;     // La constante BP2 est affecté à la broche 13
const int BP3= 2;
const int BP4= 3;
int Etat_bouton1= 0; //  Déclaration et initialisation de la variable Etat_bouton
int Etat_bouton2= 0;
int Etat_bouton3= 0;
int Etat_bouton4= 0;


void setup() 
 {             
    
  pinMode(BP1, INPUT);    // La broche 12 est définie comme une entrée 
  pinMode(BP2,INPUT);     // La broche 13 est définie comme une entrée
  pinMode(BP3, INPUT);
  pinMode(BP4, INPUT); 
  }


void loop() 
  {
    Etat_bouton1 = digitalRead(BP1); // lecture de l'état logique BP1
    Etat_bouton2= digitalRead(BP2);  // lecture de l'état logique BP2
    Etat_bouton3= digitalRead(BP3);
    Etat_bouton4= digitalRead(BP4);
    
    Mon_moteur1.setSpeed(12);
    Mon_moteur2.setSpeed(12);
     
    nb_pas = 2048;  // Une rotation complète avec 2048 pas 
     
    if (Etat_bouton1 == HIGH) {         
      motor1_sh(); //Appele la fonction motor_sh
    } 
    if (Etat_bouton2 == HIGH) {
      motor1_sih(); //Appel la fonction motor_sih
    }
    if (Etat_bouton3 == HIGH) {
      motor2_sh();
    }
    if (Etat_bouton4 == HIGH) {
      motor2_sih();
    }
  } 
  
   
 void motor1_sh(){
   Mon_moteur1.step(768);
   delay(2000);
   Mon_moteur1.step(-768);
}  
 void motor1_sih(){
   Mon_moteur1.step(-768); 
   delay(2000);
   Mon_moteur1.step(768);
}
 void motor2_sh(){
   Mon_moteur2.step(768);
   delay(2000);
   Mon_moteur2.step(-768);
}
 void motor2_sih(){
   Mon_moteur2.step(-768);
   delay(2000);
   Mon_moteur2.step(768);
 }

Cependant j'aimerais ajouter un mot de passe pour accéder à l'utilisation des boutons poussoirs avec un clavier 12 touches et un écran lcd 16/2.

dfgh:
hello

Merci de votre aide j'ai mon deuxième programme pour le mot de passe et l'écran lcd:

#include <Password.h>
#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(14, 15, 16, 17, 18, 19);
Password password = Password( "4321" );
const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3',},
  {'4','5','6',},
  {'7','8','9',},
  {'*','0',' ',}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = {28, 27, 26, 25}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {24, 23, 22}; //connect to the column pinouts of the keypad
const int buttonPin = 30;
int buttonState = 0;

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


void setup(){
   pinMode(buttonPin, INPUT);
lcd.begin(16, 2);
Serial.begin(9600);
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
keypad.setDebounceTime(250);
}

void loop(){
keypad.getKey();
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
lcd.clear();
}
}

//take care of some special events
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
lcd.print(eKey);
switch (eKey){
case ' ': guessPassword(); break;
lcd.setCursor(0, 1);
default:
password.append(eKey);
}
}}

void guessPassword(){
if (password.evaluate()){
lcd.setCursor(0, 1);
lcd.print("CODE CORRECT "); //
password.reset(); //resets password after correct entry
delay(600);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Bonjour");
delay(600);
lcd.setCursor(0, 1);
lcd.print("Choisir feutre");
delay(2000);
lcd.clear();
}


else{
lcd.setCursor(0, 1);
lcd.print("MAUVAIS CODE ");
password.reset(); //resets password after INCORRECT entry
delay(2000);
lcd.clear();
}
}

J'ai réussi à le simuler avec proteus et il marche. Maintenant je ne sais pas comment assembler les deux programmes pour en former qu'un seul.
Je voudrais que le programme du mot de passe passe avant celui des 4 boutons poussoirs et des deux moteurs mais je ne sais pas comment faire.. :-\

Je voudrais que le programme du mot de passe passe avant celui des 4 boutons poussoirs et des deux moteurs mais je ne sais pas comment faire.. :-\

c'est a se demander si tu lis ce qu'on t'indique dans les réponses?

pour la structure du code, c'est pas très compliqué
un flag à false pour le bouton
on entre un code en le terminant par * pour valider
si le code est faux, tu as perdu rejoue encore, flag false
si le code est bon, un flag à true
si flag true, alors le bouton est actif

J'ai bien vu votre message mais je ne sais pas comment faire.

xCake:
J'ai bien vu votre message mais je ne sais pas comment faire.

c'est pourtant pas très compliqué a comprendre

un flag à false pour le bouton
boolean OK = false;
on entre un code en le terminant par * pour valider
si le code est faux, tu as perdu rejoue encore, flag false
OK = false;
si le code est bon, un flag à true
OK = true;
si flag true, alors le bouton est actif
if (OK == true){
faire action
}

D'accord merci, je vais essayer ça !

J'ai rassemblé mes deux programmes, pour les reste j'ai pas réussi:

 #include <Password.h>
 #include <LiquidCrystal.h>
 #include <Keypad.h>
 #include <Stepper.h> // Inclus la librairie pour les fonctions stepper
 #define STEPS 100    //nombre de pas pour 1 tour moteur 

  //Créer une instance de la classe stepper pour définir notre moteur
  LiquidCrystal lcd(14, 15, 16, 17, 18, 19);
  Password password = Password( "4321" );
  Stepper Mon_moteur1(STEPS, 8, 10, 9, 11);     // Sens horaire
  Stepper Mon_moteur2(STEPS, 4, 6, 5, 7);
 
  int  nb_pas = 768;  //Nombre de pas de rotation demandé au moteur
        
const int BP1= 12;     // La constante BP1 est affecté à la broche 12
const int BP2= 13;     // La constante BP2 est affecté à la broche 13
const int BP3= 2;
const int BP4= 3;
int Etat_bouton1= 0; //  Déclaration et initialisation de la variable Etat_bouton
int Etat_bouton2= 0;
int Etat_bouton3= 0;
int Etat_bouton4= 0;

const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3',},
  {'4','5','6',},
  {'7','8','9',},
  {'*','0',' ',}
};
byte rowPins[ROWS] = {28, 27, 26, 25}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {24, 23, 22}; //connect to the column pinouts of the keypad
const int buttonPin = 30;
int buttonState = 0;

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


void setup() 
 {             
  pinMode(BP1, INPUT);    // La broche 12 est définie comme une entrée 
  pinMode(BP2,INPUT);     // La broche 13 est définie comme une entrée
  pinMode(BP3, INPUT);
  pinMode(BP4, INPUT);
  pinMode(buttonPin, INPUT);
lcd.begin(16, 2);
Serial.begin(9600);
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
keypad.setDebounceTime(250); 
  }


void loop() 
  {
    Etat_bouton1 = digitalRead(BP1); // lecture de l'état logique BP1
    Etat_bouton2= digitalRead(BP2);  // lecture de l'état logique BP2
    Etat_bouton3= digitalRead(BP3);
    Etat_bouton4= digitalRead(BP4);
    
    Mon_moteur1.setSpeed(12); //Vitesse de 300 (max) réduire cette valeur pour avoir un vitesse plus lente
    Mon_moteur2.setSpeed(12);
     
    nb_pas = 2048;  // Une rotation complète avec 2048 pas 
     
    if (Etat_bouton1 == HIGH) {         
   Mon_moteur1.step(768);
   delay(2000);
   Mon_moteur1.step(-768);
    } 
    if (Etat_bouton2 == HIGH) {
   Mon_moteur1.step(-768); // fait tourner l'axe du réducteur
   delay(2000);
   Mon_moteur1.step(768);
    }
    if (Etat_bouton3 == HIGH) {
   Mon_moteur2.step(768);
   delay(2000);
   Mon_moteur2.step(-768);   
    }
    if (Etat_bouton4 == HIGH) {
   Mon_moteur2.step(-768);
   delay(2000);
   Mon_moteur2.step(768);
    }
  } 
  

void loop(){
keypad.getKey();
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
lcd.clear();
}
}

//take care of some special events
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
lcd.print(eKey);
switch (eKey){
case ' ': guessPassword(); break;
lcd.setCursor(0, 1);
default:
password.append(eKey);
}
}}

void guessPassword(){
if (password.evaluate()){
lcd.setCursor(0, 1);
lcd.print("CODE CORRECT "); //
password.reset(); //resets password after correct entry
delay(600);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Bonjour");
delay(600);
lcd.setCursor(0, 1);
lcd.print("Choisir feutre");
delay(2000);
lcd.clear();
}


else{
lcd.setCursor(0, 1);
lcd.print("MAUVAIS CODE ");
password.reset(); //resets password after INCORRECT entry
delay(2000);
lcd.clear();
}
}

Tu n'aurais pas un exemple, car les flags je ne sais pas dans quelle partie du programme il faut les insérer...
Désolé mais j'ai un peu du mal avec arduino.
Merci de ton aide :slight_smile:

infobarquee:
c'est pourtant pas très compliqué a comprendre

un flag à false pour le bouton
boolean OK = false;
on entre un code en le terminant par * pour valider
si le code est faux, tu as perdu rejoue encore, flag false
OK = false;
si le code est bon, un flag à true
OK = true;
si flag true, alors le bouton est actif
if (OK == true){
faire action
}

Je ne pense pas que sa aide de remettre encore et encore le même message :-/ Heureusement j'ai trouvé quelqu'un qui a su m'expliquer et répondre à mes questions.

xCake:
Je ne pense pas que sa aide de remettre encore et encore le même message :-/ Heureusement j'ai trouvé quelqu'un qui a su m'expliquer et répondre à mes questions.

si tu n'es pas capable de comprendre une logique après deux fois le même message, comment feras tu pour ton exam et expliquer comment ca fonctionne.
de plus dans ton dernier code, il y a deux void loop.

tant mieux si quelqu'un t'as expliqué et fais le code à ta place (à mon avis).

juste comme ca vite fait pour te montrer que ca se fait en 10s, la modif

partie déclaration des variables
boolean OK = false;

...
....
.....
.....
void loop
keypad.getKey();

if (OK==true){
 Etat_bouton1 = digitalRead(BP1); // lecture de l'état logique BP1
    Etat_bouton2= digitalRead(BP2);  // lecture de l'état logique BP2
    Etat_bouton3= digitalRead(BP3);
    Etat_bouton4= digitalRead(BP4);
...
......
.....
  if (Etat_bouton4 == HIGH) {
   Mon_moteur2.step(-768);
   delay(2000);
   Mon_moteur2.step(768);
    }


fin loop


void guessPassword(){
if (password.evaluate()){
lcd.setCursor(0, 1);
lcd.print("CODE CORRECT "); //
OK = true;
....
...
lcd.clear();
}


else{
lcd.setCursor(0, 1);
lcd.print("MAUVAIS CODE ");
OK= false;

TERMINE, FAUT PAS CHERCHER MIDI A QUATORZE HEURES

dans ce cas, si tu as résolu ton problème, édite ton 1er post et ajoute dans le titre [RESOLU]
à moins que tu veuilles que quelqu'un le fasse à ta place :slight_smile:

Non il n'a pas fait le travail à ma place, il ma juste expliqué qu'il fallait rajouter la fonction "return", si le mot de passe était incorrect pour pas que la suite du programme soit exécutée.
De plus je ne cherche pas à ce que quelqu'un fasse le travail à ma place mais qu'on me donne des pistes ou que l'on m'aide, pas qu'on me renvoie une dizaine de fois le même message qu'on ne comprend pas...