Controler MIDI de bază Arduino: 5 pași
Controler MIDI de bază Arduino: 5 pași
Anonim
Controler MIDI de bază Arduino
Controler MIDI de bază Arduino

Introducere:

Sunt nou în ceea ce privește lucrul cu Arduino, dar sper să-mi extind cunoștințele învățându-i pe ceilalți și primind feedback. Acesta este un controler MIDI foarte simplu, cu 4 butoane și un potențiometru. Schița acestui proiect arată astfel:

1. Construiți panoul

2. Încărcați schița pe Arduino

3. Înțelegeți MIDI fără păr și bucla MIDI internă (loopbe1)

4. direcționați MIDI către un DAW (Ableton)

Provizii

1 x Arduino Mega 2560

1 x panou de pâine

1 x cablu USB

1 x Potențiometru

4 x butoane tactice

4 x rezistențe 120Ohm

14 x cabluri jumper pentru panou

Pasul 1: Construirea Breadboard-ului

Construirea Breadboard-ului
Construirea Breadboard-ului
Construirea Breadboard-ului
Construirea Breadboard-ului

Conectați panoul de verificare, astfel încât toate componentele să se potrivească cu imaginea 1 de mai sus. Fiecare buton ar trebui să arate la fel ca imaginea 2. Intrările butoanelor sunt 2, 3, 4 și 5 pe Arduino, iar pinul central al potențiometrului este conectat la intrarea ANALOG A0.

Pasul 2: încărcarea schiței

Încărcarea schiței
Încărcarea schiței

Copiați și lipiți codul de mai jos în IDE-ul Arduino. Selectați placa corectă din „instrumente” și încărcați schița pe Arduino.

byte noteON = 144; // note on commandbyte note; // stocare pentru redarea curentă a butonului intPin1 = 2; butonul intPin2 = 3; butonul intPin3 = 4; butonul intPin4 = 5; int potPin = A0; boolean currentState = LOW; // stocare pentru starea curentă a butonului boolean lastState = LOW; // stocare pentru starea ultimului buton void setup () {pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); // de data aceasta vom seta pinul ca INPUT Serial.begin (9600); // inițializează conexiunea Serial} void loop () {int PotVal = analogRead (potPin); viteza octetului = hartă (PotVal, 0, 1023, 0, 127); currentState = digitalRead (buttonPin1); if (currentState == HIGH && lastState == LOW) {MIDImessage (noteON, 60, viteza); // activați nota 60 cu 127 viteza întârziere (200); // formă brută de debouncing buton} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // dezactivați nota 60 pentru întârziere (2); // formă brută de debouncing de buton} lastState = currentState; currentState = digitalRead (buttonPin2); if (currentState == HIGH && lastState == LOW) {// dacă butonul tocmai a fost apăsat MIDImessage (noteON, 61, viteza); // activați nota 60 cu 127 viteză întârziere (200); // formă brută de buton debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // dezactivați nota 60 întârziere (2); // formă brută de buton debouncing} lastState = currentState; currentState = digitalRead (buttonPin3); if (currentState == HIGH && lastState == LOW) {// dacă butonul tocmai a fost apăsat MIDImessage (noteON, 62, viteza); // activați nota 60 cu 127 viteză întârziere (200); // formă brută de buton debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // dezactivați nota 60 întârziere (2); // formă brută de buton debouncing} lastState = currentState; currentState = digitalRead (buttonPin4); if (currentState == HIGH && lastState == LOW) {// dacă butonul tocmai a fost apăsat MIDImessage (noteON, 63, viteza); // activați nota 60 cu 127 viteză întârziere (200); // formă brută de buton debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // dezactivați nota 60 întârziere (2); // formă brută de buton debouncing} lastState = currentState; } // trimite mesaj MIDI void MIDImessage (comandă octet, octet date1, octet date2) {Serial.write (comandă); Serial.write (data1); Serial.write (data2); }

Sunt încă foarte nou în ceea ce privește scrierea codului în general ….. cei cu puțină experiență ar putea, probabil, să curețe acest lucru …

Pasul 3: Înțelegerea MIDI fără păr și a buclelor MIDI interne

Înțelegerea buclelor MIDI fără păr și a buclelor MIDI interne
Înțelegerea buclelor MIDI fără păr și a buclelor MIDI interne
Înțelegerea buclelor MIDI fără păr și a buclelor MIDI interne
Înțelegerea buclelor MIDI fără păr și a buclelor MIDI interne
Înțelegerea buclelor MIDI fără păr și a buclelor MIDI interne
Înțelegerea buclelor MIDI fără păr și a buclelor MIDI interne

Arduino trebuie să ruleze printr-o punte serială ca Hairless MIDI apoi printr-o buclă MIDI internă, cum ar fi loopbe1 (sau magistrala IAC pentru Mac).

Notă: nu puteți încărca o schiță pe Arduino în timp ce este conectat la podul serial MIDI fără păr.

Selectați Arduino în portul serial Hairless MIDI și loopbe1 sau IAC Bus în ieșirea MIDI.

Notă: asigurați-vă că sunetul nu este activat când utilizați loopbe1.

Pasul 4: Conectarea la DAW

Conectarea la DAW
Conectarea la DAW

Dacă primiți semnal către aplicația MIDI fără păr atunci când apăsați un buton de pe panou (luminile vor clipi), ar trebui să puteți trimite date MIDI către un DAW. Am folosit Ableton, dar orice DAW ar trebui să funcționeze. Asigurați-vă că bucla MIDI internă (loopbe1) este activată în preferințele dvs. DAW (în Ableton doriți ca „track” să fie activată). Apoi, selectați una dintre intrările dvs. de pistă MIDI în bucla MIDI (loopbe1) așa cum se arată în imaginea de mai sus.

Pasul 5: Joacă

Image
Image

Butoanele vor funcționa acum ca orice alt controler MIDI! Potențiometrul va schimba viteza notelor trimise către DAW. Videoclipul (foarte întunecat …) de mai sus arată un sunet de pian în acțiune!