Первый блин. Teensy как сенсорный midi-контроллер.
- Войдите на сайт для отправки комментариев
Втр, 24/09/2019 - 19:34
Приветствую! Первый свой проект (копипасту, разумеется) в среде 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);
}
Спасибо!
С пониманием кода пока проблемы, пытаюсь разбираться, но пока глаза разбегаются. Подскажите - в какую сторону копать?
В сторону понимания кода, разумеется. Брать книжку, внимательно изучать конструкции языка и по ходу дела пытаться понять, что в этом коде написано.
Как сказал гуру (уж поверьте) - с понимания кода и чтения литературы по вопросам возникающим. Сейчас скажу - вот тут проблема, вылезет другая. А если самому не хочется разбираться - и не надо было в это "лезть". В платный раздел - все сделают "в шоколаде".