Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Einführung:
Ich bin neu in der Arbeit mit Arduino, aber ich hoffe, mein Wissen zu erweitern, indem ich andere unterrichte und Feedback erhalte. Dies ist ein sehr einfacher MIDI-Controller mit 4 Tasten und einem Potentiometer. Die Gliederung für dieses Projekt sieht wie folgt aus:
1. Baue das Steckbrett aus
2. Laden Sie die Skizze zum Arduino hoch
3. Verstehen Sie Hairless MIDI und den internen MIDI-Loop (loopbe1)
4. routen Sie Ihre MIDI-Daten zu einer DAW (Ableton)
Lieferungen
1 x Arduino Mega 2560
1 x Brotbrett
1 x USB-Kabel
1 x Potentiometer
4 x Takttasten
4 x 120Ohm Widerstände
14 x Starthilfekabel für Steckbrett
Schritt 1: Aufbau des Steckbretts
Schließen Sie Ihr Steckbrett so an, dass alle Komponenten mit Bild 1 oben übereinstimmen. Jede Taste sollte wie in Bild 2 aussehen. Die Tasteneingänge sind 2, 3, 4 und 5 auf dem Arduino und der mittlere Pin des Potentiometers ist mit dem ANALOG-Eingang A0 verbunden.
Schritt 2: Hochladen der Skizze
Kopieren Sie den folgenden Code und fügen Sie ihn in die Arduino-IDE ein. Wählen Sie unter "Tools" das richtige Board aus und laden Sie die Skizze zum Arduino hoch.
Byte NoteON = 144; // Note on Commandbyte Note; // Speicher für die aktuell gespielte Note int buttonPin1 = 2; int buttonPin2 = 3; int buttonPin3 = 4; int buttonPin4 = 5; int potPin = A0; boolean currentState = LOW; // Speicher für den aktuellen Schaltflächenzustand boolean lastState = LOW; // Speicher für den letzten Schaltflächenzustand void setup () {pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); // Diesmal werden wir den Pin als INPUT Serial.begin (9600) setzen; // Serielle Verbindung initialisieren aufrechtzuerhalten. Void Schleife () { Int PotVal = analogRead (potPin); Byte-Geschwindigkeit = map(PotVal, 0, 1023, 0, 127); currentState = digitalRead (buttonPin1); if (currentState == HIGH && lastState == LOW) { MIDImessage (noteON, 60, Velocity); // Note 60 mit 127 Velocity Delay (200) einschalten; // grobe Form der Tastenentprellung } else if (currentState == LOW && lastState == HIGH) { MIDImessage (noteON, 60, 0); // Note 60 ausschalten Verzögerung (2); // grobe Form der Tastenentprellung} lastState = currentState; currentState = digitalRead (buttonPin2); if (currentState == HIGH && lastState == LOW) {//wenn die Taste gerade gedrückt wurde MIDImessage (noteON, 61, Velocity); // Note 60 mit 127 Velocity Delay (200) einschalten; // grobe Form der Taste Entprellung} else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, 60, 0); // Note 60 ausschalten Verzögerung (2); // grobe Form der Tastenentprellung} lastState = currentState; currentState = digitalRead (buttonPin3); if (currentState == HIGH && lastState == LOW) {//wenn die Taste gerade gedrückt wurde MIDImessage (noteON, 62, Velocity); // Note 60 mit 127 Velocity Delay (200) einschalten; // grobe Form der Taste Entprellung} else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, 60, 0); // Note 60 ausschalten Verzögerung (2); // grobe Form der Tastenentprellung} lastState = currentState; currentState = digitalRead (buttonPin4); if (currentState == HIGH && lastState == LOW) {//wenn die Taste gerade gedrückt wurde MIDImessage (noteON, 63, Velocity); // Note 60 mit 127 Velocity Delay (200) einschalten; // grobe Form der Taste Entprellung} else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, 60, 0); // Note 60 ausschalten Verzögerung (2); // grobe Form der Tastenentprellung} lastState = currentState; } // MIDI-Nachricht senden void MIDImessage (Byte-Befehl, Byte-Daten1, Byte-Daten2) { Serial.write (Befehl); Serial.write (Daten1); Serial.write (Daten2); }
Ich bin immer noch sehr neu im Schreiben von Code im Allgemeinen….. diejenigen mit etwas mehr Erfahrung könnten das wahrscheinlich aufräumen…
Schritt 3: Hairless MIDI und interne MIDI Loops verstehen
Der Arduino muss über eine serielle Brücke wie Hairless MIDI und dann über eine interne MIDI-Schleife wie loopbe1 (oder IAC-Bus für Mac) laufen.
Hinweis: Sie können keine Skizze auf das Arduino hochladen, während es mit der haarlosen seriellen MIDI-Brücke verbunden ist.
Wählen Sie Ihren Arduino im seriellen Hairless-MIDI-Port und loopbe1 oder IAC-Bus im MIDI-Ausgang aus.
Hinweis: Stellen Sie sicher, dass die Stummschaltung nicht aktiviert ist, wenn Sie loopbe1 verwenden.
Schritt 4: Verbinden mit Ihrer DAW
Wenn Sie beim Drücken einer Taste auf dem Steckbrett ein Signal an die Hairless MIDI-App erhalten (die Lichter blinken), sollten Sie in der Lage sein, MIDI-Daten an eine DAW zu senden. Ich habe Ableton verwendet, aber jede DAW sollte funktionieren. Stellen Sie sicher, dass Ihr interner MIDI-Loop (loopbe1) in Ihren DAW-Einstellungen aktiviert ist (in Ableton möchten Sie, dass "Track" aktiviert ist). Wählen Sie als Nächstes einen Ihrer MIDI-Spureingänge für den MIDI-Loop (loopbe1) aus, wie in der Abbildung oben gezeigt.
Schritt 5: Spielen
Die Tasten funktionieren jetzt wie jeder andere MIDI-Controller! Das Potentiometer ändert die Velocity der Noten, die an die DAW gesendet werden. Das (sehr düstere…) Video oben zeigt einen Flügelklang in Aktion!