midi-piano.ino

Teensy 4.1 · Archivo : midi-piano.ino · Lenguaje : Arduino · Uso : Envoyer des notes MIDI sur USB (Teensy reconnu comme instrument)

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]);
    }
  }
}

← Volver a la ficha