Оглавление:

Клавиатура с одним контактом 4 × 4: 10 шагов
Клавиатура с одним контактом 4 × 4: 10 шагов

Видео: Клавиатура с одним контактом 4 × 4: 10 шагов

Видео: Клавиатура с одним контактом 4 × 4: 10 шагов
Видео: ⌨️ ТОП 10 БЮДЖЕТНЫХ МЕХАНИЧЕСКИХ КЛАВИАТУР от 999 до 9000₽! ЛУЧШАЯ БЮДЖЕТНАЯ МЕХАНИЧЕСКАЯ КЛАВИАТУРА 2024, Ноябрь
Anonim
Клавиатура с одним контактом 4 × 4
Клавиатура с одним контактом 4 × 4

Каждый раз, когда я вижу клавиатуру, она идет с большим количеством контактов, это большая трата ваших контактов Arduino, так что можем ли мы запустить клавиатуру с одним и только одним контактом?. Ответ здесь.

Шаг 1. Спецификация материалов

Ведомость материалов
Ведомость материалов

Аппаратное обеспечение:

01 Arduino UNO

02 Макетные платы

01 ЖК-дисплей с I2C

16 кнопок

04 резисторы 1,5 кОм

04 резисторы 620 Ом

04 резисторы 220 Ом

08 резисторы 100 Ом

01 резистор 1 кОм

07 Перемычки

Программное обеспечение:

Arduino IDE, установленная на вашем ПК

Шаг 2: Схема и Цикрут

Схема и Цикрут
Схема и Цикрут
Схема и Цикрут
Схема и Цикрут

Вся идея состоит в том, что у нас есть матрица кнопок 4 * 4, подключенных вертикально к земле правым проводом и горизонтально другим проводом (вывод кнопки) и резисторами 1,5 кОм, 620 Ом, 220 Ом и 100 Ом, концы 4 ряда соединены четырьмя резисторами 100 Ом, как показано на схеме.

Каждый раз, когда вы нажимаете кнопку, вы замыкаете цепь, и ток проходит по другому пути и другой цепочке резисторов, поэтому вывод A0 принимает разные аналоговые показания для каждой кнопки. Все, что вам сейчас нужно, это кодирование.

Шаг 3: Код

#включают

#включают

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Button = A0;

int readvalue;

установка void ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Кнопка, ВХОД);

lcd.backlight ();

lcd.print («Привет, мир»);

задержка (2000);

lcd.clear ();

lcd.print («Одноштырьковая клавиатура 4 * 4»);

задержка (2000); }

пустой цикл ()

{

readvalue = analogRead (Кнопка);

Serial.println (значение чтения);

если (readvalue == 852) {lcd.clear (); lcd.print ("A");}

else {если (readvalue == 763) {lcd.clear (); lcd.print ("B");}

else {если (readvalue == 685) {lcd.clear (); lcd.print ("C");}

else {если (readvalue == 965) {lcd.clear (); lcd.print ("D");}

else {если (readvalue == 565) {lcd.clear (); lcd.print ("9");}

else {если (readvalue == 614) {lcd.clear (); lcd.print ("6");}

else {если (readvalue == 360) {lcd.clear (); lcd.print ("3");}

else {если (readvalue == 335) {lcd.clear (); lcd.print ("#");}

else {если (readvalue == 396) {lcd.clear (); lcd.print ("8");}

else {если (readvalue == 349) {lcd.clear (); lcd.print ("5");}

else {если (readvalue == 235) {lcd.clear (); lcd.print ("2");}

else {если (readvalue == 279) {lcd.clear (); lcd.print ("0");}

else {если (readvalue == 452) {lcd.clear (); lcd.print ("7");}

else {если (readvalue == 271) {lcd.clear (); lcd.print ("4");}

else {если (readvalue == 170) {lcd.clear (); lcd.print ("1");}

else {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} else {}}}}}}}}}}}}}}}}}

Шаг 4: Корректировка значений

Корректировка ценностей
Корректировка ценностей

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

Шаг 5. Проект после критики и обзора

Проект после критики и обзора
Проект после критики и обзора

Нет сомнений в том, что мы все здесь, чтобы учиться и делиться своими знаниями, благодаря некоторым комментариям, оставленным некоторыми людьми из сообщества, которые были очень полезны, я решил внести некоторые корректировки и улучшения в свой проект:

Оборудование:

Я решил спаять все компоненты на печатной плате, чтобы избежать проблем с плохим соединением на макетных платах.

Код:

Друг посоветовал мне использовать средство устранения неполадок программного обеспечения, и это просто цикл (например, цикл «for»), чтобы программа занимала некоторое время, чтобы выбрать чтение. Это означает, что она выполняет много операций чтения (500 на моем экзамене), но требует только последний.

for (i = 1; i <= 500; i ++) {// берем только 500-й аналог чтения

value = analogRead (Button);} // это поможет занять некоторое время, чтобы избежать плохих показаний

Другой друг, благодаря ему, посоветовал мне сравнить «readvalue» с диапазоном значений, а не с одним, потому что «readvalue» принимает множество значений для одной и той же кнопки. Например, «A» дает чтение: 849, 850, 851 852, 853, 854, 855, так что это диапазон из 7 значений: порог (852) и 3 значения слева и справа. здесь нам нужно сравнить абсолютное значение разницы между «readvalue» и «852» с «3».

if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}

Шаг 6: После некоторой проданной работы

После некоторой проданной работы
После некоторой проданной работы
После некоторой проданной работы
После некоторой проданной работы
После некоторой проданной работы
После некоторой проданной работы

Шаг 7: Момент истины

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

Шаг 8: Конец

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

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

Рекомендуемые: