🛠 Contrôleur MIDI USB : un potard qui joue du piano (MIDIx4/MIDIx16)
Objectifs
Le MIDI est l'un des terrains de jeu favoris du Teensy : la classe USB MIDI est class-compliant (aucun pilote sur Windows, Mac, Linux) et PJRC pousse le concept jusqu'à MIDIx4 et MIDIx16 — 4 ou 16 câbles MIDI virtuels sur un seul câble USB, à 480 Mbit/s. Vous allez construire un contrôleur minimal : un potentiomètre sur A0 qui joue une note (C4 à B5) dans n'importe quel DAW.
Matériel
- 1 Teensy 4.0 + câble USB vers un ordinateur
- 1 potentiomètre 10 kΩ : 3,3 V / GND / curseur sur A0
- Un DAW, GarageBand, ou un moniteur MIDI (MIDI-OX, midiMonitor, la web app webmidi.com)
- Bibliothèque MIDI (MIDI Library) via le gestionnaire de l'IDE
Procédure
- Tools > USB Type : MIDI AVANT de téléverser — c'est l'étape que tout le monde oublie.
- Téléversez le sketch ci-dessous, débranchez/rebranchez l'USB si besoin (pas de reset matériel sur le 4.0).
- Ouvrez votre DAW : un appareil « Teensy MIDI » apparaît.
Code complet
// Potard A0 -> note MIDI. USB Type: MIDI requis.
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE;
uint8_t derniereNote = 0;
void setup { MIDI.begin(MIDI_CHANNEL_OMNI); }
void loop {
// ADC 10 bits effectifs (plage 0-3,3 V) -> 24 demi-tons
uint8_t note = 60 + map(analogRead(A0), 0, 1023, 0, 23); // C4..B5
if (note != derniereNote) {
if (derniereNote) MIDI.sendNoteOff(derniereNote, 0, 1); // lâche l'ancienne
MIDI.sendNoteOn(note, 100, 1); // vélocité 100
derniereNote = note;
}
delay(10);
}
Vérification attendue
Tournez le potard : les notes s'enchaînent proprement (l'ancienne note est toujours relâchée avant la nouvelle — pas de note « collée »). Le moniteur MIDI affiche Note On/Off canal 1. Pour aller plus loin : changez USB Type pour MIDIx16 et émettez sur 16 canaux logiques distincts, ou combinez avec le mode Keyboard + MIDI (le Teensy devient à la fois un clavier USB et un périphérique MIDI).
Erreurs fréquentes
- Oublier USB Type : MIDI : le sketch compile, tourne, et aucun appareil MIDI n'apparaît — le descripteur USB est choisi À LA COMPILATION.
- Le Moniteur série disparaît en mode MIDI : la classe MIDI ne transporte pas la série ; pour debugger, prenez un USB Type combiné (ex. « Serial + MIDI ») si disponible, ou passez par la LED.
- Notes fantômes après rebranchement : sans reset matériel, l'état est perdu au débranchage ; envoyez un All Notes Off (0xB0, 123) au démarrage si votre synthé est susceptible.
- Potentiomètre sur 5 V : encore elle — la plage ADC est 0–3,3 V, l'alimenter en 5 V sature la lecture en haut de course (et frôle la limite d'entrée).
- delay(10) dans une vraie machine à rythme : pour du MIDI temps réel, cadencez sur le compteur de cycles ARM_DWT_CYCCNT ou un IntervalTimer ; 10 ms reste correct pour un contrôleur.
- Plusieurs Teensy MIDI sur le même PC : les DAW les listent tous les deux « Teensy MIDI » — nommez vos câbles virtuels (MIDIx4) pour vous y retrouver.
Autres tutoriels pour cette carte
- Premiers pas sur le Teensy 4.0 : Teensyduino, Loader et premier Blink
- GPIO et PWM sous 3,3 V : les règles d'or du Teensy 4.0
- Entrées analogiques et capteur de température interne : le ADC et ses limites
- Piloter un ruban WS2812 sans bloquer le CPU : WS2812Serial et OctoWS2811
- Comprendre la mémoire : 2 Mo de flash, 1 Mo de RAM TCM/DMA, EEPROM émulée et LittleFS
- Deux ports USB simultanés : périphérique 480 Mbit/s ET hôte USB sur les pastilles
Exemples de code pour cette carte
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino