KeyboardEx : Librairie pour l'émulation du clavier AZERTY

La librairie KeyboardEx permet d'émuler la totalité des caractères du clavier AZERTY français.
[UPDATE 1.0]

Elle est prévue fonctionner pour Windows et Linux avec le core USB d'Arduino
ATmega32U4 Testé sur Arduino Leonardo et Pro micro
SAMD21 ou SAMD51 Pas testé
Une version existe aussi pour les cartes utilisant le core tinyusb pour la gestion de l'USB
SAMD21 Testé sur Seeeduino XIAO et Adafruit QT py
SAMD51 Pas testé
Cette librairie n'est pas packagée, donc on ne peut pas l'installer dans le gestionnaire de librairie de l'IDE d'arduino.
Cependant, il suffira d'ouvrir l’exemple fournit dans le zip et le modifier avec les différents codes fournis dans le fichier d'aide.

Le clavier permet l'impression de 142 caractères:

Les caractères correspondants à une touche directement accessible sur le clavier avec ou sans la touche Maj ou AltGr représentent 108 caractères, espace compris:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~€£¤§¨²µàçèéù

Les caractères composés à l'aide de deux touches (avec les dead keys) représentent 34 caractères:

Les dead keys (clés mortes) permettent de composer des caractères supplémentaires.
Pour la langue française, ils sont au nombre de 4, circonflexe, tréma, accent grave et tilde: ^ ¨ ` ~

À Â Ã Ä È Ê Ë Ì Î Ï Ñ Ò Ô Õ Ö Ù Û Ü â ã ä ê ë ì î ï ñ ò ô õ ö û ü ÿ

Particularité pour Windows:

A l'aide des Alt-codes (code optimisé), il est possible (codé pour Windows seulement) d'émuler la totalité des caractères de l'ASCII étendu avec une très bonne compatibilité au niveau des applications indépendamment du langage clavier.
Donc doit fonctionner pour tous, quelque soit la disposition du clavier, pour les langues utilisant l'alphabet de l'ASCII étendu bien sûr.

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

Vous pourrez aussi émuler tous les autres caractères Unicode directement mais il sera nécessaire d'utiliser une application compatible (Wordpad ok mais pas Notepad par exemple)

-> N'hésitez pas à me faire remonter tous problèmes que vous rencontrerez.

Version pour le core USB d'origine de l'Arduino:
ATmega32U4 Testé sur Arduino Leonardo et Pro micro
SAMD21 ou SAMD51 Pas testé
-> Version classique sans état des Leds du clavier
exemple_keyboardex.zip

-> Version avec état des Leds et fonctions Consumer (gestion du volume, lancement d'appli comme la calculatrice...)
Les fonctions Consumer utilisent la librairie de drdnar (GitHub - drdnar/Arduino-HID-Remote: Extends the Arduino HID library to support media control buttons like Play/Pause, Volume up/down, &c.)
exemple_keyboardex_led.zip

-> Le fichier d'aide: aide.zip

Version pour le core tinyusb (exemples adaptées, mêmes fonctions):
Une version existe aussi pour les cartes utilisant le core tinyusb pour la gestion de l'USB
SAMD21 Testé sur Seeeduino XIAO et Adafruit QT py
SAMD51 Pas testé

-> La librairie avec exemple: exemple_keyboardex_tinyusb.zip
-> Le fichier d'aide: aide_tinyusb.zip

*** Toutes les fonctions sont accompagnées d'une description et d'un ou plusieurs codes de test dans le fichier d'aide. ***

Les fonctions pour afficher des caractères:

C'est les mêmes que pour la librairie incluse pour l'IDE d'Arduino:

println Afficher une séquence de caractères imprimables
press(...) Presser une touche du clavier alphanumérique
release(...) Relâcher une touche du clavier alphanumérique

A noter que la fonction print[ln] utlise les Alt-codes nativement, cela signifie qu'elle peut traiter tout type de caractères unicodes mais pour Windows seulement.

-> Fonctions supplémentaires pour println lorsque l'argument est une valeur numérique:

setNotation(...) pour forcer le signe de séparation des décimales sur le point (par défaut) ou la virgule

setPrecision(...) pour préciser le nombre de décimales voulu (2 par défaut)

Les fonctions pour afficher des nombres sous leur forme hexadécimale:

printHexln Permet d'envoyer une séquence de frappe correspondant à la valeur numérique sous forme hexadécimale.

et setPrefixHex(...) permet de préfixer la représentation hexadécimale, sans préfixe par défaut .

Les fonctions pour le pavé numérique:

Les fonctions suivantes permettent d'exploiter le pavé numérique qui est aussi utilisé en interne pour la génération des alt-codes:

printKeypadln Permet d'envoyer une séquence de touches avec le pavé numérique du clavier.

pressKeypad(...) Permet de presser une touche en utilisant le pavé numérique du clavier

releaseKeypad(...) Permet de relâcher une touche en utilisant le pavé numérique du clavier

->Fonctions supplémentaires pour printKeypad lorsque l'argument est une valeur numérique:

setNotation(...) pour forcer le signe de séparation des décimales sur le point (du pavé numérique par défaut),
le point ou la virgule du clavier alphanumérique.

setPrecision(...) pour préciser le nombre de décimale voulu (2 par défaut).

La fonction pour les raccourcis clavier:

La fonction keyCombi(...) permet de faciliter la création de raccourci clavier

Cette fonction fonctionne en touche physique et donne le même résultat quelque soit les différents symboles pour une même touche.

Dans cet exemple, la touche physique du clavier est la même et donne le même résultat:

KeyboardEx.keyCombi(KEY_LEFT_CTRL, 'E')

KeyboardEx.keyCombi(KEY_LEFT_CTRL, 'e')

KeyboardEx.keyCombi(KEY_LEFT_CTRL, '€');

Fonctions pour traiter des chaînes de caractères au format ASCII étendu:
Ce n'est pas pour un gain d'espace que je me suis lancé dans ce format, mais pour une compatibilité avec des apllications (communication par le port série et bluetooth par exemple) et aussi, il est plus facile de gérer des caractères sur un octet seulement.

Ces fonctions ne prennent en compte que des valeurs entre 0 et 255 qui représentent un caractère ainsi que les espaces 32 (espace classique) et 160 (espace insécable), la valeur RETURN et la valeur TAB.

printAsciiExln

pressAsciiEx(....)

releaseAsciiEx(...)

altcodeWinExln

Et quelques autres fonctions à découvrir dans l'aide ....

Core USB Arduino
Version Bêta 2
(correction d'un bug et modification des constantes HID_...)

Version 1.0
Ajout de la fonction setBackspace(...)

Core Tinyusb
Support de tinyusb, tous les exemples ont été mis à jour pour cette version.

.

Support de tinyusb, voir le premier post.