Fix USB MIDI, add LED startup animation, improve logging

- Use ArduinoUSBMIDI library for proper USB MIDI device recognition
- Add LED startup colour cycle (red, green, blue, yellow, magenta, cyan, white)
- Add comprehensive console logging for all MIDI in/out and switch events
- Log unmapped MIDI messages
This commit is contained in:
2026-06-23 13:06:57 +00:00
parent c1b163c8b8
commit 4d81386f78
6 changed files with 130 additions and 98 deletions
+10 -18
View File
@@ -7,24 +7,20 @@
#include "switch_stub.h"
#include "app_task.h"
// Hardware instances
DefaultLedStub led_driver;
DefaultSwitchStub switch_driver;
UsbMidiTransport midi_transport;
// Controller task
AppTask controller(&led_driver, &switch_driver, &midi_transport);
// FreeRTOS task handles
TaskHandle_t midi_task_handle = NULL;
// MIDI processing task (runs on core 0)
void midi_task(void* parameter) {
Serial.println("[TASK] MIDI task started on core 0");
while (true) {
midi_transport.update();
vTaskDelay(1); // Yield to other tasks
vTaskDelay(1);
}
}
@@ -32,22 +28,17 @@ void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("=============================");
Serial.println("Loopy MIDI Controller v0.1");
Serial.println("Phase 1: USB MIDI");
Serial.println("=============================");
Serial.println("=================================");
Serial.println(" Loopy MIDI Controller v0.1");
Serial.println(" Phase 1: USB MIDI");
Serial.println("=================================");
// Initialize hardware stubs
led_driver.begin();
switch_driver.begin();
// Initialize MIDI transport
midi_transport.begin();
// Initialize controller
controller.begin();
// Create MIDI task on core 0 (high priority)
xTaskCreatePinnedToCore(
midi_task,
"midi_task",
@@ -58,12 +49,13 @@ void setup() {
0
);
Serial.println("[INIT] All systems ready");
Serial.println("=============================");
Serial.println("=================================");
Serial.println(" All systems ready");
Serial.println(" Waiting for USB connection...");
Serial.println("=================================");
}
void loop() {
// Controller task runs on core 1 (main Arduino loop)
controller.update();
delay(10); // 10ms loop period
delay(10);
}