MIDI библиотека

Alex_Bryl
Offline
Зарегистрирован: 12.02.2018

Всем здравствуйте. Вопрос по работе с библиотекой MIDI.h. Скачал ее с гитхаба, после даже обновил стандартными средствами ардуино IDE. Пишу следующий скетч, например:

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

int val;
byte volume;
byte oldVolume;

void setup() {  
MIDI.begin(1);
}

void loop() {

val = analogRead (0);
volume = map (val, 0, 1023, 0, 127);
 if (abs (volume - oldVolume) >= 8);
  {
   MIDI.sendControlChange(7, volume, 1);
   oldVolume = volume;
}
}

Ко входу 0 подключаю любой потенциометр. 

Запускаю ардуину через конвертер и в MIDI OX вижу, что команда посылается постоянно, а не только при смене параметра volume. Самое интересное, что такие команды, как sendNoteOn, sendPitchBend при аналогичных условиях работают корректно и отсылаются только при изменении. В чем может быть проблема? В версии библиотеки или ее совместимости с чем-либо? До обновления библиотеки, к слову, sendPitchBend вообще не работал.

 

P.S. прежде чем публиковать вопрос решил обовить все, что касается ардуины и библитек, не помогло.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Alex_Bryl, чудес не бывает. Библиотека не станет отсылать команды, если Вы ее об этом не попросите.

Ваш код не запускал, но сразу бросается в глаза, что Вы вычитаете из одного беззнакового другое беззнаковое. В результате получается беззнаковое, но если уменьшаемое меньше вычитаемого, то происходит переполнение и результат оказывается где-то в районе 255. Что, очевидно, больше 8. Сделайте volume локальной переменной типа int.

Второе, что бросается в глаза, гистерезис Вы вводите уже после масштабирования. Т.е. по факту шаг регулирования у Вас примерно 1/16 от всей шкалы. Вы уверены, что Вы именно этого хотели.

А вообще, программу надо отлаживать. Для отладки на Ардуино следует вставлять в интересные места программы контрольную печать. Например, при срабатывании условия следовало бы вывести результат в последовательный порт, чтобы посмотреть, тот ли он, который Вы ожидаете.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Точку с запятой в 17 строке уберите.

Alex_Bryl
Offline
Зарегистрирован: 12.02.2018

Перед тем, как проверить ответы здесь, сам заметил, какую тупую ошибку совершил в скетче. Все так, а я 2 дня бился с этой фигней