Съдържание:

Основен MIDI контролер на Arduino: 5 стъпки
Основен MIDI контролер на Arduino: 5 стъпки

Видео: Основен MIDI контролер на Arduino: 5 стъпки

Видео: Основен MIDI контролер на Arduino: 5 стъпки
Видео: Arduino / Занятие 5 / Практика: кнопки, пьезодинамик, светодиоды 2024, Ноември
Anonim
Основен MIDI контролер на Arduino
Основен MIDI контролер на Arduino

Въведение:

Аз съм нов в работата с Arduino, но се надявам да разширя знанията си, като преподавам на другите и получавам обратна връзка. Това е много основен MIDI контролер с 4 бутона и потенциометър. Очертанията на този проект изглеждат така:

1. Изградете макета

2. Качете скицата в Arduino

3. Разберете MIDI без коса и вътрешен MIDI контур (loopbe1)

4. насочете вашия MIDI към DAW (Ableton)

Консумативи

1 x Arduino Mega 2560

1 х дъска за хляб

1 x USB кабел

1 x потенциометър

4 x бутони Tact

4 x 120Ohm резистора

14 x джъмперни кабели за макет

Стъпка 1: Изграждане на макета

Изграждане на макета
Изграждане на макета
Изграждане на макета
Изграждане на макета

Свържете своя макет, така че всички компоненти да съвпадат с изображение 1 по -горе. Всеки бутон трябва да изглежда същият като на изображение 2. Входовете на бутоните са 2, 3, 4 и 5 на Arduino, а средният щифт на потенциометъра е свързан към ANALOG вход A0.

Стъпка 2: Качване на скицата

Качване на скица
Качване на скица

Копирайте и поставете кода по -долу в Arduino IDE. Изберете правилната дъска под „инструменти“и качете скицата в Arduino.

байт бележкаON = 144; // бележка на бележка за команден байт; // място за съхранение на текуща нота int buttonPin1 = 2; int buttonPin2 = 3; int buttonPin3 = 4; int buttonPin4 = 5; int potPin = A0; boolean currentState = LOW; // строгаж за текущо състояние на бутона boolean lastState = LOW; // съхранение за последното състояние на бутон void setup () {pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); // този път ще зададем щифта като INPUT Serial.begin (9600); // инициализираме Serial connection} void loop () {int PotVal = analogRead (potPin); байтова скорост = карта (PotVal, 0, 1023, 0, 127); currentState = digitalRead (buttonPin1); if (currentState == HIGH && lastState == LOW) {MIDImessage (noteON, 60, velocity); // включете бележка 60 със 127 забавяне на скоростта (200); // груба форма на освобождаване на бутоните} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // изключване на закъснение за изключване на бележка 60 (2); // груба форма на премахване на бутоните} lastState = currentState; currentState = digitalRead (buttonPin2); if (currentState == HIGH && lastState == LOW) {// ако бутонът е току -що натиснат MIDImessage (noteON, 61, velocity); // включете бележка 60 със 127 забавяне на скоростта (200); // груба форма на бутона debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // изключване на закъснение за изключване на бележка 60 (2); // груба форма на премахване на бутона} lastState = currentState; currentState = digitalRead (buttonPin3); if (currentState == HIGH && lastState == LOW) {// ако бутонът е току -що натиснат MIDImessage (noteON, 62, velocity); // включете бележка 60 със 127 забавяне на скоростта (200); // груба форма на бутона debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // изключване на закъснение за изключване на бележка 60 (2); // груба форма на премахване на бутона} lastState = currentState; currentState = digitalRead (buttonPin4); if (currentState == HIGH && lastState == LOW) {// ако бутонът е току -що натиснат MIDImessage (noteON, 63, velocity); // включете бележка 60 със 127 забавяне на скоростта (200); // груба форма на бутона debouncing} else if (currentState == LOW && lastState == HIGH) {MIDImessage (noteON, 60, 0); // изключване на закъснение за изключване на бележка 60 (2); // груба форма на премахване на бутона} lastState = currentState; } // изпращане на MIDI съобщение void MIDImessage (команда байт, байт данни1, байт данни2) {Serial.write (команда); Serial.write (data1); Serial.write (data2); }

Все още съм много нов в писането на код като цяло ….. тези с малко повече опит вероятно биха могли да изчистят това …

Стъпка 3: Разбиране на MIDI и вътрешни MIDI контури без коса

Разбиране на MIDI и вътрешни MIDI контури без коса
Разбиране на MIDI и вътрешни MIDI контури без коса
Разбиране на MIDI и вътрешни MIDI контури без коса
Разбиране на MIDI и вътрешни MIDI контури без коса
Разбиране на MIDI и вътрешни MIDI контури без коса
Разбиране на MIDI и вътрешни MIDI контури без коса

Arduino трябва да работи през сериен мост като Hairless MIDI, след това през вътрешен MIDI контур, като loopbe1 (или IAC шина за Mac).

Забележка: не можете да качвате скица в Arduino, докато тя е свързана към безголевия MIDI сериен мост.

Изберете вашия Arduino в сериен MIDI порт без коса и loopbe1 или IAC шина в MIDI изхода.

Забележка: уверете се, че заглушаването не е включено, когато използвате loopbe1.

Стъпка 4: Свързване към вашия DAW

Свързване към вашата DAW
Свързване към вашата DAW

Ако получавате сигнал към приложението Hairless MIDI, когато натиснете бутон на чертежа (светлините ще мигат), трябва да можете да изпращате MIDI данни към DAW. Използвах Ableton, но всеки DAW трябва да работи. Уверете се, че вашият вътрешен MIDI цикъл (loopbe1) е активиран в предпочитанията ви за DAW (в Ableton искате "track" да бъде активиран). След това изберете един от вашите MIDI входове за запис към MIDI контура (loopbe1), както е показано на изображението по -горе.

Стъпка 5: Играйте

Image
Image

Бутоните вече ще работят като всеки друг MIDI контролер! Потенциометърът ще промени скоростта на нотите, изпращани до DAW. (Много тъмният …) видеоклип по -горе показва звук на роял в действие!

Препоръчано: