midi-piano.ino

Teensy 4.0 · Fichier : midi-piano.ino · Langage : Arduino · Usage : Envoyer des notes MIDI sur USB (Teensy reconnu comme instrument)

Le Teensy se fait reconnaître en instrument MIDI USB sans aucun circuit : trois boutons jouent un accord de do majeur reçu directement par un DAW (Ardour, LMMS, GarageBand). La bibliothèque MIDI du core gère toute la classe USB.

Matériel requis

Un Teensy 4.0 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, logique 3,3 V) alimenté par USB. 3 boutons poussoirs (vers GND).

Câblage

Un bouton par broche (2, 3, 4) vers GND, résistance interne PULLUP. Câble USB vers l'ordinateur.

Fonctionnement

MIDI.sendNoteOn/Off émet les messages MIDI sur l'USB (clé USB MIDI). Le moniteur MIDI de l'Arduino IDE ou un DAW les affiche ; Serial reste disponible pour le debug.

Exécution

Avec Teensyduino dans l'Arduino IDE, choisir « Teensy 4.0 », Téléverser puis valider dans le Teensy Loader. Les broches sont en 3,3 V ; le 4.0 est pin-compatible avec le 3.2.

Variantes

Ajouter un potentiomètre pour le volume (Control Change), ou piloter la bibliothèque Audio du Teensy pour générer le son à bord.

midi-piano.ino

// Piano 3 touches : le Teensy est reconnu comme peripherique MIDI USB.
#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

const int BROCHES[3] = {2, 3, 4}; // touches vers GND
const int NOTES[3] = {60, 64, 67}; // do, mi, sol
bool enfonce[3] = {false, false, false};

void setup() {
  for (int i = 0; i < 3; i++) pinMode(BROCHES[i], INPUT_PULLUP);
  MIDI.begin(MIDI_CHANNEL_OMNI);
  Serial.begin(9600); // le MIDI passe par l'USB, Serial reste libre
  Serial.println(F("MIDI pret (voir le moniteur MIDI de l'IDE)"));
}

void loop() {
  for (int i = 0; i < 3; i++) {
    bool appui = digitalRead(BROCHES[i]) == LOW;
    if (appui && !enfonce[i]) {
      enfonce[i] = true;
      MIDI.sendNoteOn(NOTES[i], 100, 1); // note, vélocité, canal
      Serial.print(F("noteOn ")); Serial.println(NOTES[i]);
    } else if (!appui && enfonce[i]) {
      enfonce[i] = false;
      MIDI.sendNoteOff(NOTES[i], 0, 1);
      Serial.print(F("noteOff ")); Serial.println(NOTES[i]);
    }
  }
}

← Retour à la fiche