Implementiere USB-MIDI-Controller für Arduino Pro Micro mit Hardware- und Software-Architektur, einschließlich Button- und LED-Steuerung, Multiplexer-Integration und MIDI-Kommunikation.
This commit is contained in:
180
README.md
Normal file
180
README.md
Normal file
@@ -0,0 +1,180 @@
|
||||
# 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.
|
Reference in New Issue
Block a user