Tags:
create new tag
view all tags

Le clavier à 16 touches

Le Kit Freenove contient un clavier à 16 touches en quatre rangées et quatre colonnes.

keypad.png 4X4-Keypad-Schematic.png
Quand une touche est pressée une connexion s'établit entre une rangée et une colonne. Si on trouve la rangée et la colonne concernée on trouve la touche correspondante. Pour la recherche de connexion, on peut connecter par exemple les quatre pins des rangées à quatre pins GPIO programmé en sortie et les quatre pins des colonnes sur des pins GPIO programmé en entrée avec des résistances "pull-up".

On met le pin GPIO de la première range à zéro et on vérifie si on trouve un niveau 0 sur une des colonnes, dans quel cas on a trouvé la touche qui a été actionné. Sinon on essaie la même procédure avec la deuxième rangée, etc. Si on ne trouve aucune connexion, alors aucune touche a été poussée.

J'ai fait les connexions suivantes :

Row 1 D7: GPIO 23
Row 2 D6: GPIO 19
Row 3 D5: GPIO 18
Row 4 D0: GPIO 26
Col 1 D4: GPIO 16 sur WROVER: GPIO 25 court-circuité avec D4 sur la carte CPU
Col 2 D3: GPIO 17 sur WROVER: GPIO 4 court-circuité avec D3 sur la carte CPU
Col 3 D2: GPIO 21
Col 4 D1: GPIO 22

Exercice 1 :

Analyser le clavier dans des intervalles de 100 ms et imprimer la touche qui a été pressée.

Exercice 2 :

Attendre que la touche a été relâché avant d'imprimer le résultat. Ceci donne une seule valeur de touche pour chaque activation d'une touche.

Exercice 3 :

Écrire une classe CircularBuffer qui implémente un tampon circulaire qui stocke les touches pressées. Ceci permet de lire le clavier d'une manière entièrement asynchrone (voir exercice 4).

La classe CircularBuffer doit être basé sur un tampon de 32 éléments avec les méthodes suivants :

  • write: ajouter un élément à la fin du tampon. Vérifier si le tampon est déjà plein avant d'écrire et mettre un drapeau de dépassement si c'est le cas.
  • read: lire un élément du tampon s'il n'est pas vide
  • is_full: retourne True si le tampon est plein, False dans le cas contraire
  • overrun: permet de vérifier s'il avait une tentative d'écrire le tampon qui était plain.
  • clr_overrun: remettre le drapeau overrun à zéro
  • flush: efface le tampon
Écrire un programme de test qui vérifie que la classe CircularBuffer se comporte comme attendu.

Exercice 4 :

Lire le clavier dans une routine d'interruption. Garder la touche pressée dans le tampon circulaire de l'exercice 3.

Écrire un programme de test qui démarre le pilote du clavier en interruption et qui lit du tampon circulaire les touches pressés. Utiliser les intervalles assez longs entre les lectures (p. e. 5-10 s).

-- Uli Raich - 2021-12-08

Comments

Topic attachments
I Attachment History Action Size Date Who Comment
PNGpng 4X4-Keypad-Schematic.png r1 manage 14.6 K 2021-12-08 - 20:05 UliRaich  
PNGpng keypad.png r1 manage 115.6 K 2021-12-08 - 20:05 UliRaich  
Topic revision: r1 - 2021-12-08 - UliRaich
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback