Сделана вся индикация на главном экране

Когда я писал про “множко попрограммировать”, я, похоже, не шутил. В исходниках уже 1666 строк кода (см. рис. 1). Это, конечно, пока ещё прототип, один класс (клавиатуры и управляющие кнопки) ещё не оформлен как надо. Прошивка уже умеет воспринимать “мызыкальные” клавиши и посылать в синтезатор соответствующие команды, и умеет показывать на основном экране основные параметры своего состояния (см. видео ниже). То есть, в принципе, “голая игралка” уже есть; и если присобачить к клавиатурам баяна датчики и подключить к макетке, то можно даже играть. Теоретически.

А практически осталось дописать:

  • Настройку параметров для каждой клавиатуры (всего их четыре: правая, левый бас, левый аккорд, и выборный режим левой клавиатуры, когда нет ни баса, ни аккорда, а есть только одиночные ноты, как на правой клавиатуре). Это будет прокручиваемый список на 4 столбца и на 15 строк; первые 3 строки из этого списка показываются на главном экране.
  • Настройку системных параметров
    • включение/выключение датчика давления
    • включение/выключение режима “Running Status”
    • выбор типа подключенного синтезатора (либо “General MIDI”, либо “ATemp”)

Это программа-минимум. А максимум – это ещё пара интересных режимов, как, например, подключение канала ударных инструментов для баса/аккорда; эта фишка во всех электронных баянах, что я видел, её надо сделать.

Рис. 1
Читать далее «Сделана вся индикация на главном экране»

Я у мамы UX/UI дизайнер

Дизайн “GUI” баяна* я рисую… в экселе (см. рис. 1). Для меня он оказался самым дешевым и быстродоступным средством визуализации. Чтобы понять, что и как надо будет разместить на экране.

С индикаторами я ещё не определился. Да и не дошли ещё руки до них. Довольно много времени ушло на то, чтобы окончательно понять, как работать со строками, расположенными в PROGMEM. Как всегда, оказалось, что руководства и прочие документы пишутся для того, чтобы им следовать и делать, как написано, а не для того, чтобы на них посмотреть и сделать по-своему. Ну и затупил на ровном месте пару раз (как же без этого).

Рис. 1
Читать далее «Я у мамы UX/UI дизайнер»

Готовлюсь писать “GUI”

Наша служба и опасна и трудна,
И на первый взгляд, как будто не видна.

Это как раз про написание кода, который пока не производит видимых эффектов.

Я тут переконфигурил макетку для работы с дисплеем. Теперь кнопки – это не музыкальные клавиши, а управляющие кнопки с панели управления (хорошо, что это очень легко перенастраивается в прошивке). Зато теперь у меня есть кнопки, которые можно назначить на “вверх”, “вниз”, “вправо”, “влево” и ещё 2 кнопки, которые будут в разное время выполнять разные роли.

И заодно немного причесал ранее написанное. Оформил в полноценную нормальную ардуино-библиотеку класс, работающий со светодиодами. Вытащил в отдельные .h/.cpp файлы класс с очередью событий приложения.

И доработал класс “кнопки/клавиши”, чтобы можно было для управляющих кнопок включать режим “быстрого автоповтора”, как на обычной компьютерной клавиатуре. Т.е. при удерживании кнопки (но не сразу, а через 0.7 с после начала удерживания), кнопка автоматически генерирует события “нажато”/”отпущено” с частотой примерно по 20 событий в секунду. Самое то, что нужно, для настройки численных параметров с помощью стрелок.

И я немного офигел, когда увидел, что библиотека для работы с экраном сожрала аж целый килобайт с лишним ОЗУ (под буфер обмена с дисплеем). Для моих нужд мне осталось всего порядка 300 байт теперь. Ну, по идее, этого должно хватить, учитывая, что я всё-всё, что можно размещаю во флеш-памяти (см. ключевое слово PROGMEM). Экран нужен, и русские буквы на нём тоже нужны; придётся терпеть.

По плану, следующий шаг – это утащить во флэш-память кое-какие константы для клавиатурного класса. Планирую освободить в ОЗУ порядка 20 байт, может чуть больше.

Рис. 1

Праздник первого MIDI звука

Сегодня, наконец, пришли долгожданные детальки для моего MIDI баяна (см. рис. 1).

  1. Блок питания 5V, который будет использоваться для питания баяна.
  2. 20 регистров 74HC595 – для работы со светодиодами индикации и в запас.
  3. 200 магнитов 4×2 мм.
  4. 122 датчика Холла.
  5. Разъёмы DIN-5.
  6. OLED дисплей синий
  7. OLED дисплей белый (потом решу, какой именно использовать)
  8. Дифференциальный датчик давления
Рис. 1
Читать далее «Праздник первого MIDI звука»

Где размещать датчики в левой механике?

Получил я сегодня сообщение от почты, что я уже могу идти забирать датчики Холла.

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

Какие вообще есть варианты размещения датчиков со стороны механики? Сами клапаны там закрыты тягами и прочими металлическими штуками. Но есть там одно интересное место, показанное красной рамкой и стрелкой на рис. 1. Этот ряд “лепестков”, по идее, и есть самое правильное место для установки датчиков. Клавиши сначала давят на эти лепестки, лепестки двигаются вниз и открывают связанные с ними клапаны. Проблема в том, что расстояние между ними очень маленькое, и вряд ли получится там разместить датчики хоть как-то (не говоря о том, чтобы разместить их там оптимально с точки зрения чувствительности).

