Le Teensy peut s’énumérer comme presque n’importe quel appareil USB : port série, clavier, souris, manette, instrument MIDI, carte audio… Le type est choisi à la compilation, dans le menu Tools → USB Type, et le Teensy apparaît auprès de l’ordinateur comme l’appareil sélectionné. C’est une capacité du matériel USB et de la pile logicielle PJRC (pas une simple bibliothèque), et l’une des signatures du Teensy : il devient une interface homme-machine ou un contrôleur musical en quelques lignes. La structuration générale du programme relève de firmware.
À quoi ça sert ?
Transformer un montage en périphérique USB reconnu sans pilote ouvre des usages directs en projet :
Interface homme-machine. Un Teensy clavier tape du texte ou des raccourcis, un Teensy souris déplace le curseur, et un Teensy manette (joystick) pilote un jeu ou une simulation.
Contrôleur musical. Un Teensy MIDI envoie des notes et des contrôles à un logiciel audio, la base d’un contrôleur ou d’un instrument.
Carte son. Un Teensy audio échange du son avec l’ordinateur (voir l’audio Teensy).
Le tout sans pilote sur les systèmes courants : l’ordinateur reconnaît un périphérique USB standard.
Le menu USB Type
Tout part de Tools → USB Type. Le choix est fait avant la compilation et détermine comment le Teensy se présente :
Serial (défaut) — un port série (USB CDC), pour le moniteur série ;
des combinaisons : Serial + MIDI, Serial + Keyboard + Mouse + Joystick… — qui cumulent plusieurs identités, dont Serial pour garder le débogage.
Selon le type choisi, des objets globaux deviennent disponibles dans le sketch : Keyboard, Mouse, Joystick, usbMIDI… On les utilise comme n’importe quelle API Arduino.
Exemple — Un bouton qui tape au clavier
Ce montage envoie un texte à l’ordinateur quand on appuie sur un bouton. Il suppose USB Type réglé sur Keyboard (ou une combinaison incluant le clavier, par ex. Serial + Keyboard + Mouse + Joystick pour garder le moniteur série).
const int BOUTON = 2;bool dejaAppuye = false;void setup() { pinMode(BOUTON, INPUT_PULLUP); // appui = niveau bas}void loop() { bool appuye = (digitalRead(BOUTON) == LOW); if (appuye && !dejaAppuye) { // détection de front : agir une seule fois par appui Keyboard.print("Teensy!"); // tape le texte sur l'ordinateur } dejaAppuye = appuye; delay(10); // anti-rebond simple}
La détection de front (appuye && !dejaAppuye) garantit qu’on tape une seule fois par appui, pas en rafale, ce qui est indispensable pour un périphérique qui agit sur l’ordinateur. Pour un contrôleur MIDI, le principe est le même avec usbMIDI : par exemple usbMIDI.sendControlChange(7, valeur, 1) envoie un volume MIDI depuis un potentiomètre.
Pièges
Oublier de régler le USB Type. Si le code utilise Keyboard ou usbMIDI mais que USB Type est resté sur Serial, la compilation échoue (objet inconnu) ou le périphérique n’apparaît pas. Régler le type avant de compiler.
Perdre le moniteur série. Choisir un type sans Serial (ex. Keyboard seul) supprime le port série de débogage. Pour garder les deux, choisir une combinaisonSerial + ….
Un HID qui s’emballe au démarrage. Un Teensy clavier ou souris qui envoie des événements en boucle dès le branchement perturbe l’ordinateur (frappe ou curseur incontrôlés). Toujours conditionner l’action à un événement (bouton, capteur) via une détection de front.
Ne plus pouvoir reprogrammer un HID récalcitrant. Si un Teensy devenu clavier/souris s’emballe, l’IDE peut peiner à le reprogrammer : appuyer sur le bouton de la carte pour forcer le mode programmation (voir prise en main).
Oublier usbMIDI.read() en réception. Pour recevoir du MIDI (et pas seulement en envoyer), il faut appeler usbMIDI.read() régulièrement dans loop().
Exercices
Exercice 1 — Un raccourci clavier
Modifiez l’exemple pour qu’un appui envoie le raccourci Ctrl + C (copier) au lieu d’un texte. Indice : il faut presser puis relâcher des touches.
Corrigé
On utilise Keyboard.press() / Keyboard.release() (ou Keyboard.releaseAll()), au lieu de print() :
print() convient pour taper du texte. Un raccourci demande de maintenir une combinaison, donc press + release. La détection de front reste indispensable pour ne pas spammer le raccourci.
Exercice 2 — Un potentiomètre MIDI
Transformez un potentiomètre (sur une entrée analogique) en contrôleur MIDI : envoyez un Control Change uniquement quand la valeur change, pour ne pas inonder la liaison. Quel USB Type faut-il ?
Corrigé
USB Type sur MIDI (ou Serial + MIDI pour garder le débogage). On lit le potentiomètre, on ramène la valeur sur 0–127, et on n’émet qu’au changement :
int dernier = -1;void loop() { int v = analogRead(A0) >> 3; // 0..1023 -> 0..127 (12 bits : ajuster) if (v != dernier) { usbMIDI.sendControlChange(7, v, 1); // CC 7 = volume, canal 1 dernier = v; } usbMIDI.read(); // bonne pratique : vider la file MIDI entrante}
N’émettre qu’au changement évite de saturer la liaison MIDI avec des messages identiques. (Le décalage >> 3 suppose une lecture sur 10 bits. Avec analogReadResolution(12), adapter la mise à l’échelle.)
Cas particulier — Types combinés et Raw HID
Types combinés.Serial + MIDI, Serial + Keyboard + Mouse + Joystick cumulent plusieurs identités. Le réflexe utile en développement est de garder Serial pour déboguer un périphérique qui, seul, n’exposerait pas de port série.
Raw HID — pour un protocole sur mesure entre le Teensy et un logiciel maison, sans passer par les profils standards. Plus avancé, mais très souple.
Raccrochage projet
Étape 4 de la phase de preuve de concept. Pour un projet d’interface (pupitre de commande, contrôleur, périphérique sur mesure), valider tôt que le Teensy est reconnu comme le bon appareil USB et réagit à un événement physique conditionne toute l’ergonomie aval.
Sécurité d’usage. Un périphérique HID agit sur l’ordinateur. Conditionner systématiquement ses actions (détection de front, bouton d’armement) évite les comportements parasites, à documenter dans le dossier technique.
Comprendre que l’identité USB est un choix de compilation, et que les actions HID doivent être déclenchées, jamais subies, donne la grammaire du Teensy comme interface : un montage physique qui devient, au choix, clavier, manette ou instrument.