Я создаю эти музыкальные секвенсоры .
Только это не совсем секвенсор, это физический интерфейс для секвенсора. Секвенсор - это приложение, которое работает на ноутбуке, к которому подключается секвенсор, и позволяет пользователю создавать барабанные петли на лету. Это довольно весело, но для этого нужен ноутбук, потому что секвенсор не «встроен».
То, что я хотел бы, чтобы сделать последовательность на борту моего устройства.
Теперь давайте предположим, что я знаю, как найти соответствие классу для подключения USB MIDI, и давайте также предположим, что я могу выяснить, как подключить arduino для отправки MIDI-нот через 5-контактный порт DIN. Больше всего меня беспокоит сдвиг темпа во времени из-за непоследовательной синхронизации минутных значений во время каждого цикла цикла событий.
Некоторые вещи, которые я знаю:
Вы не должны полагаться на
delay()
контроль петли темпа. Задержка останавливает все операции прошивки, и это не может работать, потому что мне нужно опросить физический интерфейс пользователя на предмет изменений во время выполнения последовательности.Расчеты на основе
millis()
лучше, потому что прошивка может продолжать работать и действовать после истечения определенного количества.Даже при том, что ни один из моих физических элементов управления не вызывает подпрограммы прерывания, некоторые операции могут задержать
loop()
запуск основного . Если я спроектирую функцию, которая ожидает пользовательского ввода, то это, очевидно, может вызвать проблему пропуска «крайнего срока», чтобы действовать, еслиmillis()
счет окончен. Я знаю, что это проблема моего собственного дизайна ...
Вопросы:
A. Является ли основанный на AVR arduino подходящим микроконтроллером для опроса пользовательского интерфейса и запуска критически важного цикла синхронизации? Я знаю, что теперь есть Arduino на базе ARM, который работает намного быстрее. Будет ли Teensy 3.0 лучшей альтернативой? Обе эти платы имеют напряжение 3,3 В, так что это еще один набор проблем для работы ... но я пока проигнорирую это.
B. Должен ли я разделить задачу на два микропроцессора? Один для обработки опроса и обновления пользовательского интерфейса и один для критически важного цикла синхронизации.
с. Что-то другое?
Моя главная цель - вообще не использовать компьютер. Я также хочу рассчитывать на свинг, но в этом случае свинг ничего не значит, если у меня нет фиксированного и синхронизированного с точным темпом темпа. Спасибо за ваш совет!
noInterrupts();
останавливает дрожание, но также останавливает все нужные прерывания.