USB-MIDI-Controller für Arduino Pro Micro

Dieses Projekt implementiert einen vollständigen USB-MIDI-Controller basierend auf einem Arduino Pro Micro (ATmega32u4) mit umfangreicher Hardware-Ausstattung.

Hardware-Komponenten

Hauptkomponenten

  • Arduino Pro Micro (ATmega32u4) - Hauptcontroller mit USB-MIDI-Unterstützung
  • 2x MCP23017 I/O Expander (I2C) - Erweitert GPIO-Pins für Buttons und LEDs
  • 1x CD74HC4067 Multiplexer (16-Kanal, analog) - Für 12 analoge Regler
  • 8x Drehpotentiometer (B10K) - Analoge Eingabe
  • 4x Schieberegler (linear, 10K) - Analoge Eingabe
  • 20x Tact Switches - Digitale Buttons
  • 20x LEDs - Optisches Feedback

Verdrahtung

CD74HC4067 Multiplexer

  • S0 → Digital Pin 2
  • S1 → Digital Pin 3
  • S2 → Digital Pin 4
  • S3 → Digital Pin 5
  • SIG → Analog Pin A0
  • VCC → 5V
  • GND → GND

MCP23017 #1 (Adresse 0x20)

  • VCC → 5V
  • GND → GND
  • SCL → Pin 3 (Arduino Pro Micro)
  • SDA → Pin 2 (Arduino Pro Micro)
  • A0, A1, A2 → GND (Adresse 0x20)
  • Pins 0-15 → Buttons 0-15 (mit Pull-Up-Widerständen)
  • Pins 0-15 → LEDs 0-15 (mit Vorwiderständen)

MCP23017 #2 (Adresse 0x21)

  • VCC → 5V
  • GND → GND
  • SCL → Pin 3 (Arduino Pro Micro)
  • SDA → Pin 2 (Arduino Pro Micro)
  • A0 → 5V, A1, A2 → GND (Adresse 0x21)
  • Pins 0-3 → Buttons 16-19 (mit Pull-Up-Widerständen)
  • Pins 4-7 → LEDs 16-19 (mit Vorwiderständen)

Software-Architektur

Modularer Aufbau

1. config.h

  • Zentrale Konfigurationsdatei
  • Hardware-Pin-Definitionen
  • MIDI-Mapping-Tabellen
  • Timing-Parameter

2. multiplexer.h/.cpp

  • Klasse für CD74HC4067-Multiplexer
  • Analog-Wert-Erfassung mit Änderungs-Erkennung
  • Schwellenwert-basierte Filterung

3. button_handler.h/.cpp

  • Button-Erfassung mit Debouncing
  • Verwendung beider MCP23017-Chips
  • Event-basierte Erkennung (Pressed/Released)

4. led_controller.h/.cpp

  • LED-Steuerung über beide MCP23017-Chips
  • Zustandsverwaltung und Hardware-Synchronisation

5. midi_handler.h/.cpp

  • USB-MIDI-Kommunikation (bidirektional)
  • Note-On/Off und Control-Change-Nachrichten
  • Callback-System für eingehende MIDI-Daten

6. main.cpp

  • Hauptprogramm mit Setup und Loop
  • Integration aller Module
  • Timing-Management für optimale Performance

MIDI-Implementierung

Ausgehende MIDI-Nachrichten

Control Change (CC)

  • Potis 1-8: CC1 - CC8
  • Schieberegler 1-4: CC9 - CC12
  • Wertebereich: 0-127
  • Kanal: 1 (konfigurierbar)

Note-On/Off

  • Buttons 1-20: Noten C2 (36) bis G3 (55)
  • Velocity: 127 (Note-On), 0 (Note-Off)
  • Kanal: 1 (konfigurierbar)

Eingehende MIDI-Nachrichten

Note-On/Off für LED-Steuerung

  • Entsprechende LEDs werden basierend auf Note-Nummer ein-/ausgeschaltet
  • Synchronisation mit DAW-Software (z.B. Ableton Live)

Verwendung

Kompilierung und Upload

# PlatformIO verwenden
pio run --target upload

# Oder über PlatformIO IDE in VS Code

Erste Schritte

  1. Hardware gemäß Verdrahtungsplan anschließen
  2. Code kompilieren und auf Arduino Pro Micro hochladen
  3. USB-Verbindung zum Computer herstellen
  4. In DAW/MIDI-Software als USB-MIDI-Gerät auswählen
  5. LED-Test beim Start beobachten
  6. Regler und Buttons testen

Debugging

  • Serielle Konsole (115200 Baud) für Debug-Ausgaben
  • LED-Test beim Start zeigt Hardware-Funktionalität
  • MIDI-Events werden in der Console geloggt

Konfiguration

MIDI-Mapping anpassen

In config.h können folgende Arrays angepasst werden:

// CC-Nummern für analoge Regler
const uint8_t ANALOG_CC_MAP[NUM_ANALOG_CONTROLS] = {...};

// Note-Nummern für Buttons
const uint8_t BUTTON_NOTE_MAP[NUM_BUTTONS] = {...};

Timing anpassen

In main.cpp:

const unsigned long ANALOG_READ_INTERVAL = 10;  // 100Hz
const unsigned long BUTTON_READ_INTERVAL = 5;   // 200Hz
const unsigned long MIDI_READ_INTERVAL = 1;     // 1000Hz

Troubleshooting

MCP23017 nicht erkannt

  • I2C-Verkabelung prüfen (SDA, SCL)
  • Adressen-Jumper kontrollieren
  • Pull-Up-Widerstände an I2C-Bus (4.7kΩ)

LEDs funktionieren nicht

  • Vorwiderstände prüfen (220-470Ω empfohlen)
  • Verdrahtung der MCP23017-Ausgänge kontrollieren
  • Pin-Zuordnung in Code überprüfen

MIDI wird nicht erkannt

  • USB-Kabel prüfen (Datenübertragung muss unterstützt werden)
  • Arduino Pro Micro als USB-MIDI-Gerät in DAW auswählen
  • MIDI-Kanal-Konfiguration überprüfen

Analoge Werte schwanken

  • ANALOG_THRESHOLD in config.h erhöhen
  • Netzteil-Qualität prüfen (saubere 5V)
  • Verkabelung der analogen Regler kontrollieren

Erweiterungen

Zusätzliche Features

  • Encoder-Unterstützung
  • Display-Integration (OLED/LCD)
  • Preset-Speicherung (EEPROM)
  • Weitere MIDI-Modi (Program Change, etc.)

Hardware-Erweiterungen

  • Zusätzliche MCP23017 für mehr I/Os
  • Mehrere Multiplexer für mehr analoge Eingänge
  • RGB-LEDs für erweiterte Rückmeldung

Lizenz

Dieses Projekt steht unter MIT-Lizenz und kann frei verwendet und modifiziert werden.

Description
No description provided
Readme 59 KiB
Languages
C++ 93.7%
C 6.3%