Le clavier \xE0 16 touches
Le Kit Freenove contient un clavier \xE0 16 touches en quatre rang\xE9es et quatre colonnes.
Quand une touche est press\xE9e une connexion s'\xE9tablit entre une rang\xE9e et une colonne. Si on trouve la rang\xE9e et la colonne concern\xE9e on trouve la touche correspondante. Pour la recherche de connexion, on peut connecter par exemple les quatre pins des rang\xE9es \xE0 quatre pins GPIO programm\xE9 en sortie et les quatre pins des colonnes sur des pins GPIO programm\xE9 en entr\xE9e avec des r\xE9sistances "pull-up".
On met le pin GPIO de la premi\xE8re range \xE0 z\xE9ro et on v\xE9rifie si on trouve un niveau 0 sur une des colonnes, dans quel cas on a trouv\xE9 la touche qui a \xE9t\xE9 actionn\xE9. Sinon on essaie la m\xEAme proc\xE9dure avec la deuxi\xE8me rang\xE9e, etc. Si on ne trouve aucune connexion, alors aucune touche a \xE9t\xE9 pouss\xE9e.
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\xE9 avec D4 sur la carte CPU |
| Col 2 |
D3: GPIO 17 sur WROVER: GPIO 4 court-circuit\xE9 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 \xE9t\xE9 press\xE9e.
Exercice 2 :
Attendre que la touche a \xE9t\xE9 rel\xE2ch\xE9 avant d'imprimer le r\xE9sultat. Ceci donne une seule valeur de touche pour chaque activation d'une touche.
Exercice 3 :
\xC9crire une classe CircularBuffer qui impl\xE9mente un tampon circulaire qui stocke les touches press\xE9es. Ceci permet de lire le clavier d'une mani\xE8re enti\xE8rement asynchrone (voir exercice 4).
La classe CircularBuffer doit \xEAtre bas\xE9 sur un tampon de 32 \xE9l\xE9ments avec les m\xE9thodes suivants :
- write: ajouter un \xE9l\xE9ment \xE0 la fin du tampon. V\xE9rifier si le tampon est d\xE9j\xE0 plein avant d'\xE9crire et mettre un drapeau de d\xE9passement si c'est le cas.
- read: lire un \xE9l\xE9ment 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\xE9rifier s'il avait une tentative d'\xE9crire le tampon qui \xE9tait plain.
- clr_overrun: remettre le drapeau overrun \xE0 z\xE9ro
- flush: efface le tampon
\xC9crire un programme de test qui v\xE9rifie que la classe CircularBuffer se comporte comme attendu.
Exercice 4 :
Lire le clavier dans une routine d'interruption. Garder la touche press\xE9e dans le tampon circulaire de l'exercice 3.
\xC9crire un programme de test qui d\xE9marre le pilote du clavier en interruption et qui lit du tampon circulaire les touches press\xE9s. Utiliser les intervalles assez longs entre les lectures (p. e. 5-10 s).
-- %USERSIG{UliRaich - 2021-12-08}%