romu-midi-controller.ino

Placa de desarrollo USB compacta Bitmerse Romu (RP2354A) · Archivo : romu-midi-controller.ino · Lenguaje : C/C++ (TinyUSB) · Uso : Simuler un contrôleur MIDI USB pour envoyer des notes musicales.

Crea un dispositivo MIDI USB compacto para producción musical o control de DAW.

La placa Romu es ideal para controladores MIDI por su tamaño. Este ejemplo usa TinyUSB para emular una interfaz MIDI. No se necesitan GPIO externos para el ejemplo básico, pero los pads de depuración podrían usarse para añadir botones físicos más tarde.

romu-midi-controller.ino

#include "pico/stdlib.h"
#include "tusb.h"
#include "class/midi/midi_device.h"

// Descripteur MIDI
uint8_t const desc_hid_report[] = {
    TUD_MIDI_DESC_EP(HID_EPIN_ADDR, 64, 0x01)
};

const uint8_t desc_configuration[] = {
    TUD_CONFIG_DESCRIPTOR(1, 1, 0, TUD_CONFIG_DESC_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100),
    TUD_MIDI_DESCRIPTOR(0, 0, HID_EPIN_ADDR, HID_EPIN_SIZE, 0x81, 10)
};

uint8_t const *tud_midi_descriptor_report_cb(uint8_t instance) {
    return desc_hid_report;
}

void tud_midi_rx_cb(uint8_t ep_addr) {
    // Réception MIDI (non utilisée ici)
}

int main() {
    tusb_init();
    uint8_t note = 60; // C4

    while (true) {
        tud_task();

        if (tud_mounted()) {
            static uint32_t last_time = 0;
            uint32_t now = time_us_32();
            if (now - last_time > 500000) { // 500ms
                last_time = now;
                
                // Note On
                uint8_t packet[4] = {0x90, note, 100}; // Canal 0, Note, Vélocité
                tud_midi_write_packet(0, packet, 4);
                
                sleep_ms(100);
                
                // Note Off
                packet[0] = 0x80;
                packet[2] = 0;
                tud_midi_write_packet(0, packet, 4);
                
                note = (note % 12) + 60; // Boucle sur une octave
            }
        }
    }
}

← Volver a la ficha