SerialEvent occurs whenever a new data comes in the
hardware serial RX. This routine is run between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
qu'en est il de "eventkeypad" il y a une exemple dans la librairie
peux tu le tester
dfgh:
je ne connais pas suffisamment "keypad"
mais si l'on se base sur "serial event" http://www.arduino.cc/en/Tutorial/SerialEvent
qu'en est il de "eventkeypad" il y a une exemple dans la librairie
peux tu le tester
je ne connais pas "serial event" pour pouvoir le tester ..
en regardant vite fait je ne suis pas sur qu'il me soit vraiment utile, mais peut être que je me trompe!!
ce que veut dire Icare, est que si tu ne fais pas appel à un void dans le loop pour changer en cours de route une fois le prog lancé, ca ne marchera pas.
si tu fais par exemple
void setup(){}
void loop(){
.....
}
void touche_appyuyee(){
}
le void touche_appyuyee ne sera jamais appelé, donc ca ne fonctionnera pas du tout.
maintenant, si tu fais comme je l'avais écrit plus haut, ca va fonctionner
void loop(){
lcd.setCursor(0, 0);
lcd.print("entrez valeur");
char key = keypad.getKey();
switch (key) {
case 1:
appel_de_ma_fonction_a faire(); // soit envoyer direct vers un void si touche 1 appuyee
break;
case 2 :
appel_de_ma_fonction_a faire_deux()
break;
}
} // fin loop
void appel_de_ma_fonction_a faire(){
lcd.setCursor(0, 1);
lcd.print("valeur entree : 1");
}
void appel_de_ma_fonction_a faire_deux(){
lcd.setCursor(0, 1);
lcd.print("valeur entree : 2");
}
sauf erreur de ma part si je fait le switch dans le loop avec la touche 1 par exemple, des que je voudrais utiliser la touche 1 ça appellera la fonction
la fonction getKey() est "non-blocking"... elle ne peut pas être utilisé dans le setup, qui ne s’exécute qu'une fois (ou il faut que la touche soit appuiée à la mis sous tension ou reset de l'arduino).
matth122:
sauf erreur de ma part si je fait le switch dans le loop avec la touche 1 par exemple, des que je voudrais utiliser la touche 1 ça appellera la fonction
oui, c'est le but du switch
mais il faut mettre un "lien" vers la fonction comme je te l'ais mis
la touche 1 me sert a d'autre chose en l’occurrence quand je rentre un N° de téléphone le 1 et le 0 sont utile,
il ne faut pas que j'attribue une fonction à ces touches en permanence
en plus j'ai 12 int susceptibles de voir leur valeur changer suivant les besoins
cela dit avec ta méthode Infobarquee, j'arrive à faire changer l'etat de mon INT
a un detail pret mon clavier n'est plus reactif et il me faut appuyer plusieur fois pour qu'il prenne en compte les appuis
matth122:
la touche 1 me sert a d'autre chose en l’occurrence quand je rentre un N° de téléphone le 1 et le 0 sont utile,
il ne faut pas que j'attribue une fonction à ces touches en permanence
en plus j'ai 12 int susceptibles de voir leur valeur changer suivant les besoins
cela dit avec ta méthode Infobarquee, j'arrive à faire changer l'etat de mon INT
a un detail pret mon clavier n'est plus reactif et il me faut appuyer plusieur fois pour qu'il prenne en compte les appuis
pour la touche 1 et 0, qu'est ce qui t'empêche de lire dans l'autre void les touches via
char key = keypad.getKey();
vu que tu sors du loop dans ce cas, ca n'a plus d'importance.
content qu'avec ma méthode ca fonctionne.
pour la réactivité, il faut peut être chercher ailleurs et voir afficher à la fin du loop le contenu de key et voir s'il ne garde pas en mémoire la dernière touche.
dans ce cas, à la fin du loop mettre un char key =" "
bon j'ai trouvé une solution qui marche et me donne satisfaction pour ce qui est de passer une INT à 0 ou à 1,
je marque donc le topic comme résolu puisque c'est ici le sujet, même si mon programme, lui, ne me donne pas satisfaction ;-(
int setSMS() {
char key = keypad.getKey();
while (key != 'E') {
switch (key)
{
case '1':
SMS = 1;
lcd.setCursor(10, 1); // affichage de test pour voir le resultat
lcd.print("ok"); // pareil
lcd.setCursor(0, 1); // affichage pour l'utilisateur pour controler que la demande a bien ete
lcd.print(SMS); // prise en compte
break;
case '0' :
SMS = 0;
lcd.setCursor(10, 1); // affichage de test pour voir le resultat
lcd.print("ok"); // pareil
lcd.setCursor(0, 1); // affichage pour l'utilisateur pour controler que la demande a bien ete
lcd.print(SMS); // prise en compte
break;
}
key = keypad.getKey();
}
return SMS;
}
il faut rajouter SMS = setSMS(); dans le programe pour que la modif soit prise en compte