Le code qui va suivre est prévu pour fonctionner avec la lib Keyboard d'Arduino et ne fonctionnera sans doute pas si vous l'utiliser avec une autre Lib.
Si vous voulez qu'elle puisse fonctionner avec une autre lib, demander à l'auteur d'inclure et modifier le code ici présent.
De plus, si vous avez installé l'éxécutable Teensy loader pour les cartes de la familles Teensy, il faudra réinstallé l'IDE d'Arduino, car cet exe modifie certains fichiers lors de son installation et ne permettra pas d'exécuter ce code correctement (seulement parce qu'on utilise la lib keyboard, sinon il n'y a pas de problème avec les autres codes).
Voici le code, j'ai rajouté quelques fonctions que vous pourrez modifier ou même supprimer:
[UPDATE du 01/09/2019]
// nico78, le 03/08/2019
// modif le 14/08/2019
// Adaptation qwerty to azerty pour les caractères simples de la table ASCII afin d'exécuter des scripts.
// Prévu pour fonctionner avec la librairie Keyboard originale de l'arduino
// donc ne soyez pas surpris si cela ne fonctionne pas avec une autre lib.
// Si vous avez installé le Teensy Loader, il faudra réinstallé l'exécutable arduino
// Liste des clés spéciales ici: https://www.arduino.cc/en/Reference/KeyboardModifiers
#include <Keyboard.h>
String AltGrazerty="~#{[|`\\^@#]}";
String shiftazerty="QBCDEFGHIJKL?NOPARSTUVZXYW1234567890 Q+QQQQM%Q./Q>";
String azerty="qbcdefghijkl,noparstuvzxyw&q\"'(-q_qq )=q$q*mqq;:!<";
const byte scancode[] = {4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,44,45,46,47,48,49,50,51,52,53,54,55,56,100};
// Modifier la tempo si c'est trop rapide ou bien trop lent
// cette tempo sert pour
const int tempo=500;
void Keyfr(const String &Texte){
int j = -1;
for (unsigned int i=0; i< Texte.length(); i++){
char c = Texte.charAt(i);
if (c=='\t'){
Keyboard.write(KEY_TAB);
}
int index = azerty.indexOf(c);
if (index>-1){
j = scancode[index]+136;
Keyboard.write(j);
} else{
index = shiftazerty.indexOf(c);
if (index>-1){
j = scancode[index]+136;
Keyboard.press(KEY_LEFT_SHIFT);
Keyboard.press(j);
Keyboard.releaseAll();
}else {
index = AltGrazerty.indexOf(c);
if (index>-1){
j = scancode[index+27]+136;
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.write(j);
Keyboard.releaseAll();
if (index==0 || index==7){
// Traitement spécial pour ce caractère ~ et ^ qui sont des deads keys
// ce qui n'est pas le cas sur les clavier qwerty
// on le tape une seconde fois puis on fait un Retour Arrière.
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.write(j);
Keyboard.releaseAll();
Keyboard.write(KEY_BACKSPACE);
}
}
}
}
}
}
void Keyfrln(const String &Texte){
Keyfr(Texte);
Keyboard.write(KEY_RETURN);
}
void Keycombi(byte key1, char key2){
String keys;
Keyboard.press(key1);
if ((byte)key2<128){
keys+=key2;
Keyfr(keys);
}else{
Keyboard.press((byte)key2);
}
Keyboard.releaseAll();
delay(tempo);
}
// Fonction pour personnaliser des commandes
// A modifier ou compléter
void Keyspecial(const String &Texte){
if (Texte=="window+r"){
Keycombi(KEY_LEFT_GUI, 'r');
}else if (Texte=="copier"){
Keycombi(KEY_LEFT_CTRL, 'c');
}else if (Texte=="couper"){
Keycombi(KEY_LEFT_CTRL, 'x');
}else if (Texte=="coller"){
Keycombi(KEY_LEFT_CTRL, 'v');
}else if (Texte=="selectionner"){
Keycombi(KEY_LEFT_CTRL, 'a');
}else if (Texte=="annuler"){
Keycombi(KEY_LEFT_CTRL, 'z');
}else if (Texte=="rétablir"){
Keycombi(KEY_LEFT_CTRL, 'y');
}else if (Texte=="imprimer"){
Keycombi(KEY_LEFT_CTRL, 'p');
}else if (Texte=="fermer"){
Keycombi(KEY_LEFT_ALT, KEY_F4);
}else if (Texte=="menufermer"){
Keycombi(KEY_LEFT_ALT, ' ');
Keyfr("f");
}
}
// Fonction pour exécuter une commande simple
// A modifier ou compléter
void Key(const String &Texte){
if (Texte=="entree"){
Keyboard.write(KEY_RETURN);
}else if (Texte=="echap"){
Keyboard.write(KEY_ESC);
}else if (Texte=="retour"){
Keyboard.write(KEY_BACKSPACE);
}else if (Texte=="droite"){
Keyboard.write(KEY_RIGHT_ARROW);
}else if (Texte=="gauche"){
Keyboard.write(KEY_LEFT_ARROW);
}else if (Texte=="haut"){
Keyboard.write(KEY_UP_ARROW);
}else if (Texte=="bas"){
Keyboard.write(KEY_DOWN_ARROW);
}else if (Texte=="f1"){
Keyboard.write(KEY_F1);
}
}
void setup() {
delay(8000);
Keyboard.begin();
}
void loop() {
static int oneloop=0;
if (oneloop==0){
oneloop=1;
Keyspecial("window+r"); // Lance la fenêtre exécuter
Keyfrln("notepad");
delay(2000);
Keyfr("abcdefghijklmnopqrstuvwxyz");
Keyfr("\t"); // \t = tabulation
Keyfrln("01234\t56789");
Keyfrln("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
Keyfrln("@~_-+=|<>()[]{}\\/&`^'\"%?!:,;*$.#");
Keyspecial("selectionner");
Keyspecial("copier");
Key("droite");
Key("entree");
Keyspecial("coller");
delay(1000);
Keyspecial("fermer"); // fermeture de la fenêtre par ALT+F4
Key("droite");
delay(1000);
Key("entree");
delay(1000);
Keyspecial("window+r"); // Lance la fenêtre exécuter
Keyfrln("cmd");
delay(1000);
Keyfrln("ipconfig /all");
delay(2000);
Keyspecial("menufermer"); // ouvre le menu system et choisi 'Fermer' comme si on cliquait sur l'icone de l'application
Keyboard.end();
}
}