Pages: [1]   Go Down
Author Topic: Keypad sur ecran LCD série (web4robot.com)  (Read 466 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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:
Code:
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......
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Bon déjà pour pouvoir résoudre ton probléme il nous faudrait plus de détails sur le matériels utilisé, ainsi que le code complet.

Sinon tu dis que ton écran / keypas est à 15m de l'arduino !?
Tu doit avoir des problémes à cause de la distance, a tu fait des essai sur des distances inférieur au mètre ?
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pour le moment tout est à proximité, mais une fois installé l'afficheur et le clavier seront à environ 15m. mais là n'est pas encore le problème.

Le keypad que j'utilise est un clavier matriciel 4x4 qui est branché directement sur la carte de communication de l'afficheur
http://web4robot.com/SerialLCD.html

L'arduino est connecté par le port série.

Pour mon problème j'ai trouvé une première solution qui ne me satisfait qu'à moitié.....
J'ai mis en place un compteur qui me permet de ne prendre en compte qu'une pression sur le clavier
Lorsque ma variable est égale à 1 je prend en compte la pression, puis la variable s'incrémente jusqu'à atteindre une valeur assez importante pour ne plus avoir le rebond......et elle se remet à 0....

C'est un peu du bricolage mais ça fonctionne.
N'y a t'il pas moyen de faire une sorte de filtre anti-rebond électroniquement (je pense à des résistances pullup ou un truc du style...)




Logged

Pages: [1]   Go Up
Jump to: