Первый блин. Teensy как сенсорный midi-контроллер.

pl3as3st0pm3
Offline
Зарегистрирован: 24.09.2019

Приветствую! Первый свой проект (копипасту, разумеется) в среде Arduino решил делать попроще, но поэффектней - реализация сенсорного миди контроллера на плате Teensy 3.2, вот пример:  https://www.youtube.com/watch?v=oSeH9Q4-yL8.  Буду краток: работать работает, но не как в видео - в оригинале каждое нажатие обрабатывается как одно, вне зависимости от его длительности, в моём случае - длительные касания звучат как множественные короткие, как если бы я колотил по сенсорам. С пониманием кода пока проблемы, пытаюсь разбираться, но пока глаза разбегаются. Подскажите - в какую сторону копать?

Код такой:

 

unsigned int thresh = 3000; 
unsigned int data; 
int tickTime = 100; 

byte readPins[] = {
  0, 1, 3, 4, 23, 22, 19, 18
};

byte pitches[] = {
  60, 62, 64, 65, 67, 69, 71, 72
};

byte playFlag[] = {
  0, 0, 0, 0, 0, 0, 0, 0
};

byte tick[] = {
  0, 0, 0, 0, 0, 0, 0, 0
};


void setup() {
  usbMIDI.setHandleControlChange(OnControlChange); 
  pinMode(13, OUTPUT); 
  digitalWrite(13, HIGH); 
}

void loop() {
  checkTouch(); 
  checkTick();
  usbMIDI.read(); 
}


void checkTouch() {
  for(int i = 0; i < 8; i++) {
    data = touchRead(readPins[i]); 
    if(data > thresh) {
      usbMIDI.sendControlChange(1, constrain(map(data, thresh, 65535, 0, 127), 0, 127), 1);
      if(playFlag[i] == 0) {
        usbMIDI.sendNoteOn(pitches[i], 127, 1); 
        playFlag[i] = 1;
        tick[i] = tickTime; 
      }
    }
  }
}

void checkTick() {
  for(int i = 0; i < 8; i++) {
    if(tick[i] == 0 && playFlag[i] == 1) {
      playFlag[i] = 0;
      usbMIDI.sendNoteOff(pitches[i], 0, 1); 
    }
    if(tick[i] > 0) {
      tick[i] = tick[i] - 1;
    }
  }
}

void OnControlChange(byte channel, byte controller, byte value) {
    digitalWrite(13, HIGH); 
    thresh = value * 100; 
    delay(10); 
    digitalWrite(13, LOW); 
}

Спасибо!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

pl3as3st0pm3 пишет:

С пониманием кода пока проблемы, пытаюсь разбираться, но пока глаза разбегаются. Подскажите - в какую сторону копать?

В сторону понимания кода, разумеется. Брать книжку, внимательно изучать конструкции языка и по ходу дела пытаться понять, что в этом коде написано.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Как сказал гуру (уж поверьте) - с понимания кода и чтения литературы по вопросам возникающим. Сейчас скажу - вот тут проблема, вылезет другая. А если самому не хочется разбираться - и не надо было в это "лезть". В платный раздел - все сделают "в шоколаде".