Comment utiliser un Arduino Leonardo en tant que périphérique Midi-USB

Tout d'abord, je déconseille d'utiliser un Arduino Leonardo pour faire du Midi-USB.

Ca ne fonctionne qu'avec un Leonardo au prix de manips pas forcément simples décrites ci-après.
Il est infiniment plus simple d'utiliser un Teensy 3.x! En plus ces cartes disposent d'une véritable sortie analogique et sont pour certaines moins coûteuses qu'un Arduino.

Ceci dit, j'ai un Arduino Leonardo inutilisé et il peut être transformé en périphérique Midi-USB en utilisant les librairies du Teensy et TeeOnArdu.

J'ai donc utilisé la définition de carte Arduino TeeOnArdu faite par Lady Ada.
J'ai suivi la démarche indiquée mais avec quelques modifications, car la doc n'est pas tout assez précise, et surtout, ça ne fonctionne pas avec les versions récentes de l'IDE Arduino (la compilation échoue).

La dernière version de l'IDE Arduino qui soit à la fois compatible avec TeeOnArdu et TeensyDuino est la 1.6.5-rc5.
Après avoir installé cette version (à côté de la dernière version, en ce qui me concerne), il faut aussi installer TeensyDuino
Après avoir téléchargé TeeOnArdu.zip, la doc n'est pas claire.
Il faut en fait décompresser le fichier, qui produit un dossier TeeOnArdu-Master.
Il faut ensuite renommer ce dossier en TeeOnArdu et le déplacer dans le dossier hardware de l'IDE Arduino (soit chez moi: C:\arduino\arduino-1.6.5-r5\hardware)

Mais ça ne suffit pas...et la nouvelle carte n'est pas trouvée.
Il faut en fait créer un dossier avr dans le dossier TeeOnArdu et y déplacer tout l'ancien contenu.
On a donc quelque chose commeC:\arduino\arduino-1.6.5-r5\hardware\TeeOnArdu\avr qui contient le contenu de l'ancien *TeeOnArdu*

Après redémarrage de l'IDE Arduino on a un nouvel ensemble de cartes "TeeOnArdu" dans lequel on doit choisir TeeOnArdu (Leo on TeensyCore), puis dans le menu USB-Type, choisir "Midi".

On peut alors utiliser un des exemples disponibles ici.

Attention: Comme indiqué dans la doc de TeeOnArdu, pour uploader un sketch midi une fois le premier sketch midi uploadé, il faut maintenir la touche Reset appuyée au début de l'upload.

J'ai uploadé le sketch d'exemple suivant qui allume la LED intégrée à chaque noteOn et l'éteint à chaque noteOff reçu:

// USB MIDI receive example, Note on/off -> LED on/off
// contributed by Alessandro Fasan

int ledPin = 13;

void OnNoteOn(byte channel, byte note, byte velocity)
{
  digitalWrite(ledPin, HIGH);
}

void OnNoteOff(byte channel, byte note, byte velocity)
{
  digitalWrite(ledPin, LOW);
}

void setup()
{
  pinMode(ledPin, OUTPUT);
  usbMIDI.setHandleNoteOff(OnNoteOff);
  usbMIDI.setHandleNoteOn(OnNoteOn) ;
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

void loop()
{
  usbMIDI.read();
}

Après démarrage du Sketch, Windows devrait automatiquement détecter un nouveau périphérique Midi et en installer le driver.

Afin de tester le bon fonctionnement, j'ai utilisé Midi-OX, une fantastique boite à outils de diagnostic MIDI.
Un périphérique Midi TeeOnArdu doit apparaitre dans la liste des périphériques de sortie Midi disponible. Une fois sélectionné, chaque appui sur une touche du clavier virtuel de MIDI-OX doit provoquer l'allumage de la Led intégrée à l'Arduino.

Voici une vidéo de démo avec le sketch ci-dessus légèrement amélioré pour piloter un anneau de NeoPixel ainsi qu'un servo selon la note jouée (pour une idée d'application sympa que j'ai en tête).
J'utilise l'appli TouchDaw pour Android et RTPMidi, Midi-Ox et le VSTi GTG-K 1 (qui tourne dans VSTHost pour l'occasion)

TeeOnArdu has been obsolete for years now. You can easily use the MIDIUSB library.
It's just as easy as a Teensy.

Pieter

Thanks, I didn't know.