/* utilisation des caractères ascii de 33 à 255 */
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // bibliothèque pour gérer écran LCD 2004
LiquidCrystal_I2C lcd(0x27, 20, 4);
char tableauPass[20];
char tableauTrouve[20];
const String PassWord = "N?mHY&jdU$g6?MBP1304";
int LongueurPassWord = PassWord.length();
const String Trouve;
const int pinPoussoir = 2; // Broche du bouton poussoir
const int pinDebutRouges = 3; // Broche de la première LED rouge
/* const int pinDebutVertes = 22; // Broche de la première LED verte */
int boucleLoop = 0;
bool appuiBP = false;
unsigned long debutTempo = 0;
unsigned long finTempo = 0;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(3,0); lcd.print("B O N J O U R ");
lcd.setCursor((10 - (PassWord.length() / 2)),1); lcd.print(PassWord);
lcd.setCursor(2,2); lcd.print("BP pour demarrer");
for (int i = 0; i < LongueurPassWord; i++) {
tableauPass[i] = PassWord.charAt(i);
} // Fin de for (int i = 0; i < LongueurPassWord; i++)
tableauPass[LongueurPassWord] = '\0';
pinMode(pinPoussoir, INPUT_PULLUP);
for (int i = pinDebutRouges; i <= pinDebutRouges + 15; i++) {
pinMode(i, OUTPUT);
pinMode(i + 19, OUTPUT);
digitalWrite(i, HIGH); // Allume toutes les LEDs rouges au démarrage
digitalWrite(i + 19, LOW); // Éteint toutes les LEDs vertes au démarrage
} // Fin de for (int i = pinDebutRouges; i <= pinDebutRouges + 15; i++)
} // Fin de setup
void loop() {
if (!appuiBP && digitalRead(pinPoussoir) == LOW) {
appuiBP = true;
debutTempo = millis();
lcd.setCursor(0,2); lcd.print(" ");
} // Fin de if (!appuiBP && digitalRead(pinPoussoir) == LOW)
if (appuiBP && (boucleLoop < LongueurPassWord)){
for (int j = 33; j < 255; j++){
char asciiChar = char(j);
lcd.setCursor(boucleLoop + (10 - (PassWord.length() / 2)),2);lcd.print(asciiChar);
if (asciiChar == tableauPass[boucleLoop]){
tableauTrouve[boucleLoop] = asciiChar;
Trouve += tableauTrouve[boucleLoop];
digitalWrite(boucleLoop + pinDebutRouges, LOW);
digitalWrite(boucleLoop + pinDebutRouges + 19, HIGH);
//delay(50);
boucleLoop +=1;
if (Trouve == PassWord){
finTempo = millis();
lcd.setCursor(2, 3);
lcd.print("Temps(ms): ");
lcd.print(finTempo - debutTempo);
break;
} // Fin de if (Trouve == PassWord)
} // Fin de if (asciiChar == tableauPass[boucleLoop])
} // Fin de for (int j = 33; j < 255; j++)
} // Fin de if (appuiBP && (boucleLoop < LongueurPassWord))
} // Fin de loop