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 3.2 (NXP Kinetis MK20DX256, Cortex-M4 @ 72 MHz, lógica de 3,3 V) 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
Instala el plugin Teensyduino en el Arduino IDE, elige la placa « Teensy 3.2 », pulsa Subir y luego el botón del Teensy Loader. Atención: pines de 3,3 V.
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]);
}
}
}