Files
midi-dj-controller/README.md

181 lines
4.9 KiB
Markdown

# 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.