Arduino – экономим контакты

Подключение цифровой клавиатуры к Arduino, давно уже не является проблемой. Есть варианты клавиатур 3х4 и 4х4 кнопки. Все очень просто, нужно по одному выводу микроконтроллера на каждую строку и столбец клавиатуры. Но что делать, если эти выводы нужны под другое?

Тут я опишу свой вариант подключения кучи кнопок и экономии выводов нашего микроконтроллера.

То что я опишу далее, не является чем то сверх новым или революционным, это довольно таки известный метод, про который многие забывают.

В общем, задумался я о конструкции ретро-калькулятора, причем такого, который смог бы собрать и начинающий радиолюбитель, без СМД компонентов и различной мелочи. Похожие конструкции можно найти в интернете в виде наборов для сборки, но не всегда за бюджетные деньги. В общем просто разминка для моего мозга. В первом приближении у меня получилось что-то вот такое.

Но тут возникла проблема, что для управления индикатором мне нужно 14 ног микроконтроллера (6 цифр + 7 сегментов + точка). И где брать еще 9 ног для клавиатуры, я с ходу не придумал. Связываться с различными мультиплексорами и прочим не хотелось, конструкция планировалась минимальной сложности сборки.

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

Ну а нарисовав схему, собрал прототип, для оценки его работоспособности.

Схема получилась вполне работоспособной и исправно выдавала значения нажатых клавиш. Однако моя попытка свести определение номера кнопки к математической функции от считанного из порта значения, не удались 🙁  пришлось сделать функцию с массивом показаний аналогового порта.

Решение не идеальное и “на скорую руку”, но для проверки работоспособности вполне годится. Так же в функции предусмотрен “дрейф” считываемых значений, +/- 3 единицы.

Таким образом я получим клавиатуру с 20 кнопками, которую может опросить не только Arduino, но и более мелкие микроконтроллеры типа Attiny13, Attiny85.

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