Bonjour,
Je me casse la tête depuis plusieurs jours pour utiliser le keypad (4x4) en passant par l'interface série (car 15m sépareront la carte de l'écran) de l'écran LCD.
Je n'ai a priori pas de problème pour utiliser l'écran.... par contre j'ai un souci avec le keypad. Je n'arrive pas à "enregistrer" dans une variable le code tapé.
Si je tape "123" (en prenant le temps) je me retrouve avec "112233". J'ai réussi à limiter le problème en mettant un gros delay... mais il faut que j'attende près de 3 secondes entre chaque frappe......
Pour lire la valeur retournée par le clavier il faut envoyé un code à l'écran puis lui demandé de lire.... du type:
Serial.print(0xFE);
Serial.print(0x1b);
a = Serial.read()
J'ai l'impression que le buffer n'est pas immédiatement effacé après lecture et que du coup au passage suivant il me remet la même valeur..... d'où quelques questions....
Peut on effacer le buffer ?
Le buffer fonctionne t'il valeur par valeur ?...
Si non comment fait on pour lire plusieurs valeurs les unes après les autres??
voila un extrait du code qui pose pb:
void loop() {
curseurdebut();
ecouteclavier();
if (incomingByte>0){ //incomingByte est attribué dans la fonction ecouteclavier() par un Serial.read() comme expliqué ci-dessus
tone(pinbuzzer, 440, 200); // pour avoir un son sur chaque touche
conversionclavier(incomingByte);
incomingByte=0;
Videecran();
if (caractere == "#") { // ou caractere = "#" ou incomingByte =12
//la touche # a ete actionne, on valide le code et on compare......
if (codearmement == codesaisi) { //compare le code saisi au code d'armement
Serial2.print("Alarme armée");
codesaisi=String("");
Armement(); // lance la procédure d'armement
//delay(500);
}
else
{
//code faux
placecurseur(1,0);
Serial2.print(" valeur codesaisi ");
placecurseur(2,0);
Serial2.print(codesaisi);
placecurseur(3,0);
Serial2.print(" code Faux ");
codesaisi=String("");
Buzzer(3);
delay(500);
// déclenchement de l'alarme après 5 code faux//////////////////////
if(compteurcodefaux == 5) {
Videecran();
Serial2.print("5eme tentative");
delay(100);
alarme=1;
compteurcodefaux =0;
}
compteurcodefaux++;
}
}
else
//construction du code
{
codesaisi = String(codesaisi + caractere);
Videecran();
Serial2.print("valeur codesaisi ");
Serial2.print(codesaisi);
placecurseur(1,0);
Serial2.print("code <4 caracteres");
placecurseur(2,0);
Serial2.print("longueur codesaisi=");
Serial2.print(codesaisi.length());
delay(500);
}
}
}
Je vous remercie de prendre un peu de temps pour m'aider à avancer......