Spisu treści:

Podstawowy kontroler Arduino MIDI: 5 kroków
Podstawowy kontroler Arduino MIDI: 5 kroków

Wideo: Podstawowy kontroler Arduino MIDI: 5 kroków

Wideo: Podstawowy kontroler Arduino MIDI: 5 kroków
Wideo: Arduino kurs programowania dla opornych 2024, Listopad
Anonim
Podstawowy kontroler Arduino MIDI
Podstawowy kontroler Arduino MIDI

Wstęp:

Jestem nowy w pracy z Arduino, ale mam nadzieję poszerzyć swoją wiedzę poprzez uczenie innych i otrzymywanie informacji zwrotnych. To bardzo prosty kontroler MIDI z 4 przyciskami i potencjometrem. Zarys tego projektu wygląda tak:

1. Zbuduj płytkę stykową

2. Prześlij szkic do Arduino

3. Zrozumieć bezwłosy MIDI i wewnętrzną pętlę MIDI (loopbe1)

4. przekieruj swoje MIDI do DAW (Ableton)

Kieszonkowe dzieci

1 x Arduino Mega 2560

1 x deska do chleba

1 x kabel USB

1 x potencjometr

4 x przyciski taktowe

4 x rezystory 120Ohm

14 x kable rozruchowe do płytki stykowej

Krok 1: Budowanie deski do krojenia chleba

Budowanie deski do krojenia chleba
Budowanie deski do krojenia chleba
Budowanie deski do krojenia chleba
Budowanie deski do krojenia chleba

Podłącz płytkę stykową, aby wszystkie komponenty pasowały do obrazu 1 powyżej. Każdy przycisk powinien wyglądać tak samo jak na obrazku 2. Wejścia przycisków to 2, 3, 4 i 5 na Arduino, a środkowy pin potencjometru jest podłączony do wejścia ANALOGOWEGO A0.

Krok 2: Przesyłanie szkicu

Przesyłanie szkicu
Przesyłanie szkicu

Skopiuj i wklej poniższy kod do Arduino IDE. Wybierz odpowiednią płytkę pod "narzędzia" i prześlij szkic do Arduino.

byte noteON = 144;//note na commandbyte note;//przechowywanie aktualnie odtwarzanej nuty int buttonPin1 = 2; int przyciskPin2 = 3; przycisk intPin3 = 4; int przyciskPin4 = 5; int szpilka = A0; boolean currentState = LOW;//stroage dla bieżącego stanu przycisku boolean lastState = LOW;//przechowywanie dla ostatniego stanu przycisku void setup(){ pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); pinMode(przyciskPin3, INPUT); pinMode(przyciskPin4, WEJŚCIE); //tym razem ustawimy pin jako INPUT Serial.begin(9600);//zainicjuj połączenie szeregowe } void loop(){ int PotVal = analogRead(potPin); prędkość bajtów = map(PotVal, 0, 1023, 0, 127); currentState = digitalRead(buttonPin1); if (currentState == HIGH && lastState == LOW){ MIDImessage(noteON, 60, velocity);//włącz nutę 60 z opóźnieniem prędkości 127(200);//prosta forma odbicia przycisku } else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, 60, 0);//wyłączanie opóźnienia nuty 60(2);//prosta forma odbicia przycisku } lastState = currentState; currentState = digitalRead(buttonPin2); if (currentState == HIGH && lastState == LOW){//if przycisk został właśnie naciśnięty MIDImessage(noteON, 61, velocity);//włącz nutę 60 z 127 velocity delay(200);//prosta forma przycisku debouncing } else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, 60, 0);//wyłączanie opóźnienia nuty 60(2);//prosta forma odbicia przycisku } lastState = currentState; currentState = digitalRead(buttonPin3); if (currentState == HIGH && lastState == LOW){//if przycisk został właśnie naciśnięty MIDImessage(noteON, 62, velocity);//włącz nutę 60 z 127 velocity delay(200);//prosta forma przycisku debouncing } else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, 60, 0);//wyłączanie opóźnienia nuty 60(2);//prosta forma odbicia przycisku } lastState = currentState; currentState = digitalRead(buttonPin4); if (currentState == HIGH && lastState == LOW){//if przycisk został właśnie naciśnięty MIDImessage(noteON, 63, velocity);//włącz nutę 60 z 127 velocity delay(200);//prosta forma przycisku debouncing } else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, 60, 0);//wyłączanie opóźnienia nuty 60(2);//prosta forma odbicia przycisku } lastState = currentState; } //wyślij wiadomość MIDI void MIDImessage(polecenie bajt, dane bajt1, dane bajt2) { Serial.write(polecenie); Serial.zapis(dane1); Serial.zapis(dane2); }

Nadal jestem bardzo nowy w pisaniu kodu w ogóle….. ci, którzy mają trochę więcej doświadczenia, prawdopodobnie mogliby to posprzątać…

Krok 3: Zrozumienie bezwłosych pętli MIDI i wewnętrznych pętli MIDI

Zrozumienie bezwłosych pętli MIDI i wewnętrznych pętli MIDI
Zrozumienie bezwłosych pętli MIDI i wewnętrznych pętli MIDI
Zrozumienie bezwłosych pętli MIDI i wewnętrznych pętli MIDI
Zrozumienie bezwłosych pętli MIDI i wewnętrznych pętli MIDI
Zrozumienie bezwłosych pętli MIDI i wewnętrznych pętli MIDI
Zrozumienie bezwłosych pętli MIDI i wewnętrznych pętli MIDI

Arduino musi działać przez most szeregowy, taki jak Bezwłosy MIDI, a następnie przez wewnętrzną pętlę MIDI, taką jak loopbe1 (lub magistrala IAC dla komputerów Mac).

Uwaga: nie można przesłać szkicu do Arduino, gdy jest on podłączony do bezwłosego mostka szeregowego MIDI.

Wybierz swoje Arduino w porcie szeregowym Hairless MIDI i loopbe1 lub IAC Bus w wyjściu MIDI.

Uwaga: upewnij się, że wyciszenie nie jest włączone, gdy używasz loopbe1.

Krok 4: Łączenie się z DAW

Łączenie z DAW
Łączenie z DAW

Jeśli otrzymujesz sygnał do aplikacji Hairless MIDI po naciśnięciu przycisku na płytce stykowej (kontrolki będą migać), powinieneś być w stanie wysłać dane MIDI do DAW. Użyłem Abletona, ale każdy DAW powinien działać. Upewnij się, że twoja wewnętrzna pętla MIDI (loopbe1) jest włączona w twoich preferencjach DAW (w Ableton chcesz, aby "track" był włączony). Następnie wybierz jedno z wejść ścieżek MIDI do pętli MIDI (loopbe1), jak pokazano na powyższym obrazku.

Krok 5: Graj

Image
Image

Przyciski będą teraz działać jak każdy inny kontroler MIDI! Potencjometr zmieni prędkość nut wysyłanych do DAW. Powyższy (bardzo ciemny…) filmik pokazuje dźwięk fortepianu w akcji!

Zalecana: