vendredi 29 juillet 2011

Un adaptateur de pads consoles universel - le Teensyduino

Voilà donc le premier article consacré à un convertisseur universel de pads consoles vers USB.

On trouve facilement différents adaptateurs de ce type sur le web, mais on trouve aussi parfois n'importe quoi. Par exemple, en cherchant des infos sur le fonctionnement du pad Megadrive, j'ai trouvé deux explications radicalement différentes. Sur les pads les plus simples, j'ai donc pris le parti de repartir de la base, avec relevé de schéma et ré-écriture du protocole. Ce sera le cas pour le pad 3 boutons de la Megadrive et le pad NES.

Mais venons-en au sujet de cet article, le choix du Teensyduino.


Le Teensy est à la base un système minimum à base de microcontrôleur AVR dôté d'une interface USB. Il existe deux versions:
- le Teensy à base d'ATMEGA32U4
- le Teensy++ à base d'AT90USB1286


J'ai choisi d'utiliser le Teensy++ non seulement pour le nombre de broches disponibles (46 contre 25) mais surtout parce que j'en ai déjà un sous la main....

Mais pourquoi suis-je en train de vous parler de Teensy++ alors que j'ai dit plus haut avoir choisi le Teensyduino? En fait Teensyduino est une surcouche logicielle, un plugin que l'on ajoute à l'environnement de développement Arduino pour pouvoir utiliser le Teensy++ avec ce langage.

Alors que les Arduino officiels sont encore soit à base de convertisseur USB-série, soit avec deux microcontrôleurs, l'un étant l'Arduino proprement dit et l'autre étant un autre AVR programmé comme port série virtuel (classe CDC pour les connaisseurs). Il faut donc pour émuler un clavier ou un joystick utiliser la programmation bas niveau de l'AVR, ce qui n'est clairement pas à la portée de l'amateur.

Avec le Teensyduino, nous avons donc un Arduino capable d'émuler un port série, mais aussi un clavier, une souris, un joystick ou n'importe quel périphérique HID

Ajoutons que le prix d'un Teensy est somme toute modéré, de 16 à 24$, avec des frais de port raisonnables.

Mais un exemple vaut mieux qu'un long discours. Voici comment faire un "Hello World" en émulation de clavier, c'est à dire que si vous ouvrez un éditeur de texte et que vous branchez le Teensy au PC, vous verrez s'afficher "Hello World" comme si vous l'aviez tapé vous-même, toutes les 5 secondes:



void setup() { } // no setup needed
void loop() {
Keyboard.print("Hello World ");
delay(5000);
}


Aucune entête compliquée, aucune déclaration d'interface USB, c'est on ne peut plus simple et abordable aux débutants. J'espère que vous comprendrez mieux mon choix ;-)

Concernant l'émulation d'un joystick, c'est aussi simple:


void setup() {
  pinMode(0, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
}


void loop() {
  // read analog inputs and set X-Y position
  Joystick.X(analogRead(0));
  Joystick.Y(analogRead(1));


  // read the digital inputs and set the buttons
  Joystick.button(1, digitalRead(0));
  Joystick.button(2, digitalRead(1));


  // a brief delay, so this runs 20 times per second
  delay(50);
}

Deux potentiomètres sur les deux premières entrées analogiques, deux boutons sur les entrées numériques, et nous avons un joystick basique mais fonctionnel. Nous verrons plus tard qu'il est possible de faire bien plus complexe.

Pour les pads entièrement numériques, nous émulerons donc le clavier. Pour les pads disposant de joysticks, nous passerons par l'émulation du....joystick.

Pour toutes les infos sur les Teensy c'est là: www.pjrc.com


Aucun commentaire:

Enregistrer un commentaire