Kontrolluesi bazë Arduino MIDI: 5 hapa
Kontrolluesi bazë Arduino MIDI: 5 hapa
Anonim
Kontrolluesi bazë Arduino MIDI
Kontrolluesi bazë Arduino MIDI

Hyrje:

Unë jam i ri në punën me Arduino, por shpresoj të zgjeroj njohuritë e mia duke mësuar të tjerët dhe duke marrë reagime. Ky është një kontrollues shumë themelor MIDI me 4 butona dhe një potenciometër. Skica e këtij projekti duket kështu:

1. Ndërtoni tabelën e bukës

2. Ngarko Skicën në Arduino

3. Kuptoni MIDI pa flokë dhe lak të brendshëm MIDI (loopbe1)

4. drejtoni MIDI -në tuaj në një DAW (Ableton)

Furnizimet

1 x Arduino Mega 2560

1 x Bordi i Bukës

1 x Kabllo USB

1 x Potenciometër

4 x Butona për takt

4 rezistente 120Ohm

14 x kabllo kërcyes për bordin e bukës

Hapi 1: Ndërtimi i tabelës së bukës

Ndërtimi i tabelës së bukës
Ndërtimi i tabelës së bukës
Ndërtimi i tabelës së bukës
Ndërtimi i tabelës së bukës

Lidhni tabelën tuaj të bukës në mënyrë që të gjithë përbërësit të përputhen me imazhin 1 më sipër. Çdo buton duhet të duket njësoj si imazhi 2. Hyrjet e butonave janë 2, 3, 4 dhe 5 në Arduino dhe kunja e mesme e potenciometrit është e lidhur me hyrjen ANALOG A0.

Hapi 2: Ngarkimi i Skicës

Ngarkimi i Skicës
Ngarkimi i Skicës

Kopjoni dhe ngjisni kodin më poshtë në Arduino IDE. Zgjidhni tabelën e duhur nën "mjetet" dhe ngarkoni skicën në Arduino.

byte noteON = 144; // shënim në komandëbajt shënim; // ruajtje për butonin aktualisht duke luajtur butonin intPin1 = 2; butoni intPin2 = 3; butoni intPin3 = 4; butoni intPin4 = 5; int potPin = A0; boolean currentState = LOW; // goditje për gjendjen e butonit aktual boolean lastState = LOW; // ruajtje për gjendjen e butonit të fundit void setup () {pinMode (buttonPin1, INPUT); pinMode (butoniPin2, HYRJE); pinMode (butoniPin3, HYRJE); pinMode (buttonPin4, INPUT); // këtë herë ne do ta vendosim pinin si INPUT Serial.begin (9600); // inicializojmë lidhjen serike} loop void () {int PotVal = analogRead (potPin); shpejtësia e bajtit = harta (PotVal, 0, 1023, 0, 127); currentState = digitalRead (butoniPin1); nëse (aktual Shteti == LART && e funditShtetëra == E LART) {MIDImessage (shënimONON, 60, shpejtësia); // ndizni shënimin 60 me 127 vonesë shpejtësie (200); // formë e papërpunuar e zbritjes së butonit} tjetër nëse (aktualShtetëra == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // fikni vonesën e shënimit 60 (2); // formën e papërpunuar të zbritjes së butonit} lastState = currentState; currentState = digitalRead (butoniPin2); if (currentState == HIGH && lastState == LOW) {// nëse butoni sapo është shtypur MIDImessage (shënimONON, 61, shpejtësia); // ndizni shënimin 60 me 127 shpejtësi vonesë (200); // forma e papërpunuar e butonit debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // shlyeni shënimin 60 vonesë (2); // formë e papërpunuar e zbritjes së butonit} lastState = currentState; currentState = digitalRead (butoniPin3); nëse (currentState == LART && lastState == LOW) {// nëse butoni sapo është shtypur MIDImessage (shënimONON, 62, shpejtësia); // ndizni shënimin 60 me 127 vonesë shpejtësie (200); // forma e papërpunuar e butonit debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // shlyeni shënimin 60 vonesë (2); // formë e papërpunuar e zbritjes së butonit} lastState = currentState; currentState = digitalRead (butoniPin4); if (currentState == HIGH && lastState == LOW) {// nëse butoni sapo është shtypur MIDImessage (shënimONON, 63, shpejtësia); // ndizni shënimin 60 me 127 vonesë shpejtësie (200); // forma e papërpunuar e butonit debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // fikni vonesën e shënimit 60 (2); // formën e papërpunuar të zbërthimit të butonit} lastState = currentState; } // dërgoni mesazh MIDI të pavlefshëm MIDImessage (komanda byte, të dhënat e bajtit1, të dhënat e bajtit2) {Serial.write (komanda); Serial.shkruaj (të dhënat1); Serial.shkruaj (të dhënat2); }

Unë jam ende shumë i ri për të shkruar kodin në përgjithësi….. ata me pak më shumë përvojë ndoshta mund ta pastrojnë këtë…

Hapi 3: Kuptimi i MIDI pa flokë dhe sytheve të brendshme MIDI

Kuptimi i MIDI pa flokë dhe sythe të brendshme MIDI
Kuptimi i MIDI pa flokë dhe sythe të brendshme MIDI
Kuptimi i MIDI pa flokë dhe sythe të brendshme MIDI
Kuptimi i MIDI pa flokë dhe sythe të brendshme MIDI
Kuptimi i MIDI pa flokë dhe sythe të brendshme MIDI
Kuptimi i MIDI pa flokë dhe sythe të brendshme MIDI

Arduino duhet të kalojë përmes një ure serike si MIDI pa flokë, pastaj përmes një lak të brendshëm MIDI siç është loopbe1 (ose autobusi IAC për Mac).

Shënim: nuk mund të ngarkoni një skicë në Arduino ndërsa është e lidhur me urën seriale MIDI pa flokë.

Zgjidhni Arduino -n tuaj në portën seriale MIDI pa flokë dhe loopbe1 ose IAC Bus në MIDI jashtë.

Shënim: sigurohuni që heshtja të mos jetë e ndezur kur përdorni loopbe1.

Hapi 4: Lidhja me DAW -in tuaj

Po lidheni me DAW -in tuaj
Po lidheni me DAW -in tuaj

Nëse po merrni sinjal në aplikacionin MIDI pa flokë kur shtypni një buton në tabelën e bukës (dritat do të ndizen) duhet të jeni në gjendje të dërgoni të dhëna MIDI në një DAW. Kam përdorur Ableton, por çdo DAW duhet të funksionojë. Sigurohuni që laku juaj i brendshëm MIDI (loopbe1) është aktivizuar në preferencat tuaja DAW (në Ableton dëshironi që "track" të aktivizohet). Tjetra, zgjidhni një nga hyrjet tuaja të pista MIDI në lakin MIDI (loopbe1) siç tregohet në imazhin e mësipërm.

Hapi 5: Luaj

Image
Image

Butonat tani do të funksionojnë si çdo kontrollues tjetër MIDI! Potenciometri do të ndryshojë shpejtësinë e shënimeve që dërgohen në DAW. Videoja (shumë e errët …) më lart tregon një tingull të pianos në veprim!

Recommended: