Теперь у меня не 4 программируемых кнопки, а, типа, 12. Для каждой из 4-х физических кнопок можно программировать одиночное, двойное и тройное нажатие.
Мне нравится, как Alex Gyver реализует кнопочное управление своими самоделками. Минимум кнопок (обычно всего одна), максимум возможностей. За счет комбинирования многократных нажатий и удерживаний.
Тоже так хочу.
И на днях скачал себе библиотеку EncButton, реализующую всю эту красоту. Непосредственно её использовать мне оказалось неудобно, и я решил взять оттуда алгоритмы и реализовать всё самостоятельно.
И только я открыл редактор и начал лазить по коду, как что-то меня заставило прочитать документацию. И внезапно стало понятно, что я собрался ломиться в открытую дверь. Потому что всё, что мне надо, уже изложено в соответствующем разделе. И для наглядности даже сделана веб-симуляция, чтобы можно было всё понажимать и потрогать.
В результате (как это часто бывает) написать свой вариант управляющей кнопки оказалось проще и быстрее, чем прикручивать библиотечную реализацию.
Так как моя ритм-машина проигрывает MIDI-файлы с карты памяти, сбивка — это тоже файл, записанный на ту же карту памяти с тем же именем, что и основной файл, но со специальным суффиксом к имени. В одновном MIDI файле есть спец-метка, которая определяет тот момент, когда должна начинать воспроизводиться сбивка. Как только файл сбивки проигран, возвращаемся к воспроизведению основного файла.
Теперь библиотека MD_MIDIFile умеет просто сканировать MIDI файл, а не проигрывать его. Т.е. просто перебирать все-все командочки из всех дорожечек нужного MIDI файла, чтобы я мог посмотреть, что там за командочки такие, и нет ли среди них таких, которые могут поломать работу ритм-машины.
Для моих целей, надо уметь сканировать MIDI файл с целью анализа. Нужно убедиться, что в MIDI-файле, предназначенном для ритм-машины, нет «неправильных» команд. Исходная библиотека быстренько просканировать содержимое файлов не даёт; она их умеет только воспроизводить в режиме реального времени.
Опыт показал, что «быстренько просканировать» можно. Нужно будет только немного доработать библиотеку; дописать пару новых методов в существующие классы. В общем, теперь понятно, куда копать.
В левой клавиатуре пришлось серьёзно повозиться с доклеиванием вторых магнитов на плоские рычаги, чтобы компенсировать уменьшившуюся чувствительность датчиков.
Но, воспользовавшись вчерашней новогодней ночью, я всё закончил, и теперь баян играет лучше прежнего. Теперь во всём диапазоне перемещений рычагов в левой клавиатуре магниты не выходят из чувствительной зоны датчиков и звук не прерывается, если, например, глубоко прожать кнопку.
Баян теперь питается от аккумуляторов. Полного заряда хватает больше чем на 5 часов непрерывной работы.
Сижу, учу 2-ю страницу «Ленивого Дика». И заодно понимаю, что для того, чтобы нормально это произведение сыграть, нужна нормальная партия ударных для автоаккомпанемента. Простейший автоаккомпанемент, который сейчас реализован, не подойдет, потому что в двух местах меняется размер, а в конце мелодии (когда солирующая труба тянет ноту 5 «картошек» подряд) там вообще свой собственный ритм.
В общем, пришло время писать 2-ю версию ритм-машины, в основе которой теперь будут MIDI-файлы, хранящиеся на карте памяти.
В одной из предыдущих заметок я докладывал, что при питании от 3.3 В (вместо 5 В) чувствительность датчиков Холла заметно уменьшилась, и надо заново перенастраивать положение датчиков.
Практика показала, что не всё так плохо, как могло бы быть.
Правую клавиатуру я подстроил довольно быстро. Пришлось подогнуть меньше десятка датчиков, и правая рука теперь играет как надо.
А вот с левой рукой придётся повозиться (см. рис. 1). Примерно для 30-40% датчиков надо доклеивать вторые магниты рядом с первыми, чтобы датчики срабатывали во всех возможных положениях плоских рычагов. При 5 вольтах их чувствительности хватало, чтобы работать в крайних положениях рычагов, а при 3.3 В — уже не хватает. Дополнительные магниты помогают.
Занятие очень муторное, клеить неудобно. Но деваться некуда.
Собрал как-бы начисто схему для измерения уровня заряда аккумулятора (см. рис. 1).
Рис. 1
Проблема была в том, что при подключённом «измерительном» входе (№2 на рис. 1) не стартовали модули питания. Что-то там им мешало. Однако, если подключить аккумулятор к измерительному входу после того, как заработают модули питания, то всё работает штатно.