Несколько кнопок на один вход

Задача: сэкономить входы на Arduino, повесив три кнопки на один вход.

Решение заключается в подачи на вход ардуино тока разного напряжения. К каждой кнопки мы подаём +5 Вольт таким образом:

1) К первой кнопке подаём просто +5 Вольт
2) Ко второй кнопке подаём +5 Вольт через сопротивления в 10кОм
3) К третьей кнопке подаём +5 Вольт через два сопротивления в 10кОм последовательно.

Далее соединяем выходы с кнопок вместе, притягиваем их к земле и к аналоговому входу Arduino.

Схема подключения:

Программа для прошивки ардуино:

Включив Serial Monitor можно проследить, что поступает на вход arduino при нажатии каждой из кнопок:
1) Первая кнопка выдаёт значение больше 990 (включение/выключение светодиода )
2) Вторая кнопка – 500-530 (регулировка яркости)
3) Третья – 335- 345 (регулировка частоты мигания)

Результат:

Думаю общий смысл понятен, спасибо за внимание.

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

Иногда бывает, что на проект не хватает портов. Решить эту проблему можно по-разному: можно взять плату с большим числом портов (Arduino Mega), использовать сдвиговый регистр либо что-то еще. Но иногда количество занятых портов можно сократить, ничего не меняя в аппаратной части.

Есть возможность подключить несколько кнопок (и не только) к аналоговому входу. При этом каждой нажатой кнопке будет соответствовать свое значение сигнала.

Ниже представлена схема подключения 4-х кнопок к порту A0. Для подключения используются резисторы сопротивлением 1 КОм.

Загрузите код в Arduino.

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

Подключите 4 светодиода к портам 5, 6, 7 и 8. Напишем программу, в которой каждая кнопка будет зажигать соответствующий светодиод. Если же никакая кнопка не нажата, все светодиоды должны быть погашены.

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

3 Комментарии

Попробовал Ваш пример. Смотрел реакцию в мониторе порта.

не понравилось что реакция не мгновенная и не однозначная.
после нажатия кнопки пишет в монитор и несколько кнопок и разные.

(реализовал 4ре кнопки (10,20,30,40ком. и шунтирующий 1ком). Вход А0.

Мультиметр на каждой кнопики выдает: 10.9, 20.9, 30.9, 40.9.
код пробывал такой:
вариант 1.

void setup() <
Serial.begin(9600);
>
void loop() <
int sensorValue = analogRead(A0);
if (sensorValue ==10) Serial.println(«key_-_1»);
if (sensorValue ==20) Serial.println(«key_-_21»);
if (sensorValue ==30) Serial.println(«key_-_31»);
if (sensorValue ==40) Serial.println(«key_-_41»);
delay(20);
>

вариант 2.
if (sensorValue >= 9 && sensorValue = 19 && sensorValue = 29 && sensorValue =39 && sensorValue ↓

Пробовали смотреть, какое значение выводится при считывании с порта A0? Выведите на экран значение sensorValue и посмотрите что там и дальше отталкивайтесь от этих значений.

делаю се5йчас меню изучаю МК.

5 кнопок на пин А0
все кнопки идут на землю через резисторы, первый ближний резистор 50 ом второй 10 ом третий 3,5 ом четвертый 1 ом пятый 330 ом. выдают напряжение в интервалах указанныъ в условиях функции обработчика нажатий.

#define TotalMenu 4 //Количество меню в главном меню делаем на 1 больше, для 4х меню делаем значение 5
#define TotalSubMenu 6 //Количество меню в главном меню

const byte NONE_MENU= 0; // не нажата ни одна кнопка выводим морду
const byte LEFT_MENU=1;//В лево, либо выход
const byte RIGHT_MENU = 2;//В право либо вход
const byte UP_MENU=3; //ВНИЗ
const byte DOWN_MENU=4;//ВВЕРХ
const byte SELECT_MENU=5;//Функция выбора или окей

const byte keypadPin = A5; //Номер аналогового пина для кнопок меню.
byte button_key = 0; //Начальное значение переменной байт
// Функция нажатий кнопок перехода по меню, в цикле колесом.
void funcmenu(int outblok, int CountMenu)
<
button_key = getKey(); // Получить номер от нажатой кнопки. от 1 до 4

if(button_key==1&&flag==0)//если нажата кнопка в низ то прибавить 1
<
block++;
flag=1;
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие
// плюс защита от «дребезга» 100%
if(block > CountMenu )
>

//Функция обработчик меню
byte getKey()
<
int val_analog = 0;
byte button_key = 0;
val_analog = analogRead(keypadPin);

//В данный блок можно добавлять сколько угодно меню.

Подскажите как использовать Функция нажатий кнопок перехода по меню, в цикле колесом.
при входе в меню.

тоест работаем в главном меню затем вошли в подменю и работаем этими же кнопками в нутри.

Привет, жители Хабра! Сегодня я решил сделать полный гайд по клавиатурам для Arduino.
Внимание! Статья ориентирована преимущественно на новичков!

Во многих проектах появляется необходимость создания возможности ввода данных пользователем. Если вам нужно реализовать большое количество кнопок(относительно), то подключать их по-отдельности становится и долго, и нерационально. Для этой цели лучше выбрать какую-нибудь клавиатуру, но как и к любому выбору, к нему нужно подходить осознано. Какие же бывают виды клавиатур и как с ними взаимодействовать?

Глобально, все модули данного типа можно поделить на две большие категории: матричные и аналоговые.

Матричные клавиатуры

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

Принцип работы

Понять как устроена данная клавиатура можно изучив следующую схему:

Чтобы понять какая кнопка была нажата, нужно подавать сигнал на первые четыре контакта модуля и смотреть какой сигнал возвращается со второй. Но не стоит пугаться того, что вам придется писать алгоритмы обработки для восьми пинов вручную — в этом нам поможет готовая библиотека «keypad.h», благодаря которой нам не придется изобретать велосипед.

Подключение к плате

Подключение собственно модуля

В этой статье я воспользуюсь следующей схемой подключения:

У Вас наверное возникает вопрос: «Почему я решил использовать пины со второго по девятый, пропустив нулевой и первый?» — дело в том, что некоторые модули, используют их в качестве каналов RX и TX для получения и передачи данных соответственно. К примеру, блютуз модуль. Поэтому с учётом возможного дополнения проекта другими модулями, было решено оставить данные пины подключения свободными.

Написание скетча

Для начала, для того, чтобы получить возможность использовать библиотеку для подключения клавиатур в коде, нужно установить её на ваше устройство. Это можно сделать следующим образом: в самой Arduino IDE нажимаем Скетч -> Подключить библиотеку -> Управлять библиотеками… либо используем комбинацию горячих клавиш «Ctrl + Shift + I». В поиске вбиваем «keypad.h»(без скобочек) и нажимаем «Установка».

После установки приступаем к написанию скетча:

Плюсы и минусы

Минусы

Плюсы

Аналоговые клавиатуры

Принцип работы

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

Подключение к плате

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

Итак: аналоговый выход клавиатуры соединяем с любым аналоговым пином на плате, контакт VCC на плате соединяем с 3.3V(не смотрите на надпись на самой клавиатуре, которая гласит о 5V — это ошибка), а GND на плате с GND на модуле. Вы можете воспользоватся следующей схемой:

Написания скетча

Здесь не нужно использовать сторонние библиотеки, т.к. всё предельно просто и понятно. Вот собственно и сам код, который считывает нажатую кнопку и выводит её номер, от 1 до 16(слева на право, с верху в низ) либо 0 если ничего не нажато, в монитор порта.

Плюсы и минусы

Плюсы

Минусы

Итоги

Лично я рекомендую использовать именно аналоговые клавиатуры, так как они чаще-всего более качественные и подключать их проще-простого. Главное обращать внимание на таблицу значений нажатых кнопок, которую предоставляет производитель или же, если таковой нет, можно сделать эти замеры самостоятельно, выводя значения из аналогового порта в монитор порта, чтобы потом использовать их в коде. Но выбор, всегда остается за Вами: использовать стандартный дешёвый вариант либо переплатить ради значительных плюсов в некоторых ситуациях.

На этом у меня всё. Оставляйте свои вопросы в комментариях, пишите своё мнение и встретимся на просторах Хабра!

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

Ваш адрес email не будет опубликован.

Adblock
detector
Домострой