MIDI библиотека
- Войдите на сайт для отправки комментариев
Всем здравствуйте. Вопрос по работе с библиотекой 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. прежде чем публиковать вопрос решил обовить все, что касается ардуины и библитек, не помогло.
Alex_Bryl, чудес не бывает. Библиотека не станет отсылать команды, если Вы ее об этом не попросите.
Ваш код не запускал, но сразу бросается в глаза, что Вы вычитаете из одного беззнакового другое беззнаковое. В результате получается беззнаковое, но если уменьшаемое меньше вычитаемого, то происходит переполнение и результат оказывается где-то в районе 255. Что, очевидно, больше 8. Сделайте volume локальной переменной типа int.
Второе, что бросается в глаза, гистерезис Вы вводите уже после масштабирования. Т.е. по факту шаг регулирования у Вас примерно 1/16 от всей шкалы. Вы уверены, что Вы именно этого хотели.
А вообще, программу надо отлаживать. Для отладки на Ардуино следует вставлять в интересные места программы контрольную печать. Например, при срабатывании условия следовало бы вывести результат в последовательный порт, чтобы посмотреть, тот ли он, который Вы ожидаете.
Точку с запятой в 17 строке уберите.
Перед тем, как проверить ответы здесь, сам заметил, какую тупую ошибку совершил в скетче. Все так, а я 2 дня бился с этой фигней