В общем, получу баян из капремонта – обязательно примерюсь к этому месту. По фотографиям можно только гадать.

Рис. 1

Всё, что мог сделать, – сделал

Всё, что я мог сделать без тех компонентов и деталей, которые ко мне ещё едут, я сделал.

Написана заготовка класса MIDI-контроллера. Оно уже умеет обрабатывать нажатия и отпускания “музыкальных” кнопок. Каждой музыкальной кнопке поставлена в соответствие MIDI-нота; при нажатии/отпускании посылаются MIDI соообщения начать/закончить звучание. (В финальном варианте музыкальные кнопки обрастут доп. функциями, но пока – вот так.)

Добавил 3 сенсорных кнопки (см. рис. 1). Сенсорных – потому что простых кнопок у меня только 3, а их я уже задействовал под музыкальные кнопки (настроены на До-Ми-Соль 1-й октавы).

Эти сенсорные кнопки будут изображать управляющие кнопки. Две ближних кнопки сейчас переключают т.н. “номер программы” для текущего MIDI канала. Т.е. перебирают различные музыкальные инструменты, которые будут звучать в канале. Ну как перебирают… Должны перебирать. 🙂

Это всё надо проверять на настоящем MIDI синтезаторе. Вот приедут ко мне гнёзда DIN-5, я запаяю MIDI-выход для этой макетки, и можно будет через уже имеющийся MIDI-USB переходник подключиться к компу и “поиграть” на программном синтезаторе. Это у меня будет “праздник первого MIDI звука”.

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

Рис. 1

Единственная проблема

Написание прошивки продвигается отлично. Но есть проблема. Пока единственная.

И проблема эта – эстетического свойства.

Не могу определиться со стилем наименования типов и переменных. 🙁 В разные моменты времени я давал имена разным сущностям, руководствуясь сиюминутным пониманием о правильности. В какой-то момент мн казалось правильным одно, а потом – уже другое. Потому что некоторые имена “нормально” выглядят в одном стиле, а другие в том же стиле выглядят “некрасиво”. В результате получился разнобой. 🙁

В аду для перфекционистов
Ни серы нету, ни огня,
И лишь слегка несимметрично
Стоят щербатые котлы.

Моя проблема в том, что я за свою жизнь использовал несколько стилей. И поэтому все они мне кажутся нормальными. Печаль. Когда будет готова финальная версия, придётся выравнивать стиль.

Рис. 1

Следующий модуль прошивки – MIDI-контроллер

Пожалуй, я понял, какой модуль писать следующим: MIDI-контроллер.

Получать нажатия практически любого количества кнопок прошивка уже умеет. По-разному моргать практически любым количеством светодиодов – тоже. А всё, что нужно миди-контроллеру для счастья – это получить событие от кнопки, сопоставить эту кнопку с конкретной нотой, и отправить соответствующую команду в MIDI-OUT порт и однократно мигнуть светодиодом (один светодиод будет индикатором активности MIDI-OUT порта).

Кнопок, правда, у меня пока всего три, но на какое-нибудь мажорное трезвучие, например, этого вполне хватит.

Я сегодня пересобрал макетку. Избавился от ненужных светодиодов, убрал один 165-й регистр за ненадобностью в данный момент, и перетащил всё на более длинную макетную плату, чтобы там было место закрепить DIN разъем, когда он приедет. (Пока разъема нет – буду слать отладочные строчки в Serial, чтобы видеть их на компе.)

Заодно разобрался с MIDI протоколом. Он оказался довольно простым – всего 7 сообщений (см. рис. 1) и незамысловатый алгоритм их отправки. Из них я буду использовать три: 0x9, 0xB, 0xC и, может быть когда-нибудь, 0xE.

В общем, вперёд и с песней.

Рис. 1

СДЭКу – незачёт

Доехал мой баян до Новосибирска. Но не могу сказать, что доехал успешно.

Судя по следам на футляре (см. рис. 1 справа), его со значительной высоты уронили на угол. В результате – трещина в левом полукорпусе и порванный (или лучше сказать “треснутый”?) целлулоид. (Баяны не красят, их обтягивают целлулоидом.) 5 ярко-жёлтых наклеек с надписью “ХРУПКОЕ!” не помогли. Посылаю всем причастным к этому инциденту луч кровавого поноса с личинками.

Механика (главное) не пострадала. Мастер ответил, что можно отремонтировать. Останется почти незаметный косметический дефект.

Рис. 1

P.S. А работа уже в самом разгаре:

Рис. 1

Поторопился я или нет?

Как я недавно докладывал, развёл я себе gitlab.

И делал я это, будучи в святой уверенности, что на гитхабе бесплатный аккаунт не может создавать приватные проекты. Оказывается, я немножко так отстал от жизни: в 2019 году там в принципе разрешили закрытые проекты с числом участников не более трёх, а с 2020 года убрали ограничение на число участников.

Мнда.

Ну, зато мой гитлаб крутится на моём собственном сервере, обеспечивая какую-никакую гарантию приватности (что редкость в наши дни). И самое главное: он не введет против меня санкции и не запретит мне доступ к моим проектам (как происходило в 2022 году).

И, раз уж пошла такая пьянка, поделюсь радостью: я немного оптимизировал потребление оперативной памяти моими классами для работы с кнопками и светодиодами. Теперь они потребляют на 72 байта меньше. 🙂 Для Ардуино это актуально, там доступной оперативной памяти имеется всего 2 килобайта. Каждая сотня байт на счету.

Рис. 1 КДПВ