Матричная клавиатура

Столкнулся с проблемой нехватки портов контроллера для управляющих клавиш. Клавиатура аж 4×3. Можно использовать различные интерфейсы последовательной передачи, но есть вариант и по-проще.

У меня был в распоряжении один аналоговый пин разрешением 10бит. Что нам это дает? — 1024 различных состояний на входе, по-другому, в теории, мы можем подключить 255 кнопок, используя резисторы. 😀 Но в реальности из-за помех и неточностей количество снизится до ~30.
Примерная схема:

Благодаря резисторам разного номинала, каждая кнопка будет иметь свой уникальный уровень сигнала, по которому мы сможем ее определить.  Важно: сопротивления резисторов R1, R3, R4, R5 должны быть меньше сопротивления R2. (иначе сигнала не будет) Кн1=R1; Кн2=R3; Кн3=R4; … Еще один вариант:

Здесь же используются резисторы одного номинала, но подключенные последовательно. Кн1=max; Кн2=R1; Кн3=R1+R2. Суть та же.

Использование

Для начала подключите собранную схему к МК с программой, выводящей состояние аналогово порта. Нажимайте клавиши и определите два граничных значения каждой кнопки(от и до).

В дальнейшем опрос кнопок клавиатуры будет происходить простыми условиями:

1
2
3
4
5
int a = analogRead(A2); //Читаем состояния
 
if (a>202 && a<403) {} //Нажата кнопка1
if (a>600 && a<768) {} //Нажата кнопка2
.......

У меня получилась такая штука:

Серьезный недостаток конструкции: нельзя нажать одновременно две и более кнопок.

About admin

Прохожий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *