IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Simuler une touche "Enter" sur un keypad 4x4


Sujet :

Arduino

  1. #1
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut Simuler une touche "Enter" sur un keypad 4x4
    Bonjour à tous,

    Je débute sur l'Arduino et en langage C.

    Je suis confronté à un problème de compréhension lorsqu'on utilise un keypad 4x4.
    Comment simule t-on une touche "Enter" pour valider un code secret par exemple.

    Si je souhaite remplacer la touche # par "enter" comment dois-je m'y prendre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (key=='#')
          alors touche enter;
     
        else 
          lcd.print(key);
    En vous remerciant pour l'aide

  2. #2
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut
    Je m'auto répond.

    Je viens de comprendre que dès que la suite de caractères tapée correspond à la condition, la suite est jouée sans appui d'une touche quelconque.

    Je n'ai donc pas besoin d'une simulation de touche "Enter".

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 273
    Points : 4 840
    Points
    4 840
    Par défaut
    Bonjour Legrandse

    Tu réfléchis en mode OS. Sauf que tu n'as pas d'OS.
    Tu mets le code a effectuer suite à l'appuis sur Enter (ou # plus exactement) directement dans le if.

    Ou tu fais une boucle dont la condition de sortie c'est l'appuis sur la touche #. La boucle traitera l'arrivée des chiffres, leur mémorisation, et quand la boucle se quitte tu traites la suite (comparaison avec le code, ouverture ou non du verrou, etc...)

    Es-tu sûr que tu reçois directement les codes ASCII des touches pressées? As-tu une biblio qui fait cela?

    Bonne journée

    Delias

  4. #4
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut
    Oui toutes les touches sont reconnues et l'écran LCD est bien configuré pour tout afficher.

    Par contre dans mon exemple avec un mot de passe "123" je ne vois pas comment éviter le message "Code incorrect" car la variable key ne peut contenir qu'un seul caractère sur le keypad (ce qui est logique)

    Donc dès que je tape "1" j'ai un code incorrect mais je ne vois pas comment lui faire attendre la suite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    char key = kpd.getKey();
     
        if (key != NO_KEY) {
     
        char code  = "123";
     
        lcd.print(key);
        delay(50);
        tone(buzzer,3000); // Send 1KHz sound signal...
        delay(30);        // 1000 for 1 sec
        noTone(buzzer);     // Stop sound...
     
     
          if (key == code){ 
          	lcd.clear();
            lcd.print("Code correct");
     
          }
          else{ 
          lcd.print("Incorrect.");
          delay(50);
          lcd.clear();
          lcd.print("Entrez code:"); 
          lcd.setCursor(0, 1);
          }
      }

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 273
    Points : 4 840
    Points
    4 840
    Par défaut
    Bonjour Legrandse

    J'ai utilisé le mot magique 3x dans mon dernier message.
    A toi de chercher un peu... Ou t'as 0 de connaissance en algorithme?
    L'implémentation peut prendre des formes très différentes en fonction de ce que fait le muC à côté.

    Delias

  6. #6
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut
    Arf décidément j'ai du mal

    Si je fait une boucle dont la condition de sortie est # je pense faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char code  = '123';
     
        while (key != '#') {
           	lcd.print(key);
            delay(50);
            tone(buzzer,3000); // Send 1KHz sound signal...
            delay(30);        // 1000 for 1 sec
            noTone(buzzer);     // Stop sound...
              // ...for 1sec
        }
    Dans ce cas si j'appuie sur 1, il m'affiche à l'infini "1" puisque je suis dans void loop()
    Bref un peu paumé quand même...

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 273
    Points : 4 840
    Points
    4 840
    Par défaut
    Non t'es dans: Réfléchis un peu plus, après avoir lu le premier caractère tu dois l'afficher, le mémoriser puis ... attendre qu'il (le premier caractère ) soit '#' c'est ce que tu fais!

    Delias

  8. #8
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut
    Je te jure j'ai presque mal à la tête. Cà fait quand même plus de 2h que je cherche.

    Je reprend pas à pas.

    Tant que la variable "key" est différente de # il affiche le contenu de la touche pressée (en l'occurence "1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char code  = '123';
     
        while (key != '#') {
           	lcd.print(key);
    Vu que je suis dans la boucle while il m'affiche en continu "1"

    J'ai beau regarder 1000 fois le code, je ne vois pas ce que je dois ajouter pour stopper la boucle.

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char key = kpd.getKey();

    peut-être que si tu mettais cette ligne dans la boucle...

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 273
    Points : 4 840
    Points
    4 840
    Par défaut
    Bonsoir Auteur, oui mais pas que.

    char key = kpd.getKey(); est une simple interrogation au moment où il est demandé.
    Donc la première boucle c'est de boucler dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    do
        key = kpd.getKey();
    while key = ""
    Ensuite on boucle autour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    do
        do
            key = kpd.getKey();
        while key = ""
        Traitement de la touche pressée et mémorisation (passe = passe + Key)
    while len(passe)<len(code) / Key != "#"
    Et au final on boucle après chaque traitement du mot de passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Loop(){
        do
            do
                key = kpd.getKey();
            while key = ""
            Traitement de la touche pressée et mémorisation (passe = passe + Key)
        while len(passe)<len(code) / Key != "#"
        If passe = code then
           Traitement mot de passe correct;
        else
           Traitement mot de passe incorrect;
        Remise à 0 des variables modifiées pendant les boucles.
    } //end Loop()
    Sauf que dans son code de base il fait la modification de deux boucles imbriquées en une boucle avec un if:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do
    { code boucle intérieur
    if condition de sortie de la boucle
        code boucle extérieur;
    }while true
    Ce qui est parfois nécessaire en uC mais pas pédagogique pour un sous.

    Bonne Nuit

    Delias

  11. #11
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut
    Un grand merci pour ton aide car je pense bien que j'aurais eu beaucoup de mal à trouver seul.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Appuyer sur un bouton Webbrowser / simuler une touche
    Par antho0903 dans le forum VB.NET
    Réponses: 0
    Dernier message: 29/08/2012, 14h28
  2. Simuler une touche clavier
    Par micky13 dans le forum Langage
    Réponses: 9
    Dernier message: 17/04/2006, 20h08
  3. [Applet]simuler une touche clavier
    Par mat10000 dans le forum Interfaces Graphiques en Java
    Réponses: 19
    Dernier message: 12/12/2003, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo