où insérer un delay dans ce code?

https://drive.google.com/file/d/1pzzoq8AkqqqS7tu1ScosqLsLSFrAgdf8/view?usp=sharing

bonjour, j'ai effectué ce montage que j'ai trouvé sur internet, le problème c'est que la led verte (décrite ainsi sur le code mais rouge sur mon montage), reste allumé après que le password ait été entré,tre j'ai essayé de changer le code en ajoutant à la fin: if greenled high, delay 5000, greenled low; la led s'éteind mais l'autre ne se rallume pas; je voudrai mettre, à la place de cette led, un relais puis une gachette electrique et utiliser le tout sur ma boite à lettre car on me pique mes colis.
quelqu'un peut il m'aider pour ajouter ce délais après avoir entré le code? un delais de 5000 ms.
si c'est possible, je voudrai aussi faire défiler la première ligne de l'écran LCD afin de faire défiler mon nom, adresse et numéro de logement. j'y suis parvenu mais ce sont les deux ligne qui défile et trop vite.
je suis novice evidemment je n'ai que 2 mois d'apprentissage pendant mes loisir.
merci pour votre aide.

sketch_aug26b.ino (2.21 KB)

Bonjour magmasanne

Avez vous vérifié le câblage de vos leds?

Cordialement,
bidouilleelec

hello
+1 avec bidouilleelec
as tu branché tes led en inverse, si oui, il faut inverser les ordre : HIGH devient LOW et LOW devient HIGH

ton cahier des charges est confus. tout est là pour ouvrir la porte après l'entrée du 4 ème chiffre correct.
tu ouvres la serrure( led) et tu affiches ok suivi de 2 tempos de 3 secondes.
puis le prg reprends sa loop et tu refermes la serrure. et si la porte n'a pas été fermée ? la serrure verrouillée empêchera la porte d’être fermée après tes 6 secondes.

autrement, j'ai tenté un code pour le défilement de la 1 ère ligne, a toi de voir si c'est satisfaisant:

/* Arduino Security System with the Keypad and LCD
   Creator Mert Kılıç - Mert Arduino Tutorial and Project
   Please subscribe for support
   Thanks
*/

#include <LiquidCrystal.h> //include LCD library (standard library)
#include <Keypad.h> //include keypad library - first you must install library (library link in the video description)

#define redLED 10 //define the LED pins
#define greenLED 11

char nom [] {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
             'L', ' ', 'M', 'A', 'R', 'I', 'O', 'N', ' ', '4', ' ', 'R', 'u', 'e',
             ' ', 'M', 'a', 'c', 'h', 'i', 'n', ' ', 'T', 'r', 'u', 'c', ' ', 'C',
             'h', 'o', 's', 'e',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
char* password = "3945"; //create a password
int pozisyon = 0; //keypad position

const byte rows = 4; //number of the keypad's rows and columns
const byte cols = 4;

char keyMap [rows] [cols] = { //define the cymbols on the buttons of the keypad

  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins [rows] = {1, 2, 3, 4}; //pins of the keypad
byte colPins [cols] = {5, 6, 7, 8};
//byte rowPins [rows] = {A1, A2, A3, A4}; //pins of the keypad
//byte colPins [cols] = {A5, A6, A7, A8};
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols);

LiquidCrystal lcd (A0, A1, A2, A3, A4, A5); // pins of the LCD. (RS, E, D4, D5, D6, D7)
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
  Serial.begin(115200);
  lcd.begin(16, 2);
  pinMode(redLED, OUTPUT);  //set the LED as an output
  pinMode(greenLED, OUTPUT);
  setLocked (true); //state of the password
}

void loop() {
lcd.setCursor(0, 1);
  lcd.print(" Enter Password");
for (int f = 1; f < 50; f++) {
    lcd.setCursor(0, 0);
    for (int t = 1; t < 17; t++) {
      lcd.write(nom[f + t]);delay(20);// Serial.println(nom[f]); 
    }
  saisie_code();//Serial.println(nom[f]);
 }     
      lcd.setCursor(0, 1);
      lcd.print(" Enter Password");
}
void saisie_code()
{//Serial.print(password [pozisyon+1]);Serial.print("....");Serial.println(pozisyon); 
      char whichKey = myKeypad.getKey(); //define which key is pressed with getKey
      if (whichKey == '*' || whichKey == '#' || whichKey == 'A' ||      //define invalid keys
          whichKey == 'B' || whichKey == 'C' || whichKey == 'D') {

        pozisyon = 0;//Serial.println(pozisyon); 
        setLocked (true);                       //on ferme
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("  Invalid Key!");
        delay(1000);
        lcd.clear();
      }
      if (whichKey == password [pozisyon]) { //si le chiffre attendu est ok, on incremente le compteur 

        pozisyon ++;
      }
      if (pozisyon == 4) {                      //si le compteur = 4
        setLocked (false);                      //on ouvre
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("*** Verified ***");
        delay(3000);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("  MERCI");
        lcd.setCursor(0, 1);
        lcd.print("GOOD DAY");
        delay(3000);
        lcd.clear();
      }
      delay(100);
    }

    void setLocked(int locked) {
      if (locked) {                   //on ferme
        digitalWrite(redLED, HIGH);
        digitalWrite(greenLED, LOW);
      }
      else {                        //on ouvre
        digitalWrite(redLED, LOW);
        digitalWrite(greenLED, HIGH);
      }
    }
    //c'est que la led verte , reste allumée après que le password ait été entré,

Bonjour;

/* Arduino Security System with the Keypad and LCD 
 * Creator Mert Kılıç - Mert Arduino Tutorial and Project
 * Please subscribe for support
 * Thanks
 */

#include <LiquidCrystal.h> //include LCD library (standard library)
#include <Keypad.h> //include keypad library - first you must install library (library link in the video description)

#define redLED 10 //define the LED pins
#define greenLED 11

char* password ="3945"; //create a password
int pozisyon = 0; //keypad position

const byte rows = 4; //number of the keypad's rows and columns
const byte cols = 4;

char keyMap [rows] [cols] = { //define the cymbols on the buttons of the keypad

  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins [rows] = {1, 2, 3, 4}; //pins of the keypad
byte colPins [cols] = {5, 6, 7, 8};

Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols);

LiquidCrystal lcd (A0, A1, A2, A3, A4, A5); // pins of the LCD. (RS, E, D4, D5, D6, D7)

void setup(){

  lcd.begin(16, 2);
  pinMode(redLED, OUTPUT);  //set the LED as an output
  pinMode(greenLED, OUTPUT);
  setLocked (true); //state of the password
}

void loop(){

  char whichKey = myKeypad.getKey(); //define which key is pressed with getKey

  lcd.setCursor(0, 0);
  lcd.print("   L MARION 4");
  lcd.setCursor(0, 1);
  lcd.print(" Enter Password");

  if(whichKey == '*' || whichKey == '#' || whichKey == 'A' ||       //define invalid keys
  whichKey == 'B' || whichKey == 'C' || whichKey == 'D'){

    pozisyon=0;
    setLocked (true);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("  Invalid Key!");
    delay(1000);
    lcd.clear();
  }
  if(whichKey == password [pozisyon]){

    pozisyon ++;
  }
  if(pozisyon == 4){
    setLocked (false);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("*** Verified ***");
    delay(3000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("  MERCI");
    lcd.setCursor(0, 1);
    lcd.print("GOOD DAY");
    delay(3000);
    lcd.clear();
  }
  delay(100);
}

void setLocked(int locked){
  if(locked){
    digitalWrite(redLED, HIGH);
    digitalWrite(greenLED, LOW);
    }
    else{
      digitalWrite(redLED, LOW);
      digitalWrite(greenLED, HIGH);
    }
  }

je vais remplacer la led rouge par un relais plus une serrure électrique, et mettre cette serrure sur ma boite à lettre, mais je voudrais que la led (lumière) verte s'éteigne après un délais de 5000ms afin que le solénoïde ne chauffe pas si le facteur oublie d'appuyer sur A,B,C ou D pour réinitialiser.
https://drive.google.com/file/d/1pzzoq8AkqqqS7tu1ScosqLsLSFrAgdf8/view?usp=sharing
j'ai essayé de mettre en bas du code: if (greenLED); digitalWrite(greenLED, HIGH); delay(5000); digitalWrite(greenLED, LOW);
ça fonctionne mais l'autre led ne se rallume pas.
je voudrai aussi faire défiler la première ligne de l'écran LCD afin d'y mettre plus d'info mais je pense pouvoir me débrouiiler, j'ai fait des essais presque concluant mais ça défile trop vite.
sinon, faire un reset de l'arduino 5 secondes après l'entré du password, c'est possible ou mieux?
Désolé d'être autand novice, je n'ai que mes loisirs pour apprendre et je n'ai que deux mois d'apprentissage, mais j'avance petit à petit.
merci pour votre aide.

Hello

je me demande pourquoi je t'ai répondu ICI , tu ne lis pas les réponses

Bonjour
Il serait plus simple pour nous que tu expliques ce que doit faire le code plutôt que nous laisser avec quelques questions et un listing à décortiquer...

Là, tel que je comprends le code, il suffit de taper n'importe quel chiffre autour du password et ça ouvrira la boite à lettres. Par exemple, le pass étant "3945", si on tape "22232222292222425" ça devrait ouvrir.

Tu devrais chercher un code qui fonctionne, on en trouve un peu partout sur Internet, sinon tu utilises un tableau de char que tu remplis à chaque fois qu'une touche est enfoncée et tu vérifies à la fin que le pass correspond à ce qui est dans le tableau.

Au passage, tu peux alléger ta fonction :

void setLocked(boolean locked){
  digitalWrite(redLED, locked);
  digitalWrite(greenLED, !locked);
}

bonjour , la question est plus claire rédigée ainsi mais en ce qui me concerne c'est encore un peu flou

notamment rapport a la modification que vous voulez apporté:

logiquement si je traduit if locked = si verrouillé la LED rouge est allumé et la LED verte éteinte

on est d 'accord a ce niveau on ne change rien .
cela veut dire que si votre module relais est connecté a la place de la LED verte la gâche n'est pas alimentée

la boite au lettre est verrouillée.

else traduction si autres cas , notamment si la boite est deverouillée , dans ce cas :
la led rouge passe a 0 et la led verte s' allume
c' est donc bien dans la portion entre acolade desuite aprés else que vous avez fait votre modif et pas dans l'accolade desuite aprés if.?

dfgh:
Hello

je me demande pourquoi je t'ai répondu ICI , tu ne lis pas les réponses

Fusion.....

/* Arduino Security System with the Keypad and LCD
   Creator Mert Kılıç - Mert Arduino Tutorial and Project
   Please subscribe for support
   Thanks
*/

#include <LiquidCrystal.h> //include LCD library (standard library)
#include <Keypad.h> //include keypad library - first you must install library (library link in the video description)

#define redLED 10 //define the LED pins
#define greenLED 11

char nom [] {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
             'L', ' ', 'M', 'A', 'R', 'I', 'O', 'N', ' ', '4', ' ', 'R', 'u', 'e',
             ' ', 'M', 'a', 'c', 'h', 'i', 'n', ' ', 'T', 'r', 'u', 'c', ' ', 'C',
             'h', 'o', 's', 'e',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
char* password = "3945"; //create a password
int pozisyon = 0; //keypad position

const byte rows = 4; //number of the keypad's rows and columns
const byte cols = 4;

char keyMap [rows] [cols] = { //define the cymbols on the buttons of the keypad

  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins [rows] = {1, 2, 3, 4}; //pins of the keypad
byte colPins [cols] = {5, 6, 7, 8};
//byte rowPins [rows] = {A1, A2, A3, A4}; //pins of the keypad
//byte colPins [cols] = {A5, A6, A7, A8};
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols);

LiquidCrystal lcd (A0, A1, A2, A3, A4, A5); // pins of the LCD. (RS, E, D4, D5, D6, D7)
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
  Serial.begin(115200);
  lcd.begin(16, 2);
  pinMode(redLED, OUTPUT);  //set the LED as an output
  pinMode(greenLED, OUTPUT);
  setLocked (true); //state of the password
}

void loop() {
lcd.setCursor(0, 1);
  lcd.print(" Enter Password");
for (int f = 1; f < 50; f++) {
    lcd.setCursor(0, 0);
    for (int t = 1; t < 17; t++) {
      lcd.write(nom[f + t]);delay(20);// Serial.println(nom[f]); 
    }
  saisie_code();//Serial.println(nom[f]);
 }     
      lcd.setCursor(0, 1);
      lcd.print(" Enter Password");
}
void saisie_code()
{//Serial.print(password [pozisyon+1]);Serial.print("....");Serial.println(pozisyon); 
      char whichKey = myKeypad.getKey(); //define which key is pressed with getKey
      if (whichKey == '*' || whichKey == '#' || whichKey == 'A' ||      //define invalid keys
          whichKey == 'B' || whichKey == 'C' || whichKey == 'D') {

        pozisyon = 0;//Serial.println(pozisyon); 
        setLocked (true);                       //on ferme
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("  Invalid Key!");
        delay(1000);
        lcd.clear();
      }
      if (whichKey == password [pozisyon]) { //si le chiffre attendu est ok, on incremente le compteur 

        pozisyon ++;
      }
      if (pozisyon == 4) {                      //si le compteur = 4
        setLocked (false);                      //on ouvre
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("*** Verified ***");
        delay(3000);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("  MERCI");
        lcd.setCursor(0, 1);
        lcd.print("GOOD DAY");
        delay(3000);
        lcd.clear();
      }
      delay(100);
    }

    void setLocked(int locked) {
      if (locked) {                   //on ferme
        digitalWrite(redLED, HIGH);
        digitalWrite(greenLED, LOW);
      }
      else {                        //on ouvre
        digitalWrite(redLED, LOW);
        digitalWrite(greenLED, HIGH);
      }
    }
    //c'est que la led verte , reste allumée après que le password ait été entré,

Bonjour et merci pour vos réponses, je n'ai pas pu venir avant car je bosse.
merci à dfgh pour le défilement mais quelque chose gêne l'introduction du password, il semble que la ligne 123A ne fonctionne pas, j'ai changé le password en mettant 9999, il faut entrer 2 fois le password pour que ça marche.
mes branchements sont correct, je me suis peut être mal expliqué: mon problème c'est la led verte qui reste allumé après que le password ait été entré, je voudrai qu'elle s'éteigne au bout de 5 secondes comme pour revenir au debut du programme.
Le solénoïde que je vais branché sur la led verte va chauffer si ce circuit ne s'ouvre pas automatiquement au bout de 5 secondes. j'ai tenté beaucoup de chose mais ça ne fonctionne pas, reset password, delay ect,
voici une nouvelle video qui montre l'ensemble de ce que je veux faire:

hello
désolé, mais je ne dispose pas d'un clavier. donc pas possible d'affiner le code de défilement du texte.
par contre, en fouillant dans les exemple de la librairie, il y a un exemple "scroll" qui te montre une décalage à droite et à gauche.

pour l'impulsion que tu veux donner à la gache de ta serrure, pourquoi ne pas la faire dans la fonction d'ouverture/fermeture
non testée, mais ça doit rouler

 void setLocked(int locked) {
      if (locked) {                   //on ferme
        digitalWrite(redLED, HIGH);
        digitalWrite(greenLED, LOW);
      }
      else {                        //on ouvre
        digitalWrite(redLED, LOW);
        digitalWrite(greenLED, HIGH);
        delay(2000);                  //impulsion de 2 secondes sur la led/gache/solenoide
        digitalWrite(redLED, LOW);
        digitalWrite(greenLED, HIGH);
      }
    }
#include <Password.h>
#include <LiquidCrystal.h>
#include <Keypad.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Password password = Password("1337");
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
// Define the Keymap
char keys[ROWS][COLS] = {
    {'1', '2', '3', 'A',},
    {'4', '5', '6', 'B',},
    {'7', '8', '9', 'C',},
    {'*', '0', ' ', 'D',}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = {39, 38, 37, 36}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {43, 42, 41, 40}; //connect to the column pinouts of the keypad
const int buttonPin = 52;
int buttonState = 0;

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

#define ledPin 13

void setup() {
    lcd.begin(16, 2);
    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW); // sets the LED on
    Serial.begin(9600);
    keypad.addEventListener(keypadEvent); //add an event listener for this keypad
    keypad.setDebounceTime(250);
}

void loop() {
    keypad.getKey();
    buttonState = digitalRead(buttonPin);

    // check if the pushbutton is pressed.
    // if it is, the buttonState is HIGH:
    if (buttonState == HIGH) {
        // turn LED on:    
    } else {
        // turn LED off:
        lcd.clear();
        password.reset();
    }
}

//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()) {

        digitalWrite(ledPin, HIGH);
        delay(2000);
        lcd.setCursor(0, 1);
        lcd.print("VALID PASSWORD");
        password.reset();
        delay(600);
        lcd.clear();
        lcd.setCursor(0, 1);
        lcd.print("Welcome");
        delay(2000);
        lcd.clear();
        digitalWrite(ledPin, LOW);
    } else {
        digitalWrite(ledPin, LOW);
        lcd.setCursor(0, 1);
        lcd.print("INVALID PASSWORD");
        password.reset();
        delay(2000);
        lcd.clear();
    }
}

