[Non réglé]Besoin d'aide pour la programmation d'un code lock

Bonjour,

J’essaie de faire un programme de mot de passe à partir d’une Arduino UNO, d’un KeyPad 4x3 et d’un écran LCD 16x2. Tout mes cables sont montés sur une breadboard, pas de soucis là dessus. Mais au niveau de la programmation, je n’ai pas trouvé de solution à ce que je veux faire (malgré plusieurs heures à m’acharner et à chercher des infos sur le net ). J’ai commencé le code ( du moins ce que je sais faire ) mais je suis bloqué, donc si quelqu’un sait m’aider d’une façon ou d’une autre, ce serai super ! ( Ce que je souhaite faire est expliqué en détail dans le code ci-dessous )

Un grand merci a quiconque pourra m’aider !

Bonne soirée :grinning:

Tag’

#include <Keypad.h>

#include <LiquidCrystal.h>

LiquidCrystal lcd(6,5,4,3,2,1);

int MDP1;
int MDP2;
int MDP3;
int MDP4;

char Touches [4] [3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}};

byte Lignes[]  = {10,9,8,7};

byte Colonnes[]= {13,12,11};

Keypad Clavier = Keypad
(
  makeKeymap(Touches),
  Lignes,
  Colonnes,
  4,
  3
);

void setup() {

  lcd.begin(16,2);
  
  lcd.setCursor(0,1);
  
  lcd.print("Entrez votre MDP");
  
}

void loop() {
}
// Detécter le 1er chiffre tapé sur le clavier 4x3 ( =MDP1 )
// Afficher "*" en (6,0) sur le lcd
// Detécter le 2eme chiffre tapé sur le clavier 4x3 ( =MDP2 )
// Afficher "*" en (7,0) sur le lcd
// Detécter le 3eme chiffre tapé sur le clavier 4x3 ( =MDP3 )
// Afficher "*" en (8,0) sur le lcd
// Detécter le 4eme chiffre tapé sur le clavier 4x3 ( =MDP4 )
// Afficher "*" en (9,0) sur le lcd
// ( code: 1213)

// -------------------------------------------- //

// Si MDP1 = 1, si MDP2 = 2, si MDP3 = 1, Si MDP4=3 alors lcd.print("MDP Correct") sinnon lcd.print("MDP Incorrect").

// PS: pouvoir revenir en arrière avec * tant que l'on a pas validé le code avec #



//Merci de votre aide !! :D

slt si ça peux t’aider j’avais fait un code, il n’utilise pas la libraire Keypad.h mais une fonction je pense que ça peut te donner une idée.

/* fifi82 2015
***************************
* la led verte s'allume si le code "1515" est tapé au clavier et que l'on valide avec "#", "*" reset le code tapé 
*****************************
*/


  int eclav[12]={949,908,836,775,681,535,404,302,190,127,85,47}; // valeurs à récupérée sur les entrées A0
  int tclav[12]={1,  2,  3,  4,  5,  6,  7,  8,  9,  -3, 0, -2}; // correspondance des touches, résultat de clav()

  unsigned long pass=0;    // le mot de passe est un nombre
  boolean arclav=0;       // anti rebond du clavier évite la répétition des touches
  
void setup() {
  pinMode(13, OUTPUT);  // la led verte
}

void loop() {
  
  int ct=clav(); // lecture du clavier, -1 => pas de touche, -2 => #, -3 => * et de 0 à 9 => 0 à 9
  
  if(ct==-3) { pass=0; digitalWrite(13,0); } // reset le mot de passe avec * et éteint la led verte

  if(ct>-1){ if (!arclav) pass=pass*10+ct; arclav=1; } else arclav=0; // création du mot de passe

  if (pass==1515 && ct==-2) digitalWrite(13,1);  // si le mot de passe tapé est "2015" et "#" appuyé on allume la led verte 
               
}

int clav() {   // fonction clav retourne -1 => pas de touche, -2 => #, -3 => * et de 0 à 9 => 0 à 9
   int ret=-1, a=analogRead(A0);  // lecture de l'entrées analogique
  if (a>10) for (int i=0; i <= 11; i++) if (a < eclav[i]+15 && a> eclav[i]-15) ret=tclav[i];  // fourchette de +ou- 15
   return ret;
}

Salut,

Merci beaucoup ! Je vais essayer de m'en inspirer pour le mien.

Tag' :grin: