Вот, к примеру, приехали ко мне регистры 74HC165, и стало возможным собрать отладочный вариант каскада кнопок (см. рис. 1) и написать обработчик клавиатуры.
У меня в наборе, правда, есть только 3 кнопки, но для отладки этого вполне хватило. Уверен, что переписывать работу с кнопками уже не придётся; разве только добавлять разные возможности. Ну и, конечно, придётся кое-где подправить после того, как станет понятно, как именно будут у меня организованы каскады кнопочных регистров. Сейчас пока не понимаю.
То, что пока получается, мне нравится. Оно читает значения из регистров и в случае обнаружения нажатий/отпусканий кнопки создаёт соответствующее событие и помещает его в очередь. Кнопки бывают «музыкальные» (для которых не нужно ловить ничего кроме нажатий и отпусканий) и управляющие, для которых надо будет ловить ещё удержания. Это для сценариев, когда простое нажатие, например, включает предварительно настроенный тембр синтезатора, а нажатие с удержанием больше 2 секунд переводит кнопку в режим программирования нового тембра. Очень, очень мне нравится концепция очереди событий в приложении.
Правда, когда я смотрю на размер получившегося кода, то возникают смешанные чувства. Например, в исходной прошивке «с форума» 1052 строки. А у меня сделано:
- работа со светодиодами через регистры 47HC595
- работа с кнопками через регистры 47HC165
- очередь событий
- и немного кода для того, чтобы всё вышеупомянутое можно было отладить.
И уже 589 строк. 🙂
Заодно не удержался и измерил скорость чтения каскада из 2-х регистров. Одно чтение занимает 0.2655 мс (я делал цикл на сколько-то-там тысяч чтений и измерял общее время в миллисекундах). Экстраполируя, можно предположить, что 17 регистров (если их склеить в один длинный каскад) будут читаться 2.26 мс. Это на 0.26 мс больше, чем в оригинальной прошивке задержка на включение одной строки датчиков Холла (а всего там 10 строк). Т.е. полное чтение клавиатуры там занимает не меньше 20 мс (это я только задержку посчитал). У меня же, повторюсь, все входы (и музыкальные клавиши, и управляющие кнопки) будут читаться за 2.26 мс. На порядок быстрее.
Кстати, дребезга механических контактов не замечено. Видимо, он не проходит дальше входных ног регистров. Зато «висящие в воздухе» ноги регистров читаются то нулями то единицами случайным образом (так и должно быть). На время отладки пришлось замаскировать соответствующую часть входящего буфера.
Дальнейшие действия зависят от того, что приедет следующим. По идее, это будут OLED дисплейчики 128*64 (2 шт.) и датчик давления (1 шт., дорогой оказался, сцк. Будет 1 датчик и для отладки, и для финального изделия. Надеюсь, не сожгу). Ну и в любом случае надо уже хорошенько разбираться с MIDI сообщениями. Причём не столько с ними, сколько с тем, как этими сообщениями управлять синтезатором. А здесь — задержка. В наличии только синтезаторы без корпуса, для встраивания куда-нибудь. А мне же нужен в корпусе; баян у меня будет не более чем MIDI клавой.