Pangunahing Arduino MIDI Controller: 5 Hakbang
Pangunahing Arduino MIDI Controller: 5 Hakbang
Anonim
Pangunahing Arduino MIDI Controller
Pangunahing Arduino MIDI Controller

Panimula:

Bago ako sa pakikipagtulungan sa Arduino ngunit inaasahan kong mapalawak ang aking kaalaman sa pamamagitan ng pagtuturo sa iba at pagtanggap ng feedback. Ito ay isang napaka pangunahing MIDI controller na may 4 na mga pindutan at isang potensyomiter. Ang balangkas para sa proyektong ito ay ganito ang hitsura:

1. Itayo ang pisara

2. I-upload ang Sketch sa Arduino

3. Maunawaan ang walang buhok na MIDI at panloob na loop ng MIDI (loopbe1)

4. ruta ang iyong MIDI sa isang DAW (Ableton)

Mga gamit

1 x Arduino Mega 2560

1 x Lupong Tinapay

1 x USB Cable

1 x Potensyomiter

4 x Mga Button sa Pag-taktika

4 x 120Ohm resistors

14 x jumper cables para sa breadboard

Hakbang 1: Pagtatayo ng Breadboard

Pagbuo ng Breadboard
Pagbuo ng Breadboard
Pagbuo ng Breadboard
Pagbuo ng Breadboard

Ikonekta ang iyong breadboard upang ang lahat ng mga sangkap ay tumutugma sa imahe 1 sa itaas. Ang bawat pindutan ay dapat magmukhang kapareho ng imahe 2. Ang mga pag-input ng pindutan ay 2, 3, 4 at 5 sa Arduino at ang gitnang pin ng potensyomiter ay konektado sa ANALOG input A0.

Hakbang 2: Pag-upload ng Sketch

Pag-upload ng Sketch
Pag-upload ng Sketch

Kopyahin at i-paste ang code sa ibaba sa Arduino IDE. Piliin ang tamang board sa ilalim ng "mga tool" at i-upload ang sketch sa Arduino.

byte noteON = 144; // note sa commandbyte note; // imbakan para sa kasalukuyang nagpe-play ng note int buttonPin1 = 2; int buttonPin2 = 3; int buttonPin3 = 4; int buttonPin4 = 5; int potPin = A0; boolean currentState = LOW; // stroage para sa kasalukuyang pindutan ng estado boolean lastState = LOW; // imbakan para sa huling pindutan ng estado na walang bisa ang pag-setup () {pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); // sa oras na ito itatakda namin ang pin bilang INPUT Serial.begin (9600); // simulan ang Serial connection} void loop () {int PotVal = analogRead (potPin); byte velocity = mapa (PotVal, 0, 1023, 0, 127); currentState = digitalRead (buttonPin1); kung (currentState == HIGH && lastState == LOW) {MIDImessage (noteON, 60, bilis); // turn note 60 on with 127 velocity delay (200); // crude form of button debouncing} else if (currentState == LOW && lastState == MATAAS) {MIDImessage (noteON, 60, 0); // turn note 60 off delay (2); // crude form of button debouncing} lastState = currentState; currentState = digitalRead (buttonPin2); kung (kasalukuyangState == MATAAS && lastState == LOW) {// kung ang pindutan ay na-press lang ang MIDImessage (noteON, 61, tulin); // i-on ang tala 60 sa 127 na bilis ng pagka-antala (200); // krudo na anyo ng pindutan debouncing} iba pa kung (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // turn note 60 off delay (2); // crude form of button debouncing} lastState = currentState; currentState = digitalRead (buttonPin3); kung (kasalukuyangState == MATAAS && lastState == LOW) {// kung ang pindutan ay na-press lang MIDImessage (noteON, 62, tulin); // i-on ang tala 60 sa 127 na bilis ng pagka-antala (200); // krudo na anyo ng pindutan debouncing} iba pa kung (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // turn note 60 off delay (2); // crude form of button debouncing} lastState = currentState; currentState = digitalRead (buttonPin4); kung (kasalukuyangState == MATAAS && lastState == LOW) {// kung ang pindutan ay na-press lang MIDImessage (noteON, 63, tulin); // i-on ang tala 60 sa 127 na bilis ng pagka-antala (200); // krudo na anyo ng pindutan debouncing} iba pa kung (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // turn note 60 off delay (2); // crude form of button debouncing} lastState = currentState; } // send MIDI message void MIDImessage (byte command, byte data1, byte data2) {Serial.write (utos); Serial.write (data1); Serial.write (data2); }

Napaka-bago ko pa rin sa pagsusulat ng code sa pangkalahatan….. ang mga may kaunting karanasan ay maaaring malinis ito …

Hakbang 3: Pag-unawa sa Walang Buhok na MIDI at Panloob na MIDI Loops

Pag-unawa sa walang buhok na MIDI at Panloob na MIDI Loops
Pag-unawa sa walang buhok na MIDI at Panloob na MIDI Loops
Pag-unawa sa walang buhok na MIDI at Panloob na MIDI Loops
Pag-unawa sa walang buhok na MIDI at Panloob na MIDI Loops
Pag-unawa sa walang buhok na MIDI at Panloob na MIDI Loops
Pag-unawa sa walang buhok na MIDI at Panloob na MIDI Loops

Ang Arduino ay kailangang tumakbo sa pamamagitan ng isang serial bridge tulad ng Hairless MIDI pagkatapos sa pamamagitan ng isang panloob na loop ng MIDI tulad ng loopbe1 (o IAC bus para sa Mac).

Tandaan: hindi ka maaaring mag-upload ng sketch sa Arduino habang nakakonekta ito sa walang buhok na MIDI serial bridge.

Piliin ang iyong Arduino sa Hairless MIDI serial port at loopbe1 o IAC Bus sa MIDI out.

Tandaan: tiyaking wala ang pipi habang gumagamit ng loopbe1.

Hakbang 4: Pagkonekta sa Iyong DAW

Kumokonekta sa Iyong DAW
Kumokonekta sa Iyong DAW

Kung nakakakuha ka ng signal sa Hairless MIDI app kapag pinindot mo ang isang pindutan sa breadboard (mag-iilaw ang mga ilaw) dapat kang makapagpadala ng data ng MIDI sa isang DAW. Gumamit ako ng Ableton ngunit ang anumang DAW ay dapat na gumana. Siguraduhin na ang iyong panloob na loop na MIDI (loopbe1) ay pinagana sa iyong mga kagustuhan sa DAW (sa Ableton na nais mong paganahin ang "track"). Susunod, pumili ng isa sa iyong mga input ng track ng MIDI sa MIDI loop (loopbe1) tulad ng ipinakita sa imahe sa itaas.

Hakbang 5: Maglaro

Image
Image

Ang mga pindutan ay gagana na ngayon tulad ng anumang iba pang MIDI controller! Babaguhin ng potensyomiter ang bilis ng mga tala na ipinapadala sa DAW. Ang (napaka madilim …) na video sa itaas ay nagpapakita ng isang mahusay na tunog ng piano sa pagkilos!