midi-piano.ino
El Teensy se reconoce como instrumento MIDI USB sin ningún circuito: tres botones tocan un acorde de do mayor recibido directamente por un DAW (Ardour, LMMS, GarageBand). La librería MIDI del core gestiona toda la clase USB.
Hardware
Un Teensy 4.1 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, lógica de 3,3 V, Ethernet y almacenamiento flash adicional) alimentado por USB. 3 botones pulsadores (hacia GND).
Cableado
Un botón por pin (2, 3, 4) a GND, resistencia interna PULLUP. Cable USB al ordenador.
Funcionamiento
MIDI.sendNoteOn/Off emite los mensajes MIDI por USB (llave USB MIDI). El monitor MIDI del Arduino IDE o un DAW los muestra; Serial queda libre para depurar.
Ejecución
Teensyduino en el Arduino IDE, placa « Teensy 4.1 », Subir y botón del Teensy Loader. Pines de 3,3 V; el 4.1 añade Ethernet, USB host y pines adicionales.
Variantes
Añade un potenciómetro para el volumen (Control Change), o controla la librería Audio del Teensy para generar el sonido a bordo.
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]);
}
}
}