[132] MIDI - język nie tylko instrumentów cz. 8

[132] MIDI - język nie tylko instrumentów cz. 8

Czas na sterownik z większą ilością potencjometrów. Wrócę na chwilę do opisywanego kiedyś przeze mnie „włamywacza” do multiefektu. Wystąpiła tam taka bateria potencjometrów.


Jak tam mówiłem, jest to przykład klasycznej tymczasowości na stałe, ale związane to jest ze względną trwałością tekturowych obudów, jeśli tylko porządnie je wykonamy. Przypomnę: z kartonu wyciąłem sobie taki kształt i w ten sposób, by ujarzmił zestaw ośmiu potencjometrów, czyniąc nastawy wygodnymi i jednocześnie był łatwy do wykonania.

Szczegóły nie są skomplikowane: osiem potencjometrów (z zapasem na Arduino Nano albo Mini) łączymy w ten sposób, że skrajne wyprowadzenia mają połączenie „każde z każdym”, a ślizgacze wyprowadzamy osobnymi przewodami. Patrząc z tyłu, prawe wyprowadzenia łączymy z masą, lewe – z pięcioma woltami. Warto dodać kondensatory gaszące szumy między ślizgacze, a masę i jeszcze dodatkowy, na linii zasilającej. Podstawę wykleiłem folią aluminiową, by zredukować zbieranie zakłóceń, co jednak nie jest niezbędne. Jedna z obudów potencjometru została połączona z masą, więc całość jest ekranowana. Sterownik ten łączymy z płytką, wstawiając sześć wyjść ze ślizgaczy na wejścia analogowe. Nie można także zapomnieć o podłączeniu zasilania.

const byte potencjometr[] = { A0, A1, A2, A3, A4, A5 };    // Adresy potencjometrów.
const byte numerKontrolera[] = { 12, 19, 2, 18, 20, 74 };  // Kontrolery (drugie bajty komunikatu).
int staryOdczytPotencjometru[6] = { 0 };

void setup() {
  Serial.begin(31250);  // Inicjuj port z nietypową szybkością 31250 bps
}
void loop() {
  for (byte x = 0; x < 6; x++) {                                           // Powtarzaj dla całej szóstki potencjometrów.
    int nowyOdczytPotencjometru = analogRead(potencjometr[x]);             // Odczytaj wartość napięcia ze ślizgacza kolejnego potencjometru.
    if (abs(staryOdczytPotencjometru[x] - nowyOdczytPotencjometru) > 7) {  // Jeśli odczytana wartość jest większa od 7 od wartości poprzedniej...
      staryOdczytPotencjometru[x] = nowyOdczytPotencjometru;               // Uaktualnij wartość napięcia dla następnego porównania.
      Serial.write(176);                                                   // Wyślij komunikat "wyślij kontroler" na kanale pierwszym.
      Serial.write(numerKontrolera[x]);                                    // Wyślij numer kontrolera z tablicy.
      Serial.write(nowyOdczytPotencjometru >> 3);                          // Wyślij wartość potencjometru.
    }
  }
}

Pozostało rozbudować program. Stworzymy sobie dwie tablice: w pierwszej potencjometr będą siedzieć adresy pinów, które stworzą analogowe porty wejściowe, w drugiej numerKontrolera – drugi bajt kontrolerów MIDI, czyli adres wirtualnego suwaka na ekranie. Przydzieliłem tu adresy tych suwaków, których wpływ na brzmienie jest kluczowy.

Pętla główna nie będzie się wiele różnić od tej z poprzedniego szkicu, tylko wykona się sześć razy, po kolei dla każdego potencjometru. Najpierw będziemy je czytać, wstawiając do tymczasowej zmiennej nowyOdczytPotencjometru. Następnie, jeśli wartość bezwzględna różnicy odczytu bieżącego i zapamiętanego będzie większa od siedmiu, przepiszemy wartość odczytaną do tabeli i wyślemy trzy bajty: stały – definiujący wysyłanie wartości kontrolera na kanale pierwszym, drugi – wysyłający konkretny numer kontrolera według indeksu tabeli i trzeci – wysyłający zmierzoną wartość odpowiedniego potencjometru. Cóż, pozostało program skompilować i zatracić się w zabawie.

Powiązane tematy

Płytka edukacyjna TME-EDU-ARD-2Płytka edukacyjna TME-EDU-ARD-2Sprawdź tutaj

Przeczytaj również

Nasi partnerzy

TMETech Master EventTME EducationPoweredby
Copyright © 2025 arduino.pl