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
- Hardware gemäß Verdrahtungsplan anschließen
- Code kompilieren und auf Arduino Pro Micro hochladen
- USB-Verbindung zum Computer herstellen
- In DAW/MIDI-Software als USB-MIDI-Gerät auswählen
- LED-Test beim Start beobachten
- 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
inconfig.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
Languages
C++
93.7%
C
6.3%