Le clavier à 16 touches
Le Kit Freenove contient un clavier à 16 touches en quatre rangées et quatre colonnes.
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