Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
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
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
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
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
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
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!