# 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 ```bash # 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: ```cpp // 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`: ```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.