Librairie Keyboard (utilisation, explication et conversion AZERTY)

Nous avons vu comment accéder aux touches du clavier, concernant les caractères imprimables; maintenant voyons comment utiliser les touches de commandes.

Le site Arduino les listent sur leur site, ils sont appelés 'Keyboard Modifiers', consultable ici:
https://www.arduino.cc/en/Reference/KeyboardModifiers

En fait si vous regardez bien, on comprend que les valeurs supérieures à 0x87 ne sont pas les valeurs réelles, il a été ajouté la valeur 0x88 à la valeur réelle comme nous l'avons vu précédemment. C'est le codage utilisé dans le fichier Keyboard.cpp qui l'impose.

Par exemple, la touche BackSpace (retour arrière) à la valeur réelle 0x2A hexa ou 42 en décimal, si on lui ajoute la valeur 0x88, on obtient 0xB2, soit bien la valeur déclarée dans les fichiers de la librairie.

Les valeurs allant de 0x80 à 0x87 ne sont pas non plus les valeurs réelles mais cela n'aura pas d'impact pour nous. On pourra utiliser toutes ces valeurs sans difficulté.

Réalisation d'un clavier:

Si l'on désire concevoir un clavier avec un montage arduino, choses que je n'ai pas réalisé, il faudra faire attention à l'utilisation des matrices qui ne permettent pas d'exploiter deux appuis sur deux touches en même temps. Il sera alors nécessaire de séparer certaines touches des autres dans la gestion du code comme les deads key ^ , ¨ , ~ , ` le shift et le Ctrl + Alt

Concernant le clavier numérique, on pourra aussi le simuler; encore une fois toutes les valeurs sont listées dans le document microsoft téléchargeable dans le premier post.

Ainsi le chiffre 1 du clavier numérique a le scan code 0x59, il faudra ajouter 0x88, ce qui donne 0xE1 en hexa ou 225 en décimal.

Ecrire du texte à la volée:

Pour écrire du texte à la volée, il faut soit modifier le code de la librairie soit créer un code de conversion.

Il existe une librairie KeyboardAzertyFr qui permet d'écrire une partie des caractères français disponible, on ne pourra pas écrire les caractères avec accents, les dead keys (combinaison de deux séquences de touche) et les caractères accessibles par Alt Gr; mais je pense qu'elle pourra suffire si l'on souhaite exécuter des scripts, le lien ici:

L'installation de cette librairie pourra sembler ne pas fonctionner, en fait ça dépendra si on a dèjà compiler ou pas le même code avant cette librairie. J'ai dû faire des suppressions à la main, je ne le met pas ici car je ne suis plus très sûr de ce que j'ai fais. De mémoire dans le dossier arduino de 'mes document's et dans les fichiers de compilation temporaires, le chemin s'affiche en bas lors de la compilation.

Pourquoi la conversion de tous les caractères français n'existent pas encore?

D'abord, elle existe maintenant puisque je l'ai moi-même réalisé mais ce n'est pas une librairie; c'est la raison pour laquelle je fais ce tuto. Le code de conversion sera disponible dans les prochains posts. J'aurais évidemment voulu contribué à la librairie KeyboardAzertyFr, mais mes connaissances en codage en c pure sont limités, de plus avec le problème des caractères que nous allons abordé, je ne voyais pas de solution simple à part utiliser des tableaux sur deux octets au lieu de 1 octet actuellement mais ça risque de consommer énormément de mémoire.

Le problème que j'ai rencontré, c'est que les chaînes de caractères sont codées en UTF-8, ainsi l'ensemble de nos caractères français ne tient pas sur un octet pour tous, il en faut parfois 2 (asccii supérieur à 127), voire trois pour le caractère €. Donc traité des caractères qui n'occupent pas le même espace devient nettement plus ardu pour une conversion et devient un problème pour modifier la librairie Keyboard. Aussi si vous utilisez des Teensyduino, et que vous avez installé l'exécutable qui met en place les fichiers, celui-ci supprime la librairie de son emplacement.

Cela dit, il faut savoir que sur le site d'Arduino, des codes de conversions UTF-8 ascii étendu existent, ce qui pourrait simplifier la création d'une nouvelle librairie au moins pour nous, à voir ici:
https://playground.arduino.cc/Main/Utf8ascii

J'ai donc entrepris la création d'une conversion qui je l'espère permettra aussi d'adapter le code à d'autres langages que le français.