Bonjour gfgh, merci pour ta réponse, mais j'ai déja essayé, ça ne fonctionne pas car la led rouge ne se rallume pas et on ne peut plus insérer à nouveau le code.
en faite il faudrait faire un reset après les 5 secondes suivant l'allumage de la led verte.
j'ai trouvé le code ci dessus sur internet, j'ai effectué le montage sans l'ecran 20.4 que je ne possède pas et la led s'éteint au bout de quelque seconde. il faudrait que je m'en inspire pour corriger mon code mais je vais galérer car je n'ai pas encore assez de connaissance, crois tu que c'est possible? où se trouve le délais de reinitialisation dans ce code?
est ce ça?
} else {
digitalWrite(ledPin, LOW);
lcd.setCursor(0, 1);
lcd.print("INVALID PASSWORD");
password.reset();
delay(2000);
lcd.clear();
en tout cas, j'y ai passé tout mon samefi après midi et soir, je n'ai pas trouvé la soluce, j'ai trouvé ce code hier, je n'ai pas eu le temps de me pencher dessus.
pour le défilement, j'ai l'impression que c'est le temps de défilement qui empêche d'entrer le code, c'est possible?
A bientôt. Merci

je reste sur ton premier code
nous sommes bien d'accord pour dire que pour allumer une led, tu dois mettre la sortie à LOW

c'est bien ça et pas l'inverse?

pour le texte, tu affiches 17 caracteres à l'écran puis tu vas lire le clavier
mais dans la boucle des 17 caracteres, tu as une tempo de 20 ms pour que tu ai le temps de lire le texte.
ce qui veut dire que tu vas lire le clavier toutes les 17*20=340ms soit 3 fois par secondes.

il faut donc rester appuyé au moins 350ms pour etre sur que la touche appuyée sera vue.

tu peux tester en raccourcissant la tempo de 20 ms

testes ce code pour la tempo de 2 secondes pour la gache

/* Arduino Security System with the Keypad and LCD
   Creator Mert Kılıç - Mert Arduino Tutorial and Project
   Please subscribe for support
   Thanks
*/

#include <LiquidCrystal.h> //include LCD library (standard library)
#include <Keypad.h> //include keypad library - first you must install library (library link in the video description)

#define redLED 10 //define the LED pins
#define greenLED 11

char nom [] {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
             'L', ' ', 'M', 'A', 'R', 'I', 'O', 'N', ' ', '4', ' ', 'R', 'u', 'e',
             ' ', 'M', 'a', 'c', 'h', 'i', 'n', ' ', 'T', 'r', 'u', 'c', ' ', 'C',
             'h', 'o', 's', 'e',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
char* password = "3945"; //create a password
int pozisyon = 0; //keypad position

const byte rows = 4; //number of the keypad's rows and columns
const byte cols = 4;

char keyMap [rows] [cols] = { //define the cymbols on the buttons of the keypad

  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins [rows] = {1, 2, 3, 4}; //pins of the keypad
byte colPins [cols] = {5, 6, 7, 8};
//byte rowPins [rows] = {A1, A2, A3, A4}; //pins of the keypad
//byte colPins [cols] = {A5, A6, A7, A8};
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols);

LiquidCrystal lcd (A0, A1, A2, A3, A4, A5); // pins of the LCD. (RS, E, D4, D5, D6, D7)
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
  Serial.begin(115200);
  lcd.begin(16, 2);
  pinMode(redLED, OUTPUT);  //set the LED as an output
  pinMode(greenLED, OUTPUT);
  setLocked (true); //state of the password
}

void loop() {
lcd.setCursor(0, 1);
  lcd.print(" Enter Password");
for (int f = 1; f < 50; f++) {
    lcd.setCursor(0, 0);
    for (int t = 1; t < 17; t++) {
      lcd.write(nom[f + t]);delay(20);// Serial.println(nom[f]); 
    }
  saisie_code();//Serial.println(nom[f]);
 }     
      lcd.setCursor(0, 1);
      lcd.print(" Enter Password");
}
void saisie_code()
{//Serial.print(password [pozisyon+1]);Serial.print("....");Serial.println(pozisyon); 
      char whichKey = myKeypad.getKey(); //define which key is pressed with getKey
      if (whichKey == '*' || whichKey == '#' || whichKey == 'A' ||      //define invalid keys
          whichKey == 'B' || whichKey == 'C' || whichKey == 'D') {

        pozisyon = 0;//Serial.println(pozisyon); 
        setLocked (true);                       //on ferme
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("  Invalid Key!");
        delay(1000);
        lcd.clear();
      }
      if (whichKey == password [pozisyon]) { //si le chiffre attendu est ok, on incremente le compteur 

        pozisyon ++;
      }
      if (pozisyon == 4) {                      //si le compteur = 4
        setLocked (false);                      //on ouvre
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("*** Verified ***");
        delay(3000);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("  MERCI");
        lcd.setCursor(0, 1);
        lcd.print("GOOD DAY");
        delay(3000);
        lcd.clear();
      }
      delay(100);
    }

   void setLocked(int locked) {
      if (locked) {                   //on ferme
        digitalWrite(redLED, HIGH);
        digitalWrite(greenLED, LOW);
      }
      else {                        //on ouvre
        digitalWrite(redLED, LOW);
        digitalWrite(greenLED, HIGH);
        delay(2000);                  //impulsion de 2 secondes sur la led/gache/solenoide
        digitalWrite(redLED, HIGH);
        digitalWrite(greenLED, LOW);
      }
    }

Merci dfgh mais le changement que tu as fait avec le défilement empeche le fonctionnement du password, voir video:

par contre, j'ai remis mon code d'origine avec un delay( 5000); placé après else comme tu l'as écrit et ça marche!
C'est fou parce que je l'avais déjà testé à cette endroit mais quelque chose n'allait pas, je l'ai placé partout ce delay5000, j'y ai passé des heures. Bref, je retiens de cette leçon qu'il faut vérifier au moins 2 fois chaque essai.
évidemment, il faut appuyer sur une touche rouge pour pouvoir entrer à nouveau le code mais ce n'est pas grave, le facteur passe qu'une fois et j'ai notifié sur le lcd reset ABC ou D et quand on appuie sur une touche rouge il affiche enter password. donc j'ai ce qu'il me faut, je vais le monter sur arduino nano et peut être aussi sur un détecteur de mouvement car il consomme entre 54 et 56.7 mA, 1.72A lorsque le solénoïde est en action. Je crains devoir utiliser une batterie de moto. qu'en penses tu?
Merci pour ton aide, souvent je n'ai pas de réponse. au début, fin mai, j'ai commencé avec un esp 8266, j'ai mis 2 mois pour réussir, mon problème était que je n'attendais pas la fin du téléversement qui prenait des plombes, je croyais que le téléversement était bloqué pour x raison. un jour je suis parti en laissant le téléversement et à mon retour, l'esp fonctionnait. J'ai bcq de patience.
A bientôt surement. bye