Skyduino:~#
Articles
arduino, programmation

[Teensy / Arduino] Clavier usb avec macro DIY

Bonjour tout le monde 🙂

Aujourd’hui je vais plus vous présenter une idée de projet, plutôt qu’un projet fini.
J’étais parti dans l’idée de vous faire un système de clavier à macro complet, puis j’ai réfléchi et je me suis dit que cela serait pas tiptop.

Chacun a une vision différente des macros qu’il souhaite utiliser c’est pourquoi dans cet article je vais vous montrer les grandes lignes uniquement.

Afin de pouvoir « émuler » un clavier usb (et une souris usb + joystick au passage pour ceux que ça intéresserait) j’utilise une carte Teensy++ 2.0.
Pour ceux qui voudraient plus de détail sur cette carte j’avais fait un article à son sujet par le passé :
https://skyduino.wordpress.com/2011/09/03/test-teensy-2-0/

L’avantage de la teensy c’est qu’après avoir installé le plugin teensyduino il est très simple de créer des applications utilisant l’usb natif de la teensy.
Il suffit de choisir « Teensy … » dans la liste des cartes disponible (tool -> board), puis « Keyboard + mouse + joystick » dans le mode Usb (tool -> usb type) et c’est tout !

Il suffit alors de câbler quelques boutons sur les broches digitale et d’utiliser l’api usb que fourni la librairie teensyduino :
Keyboard.xxxx pour le clavier
Mouse.xxxx pour la souris
Joystick.xxxx pour le joystick

La documentation complète est disponible sur le site de PJRC :
Clavier : http://www.pjrc.com/teensy/td_keyboard.html
Souris : http://www.pjrc.com/teensy/td_mouse.html
Joystick : http://www.pjrc.com/teensy/td_joystick.html

Pour cet exemple j’utilise les broches de A0 à A7 (F0 à F7 sur la carte) et j’ai des résistances de pull-up externe sur mes boutons (voir le code du setup pour activer les résistances de pull-up interne si besoin).

Sans plus attendre voici le squelette (très basique) du clavier à macro :

/*
 * Teensy Macro Keyboard
 */

/* Pinmapping */
const byte macro_pins[] = {
  A0, A1, A2, A3, A4, A5, A6, A7};

// Pin 13: Arduino has an LED connected on pin 13
// Pin 11: Teensy 2.0 has the LED on pin 11
// Pin 6: Teensy++ 2.0 has the LED on pin 6
const byte led_pin = 6;

/* Fonction lançant la macro voulue */
void macro_run(byte macro) {

  /* Exécute la portion de code voulue suivant la macro */
  switch(macro) {

  case 0 : // Macro 1
    Keyboard.print("Macro 1\n");
    break;

  case 1 : // Macro 2
    Keyboard.print("Macro 2\n");
    break;

  case 2 : // Macro 3
    Keyboard.print("Macro 3\n");
    break;

  case 3 : // Macro 4
    Keyboard.print("Macro 4\n");
    break;

  case 4 : // Macro 5
    Keyboard.print("Macro 5\n");
    break;

  case 5 : // Macro 6
    Keyboard.print("Macro 6\n");
    break;

  case 6 : // AMacro 7
    Keyboard.print("Macro 7\n");
    break;

  case 7 : // Macro 8
    Keyboard.print("Macro 8\n");
    break;

  } 
}

/* Fait clignoter la led (retour visuel) */
void led_blink() {

  /* Clignote 5 fois */
  for(byte i = 0; i < 5; ++i) { 

    digitalWrite(led_pin, HIGH);
    delay(50);
    digitalWrite(led_pin, LOW);
    delay(50); // Au total la boucle prendra 500ms ce qui fera office d'anti rebond 
  }
}

/* setup() */
void setup() {

  /* Place la broche de la led en sortie + LOW */
  pinMode(led_pin, OUTPUT);
  digitalWrite(led_pin, LOW);

  /* Pour chaque broche des boutons */
  for(byte i = 0; i < sizeof(macro_pins); ++i) {

    /* Place la broche en entrée + résistance de pull-up */
    pinMode(macro_pins[i], INPUT);
    //digitalWrite(macro_pins[i], HIGH); // Dé-commenter cette ligne si vous n'utilisez pas de résistance extérieure
  }

  /* Donne un premier signe de vie */
  led_blink();
}

/* loop() */
void loop(){

  /* Scan chaque bouton */
  for(byte i = 0; i < sizeof(macro_pins); ++i) {

    /* Si le bouton est appuyé (= LOW, rappel : résistance e pull-up) */
    if(digitalRead(macro_pins[i]) == LOW) {

      /* Lance la macro correspondante */
      macro_run(i);
      
      /* Fait clignoter la led (+ anti rebond) */
      led_blink();
    }
  }
}

Vous remarquerez que dans ce squelette je n’utilise aucune touche spéciale (ctrl, alt, …) si vous voulez faire un « vrai » système de macro il faudrait sûrement ajouter des séquences de touches + ctrl/alt, des delais, des conditions, etc …
Mais comme je le disait plus haut, chacun a sa façon de faire 😉

Pour avoir un exemple avec ctrl + alt + supp regardez dans la documentation de l’api Keyboard 😉

Le principe est simple :
On utilise d’abord :
Keyboard.set_modifier(MODIFIERKEY_xxx);
Keyboard.send_now();

Pour « appuyer » (virtuellement) sur la touche xxx (ctrl par exemple) et la garder appuyé.

Puis on appuie sur les autres touches (v par exemple pour faire un ctrl+v) et on utilise :
Keyboard.set_modifier(0);
Keyboard.send_now();

Pour « relâcher » la touche (ou les touches, ctrl + alt par exemple).

Note : Si on oublie le Keyboard.set_modifier(0) le clavier va commencer à boucler (sauf si la répétition de touche est désactivé) et cela donnera n’importe quoi.

Remarque : Il est aussi possible de faire une système de macro … midi !
La documentation du mode midi est disponible ici :
http://www.pjrc.com/teensy/td_midi.html

Mais c’est un peu moins intéressant qu’un système de macro clavier (enfin tout dépend du résultat voulu).

Bref, gameur, codeur et autre accroc du clavier vous avez de quoi vous amuser 😉

Ps: Certain jeux détectent les macro clavier comme du cheat, donc essayez de faire quelque chose « d’humain » avec quelques delay(xxx) par ci par là sinon vous risquez de vous faire avoir 😉
Pour le dév. vous pouvez vous amuser à faire des macro pour svn ou git, voire même des macro pour un ide en particulier (genre auto-formatage du code, etc …)
Ou pour les Trolleur en puissance vous pouvez aussi vous amuser à faire un déclencheur de sample musicaux pour flooder une discussion skype ou mumble (quoi ? ça sent le vécu ? C’est possible :))

Enjoy 🙂

Publicités

Discussion

2 réflexions sur “[Teensy / Arduino] Clavier usb avec macro DIY

  1. Salutations !
    pourrais je savoir quel est le langage utilisé pour écrire le code?
    Merci d’avance.
    Penis

    Publié par Pudendum | 19 mars 2013, 17 h 11 min

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.