УМНАЯ-ЭЛЕКТРОНИКА.РФУМНАЯ-ЭЛЕКТРОНИКА.РФ

 

Как купить

Скидки

Контакты

Оплата

Новости 

Разработка 

Вакансии

Доставка

[72m432] Модуль клавиатуры кнопочной 16-клавишной

43мм х 39мм х 11мм, Вес: 11г.
105.00 Р
14 дн.
1291
5 шт.
+
Если вам необходимо больше товара, то можно привезти его на заказ.
Тел +7 987 254-00-07 (+Whatsapp)
Стоимость и сроки доставки:

Наиболее популярные клавиатуры для Arduino – 16-ти кнопочные. Они позволяют опрашивать16 кнопок всего лишь 8-ю пинами. Используются обычно в проектах с вводом чисел: калькуляторах, кодовых замках. Наиболее распространены два варианта(в данной статье рассказывается о левом варианте, ссылка на правый http://umnaya-elektronika.ru/market/5/modul_klavia... ):


Данная клавиатура(Рис 1) представляет собой матрицу кнопок, то есть кнопки стоящие на пересечении проводов (в этом случае – дорожек, их можно видеть на плате). Схема представлена ниже. Она построена на тактовых кнопках и включает в себя все их достоинства и недостатки(дребезг, характерные щелчки).

Рис.1


Рис.2

Алгоритм работы с такой матрицей(Рис1.) следующий:

  1. Назначаем пины 1-4 на выход, а 5-8 на вход, создаем двухмерный массив типа char и вносим в него символы или числа. Соответсвующие нашим кнопкам.
  2. Подаем на первый пин логический 0, записываем его в переменную, на 2,3,4 – логическую 1
  3. Считываем сигнал с 5-го пина, если 0, то записываем его в переменную, если 1, то перебираем 6,7и 8 пины с тем же условием

Так мы выясним, нажата ли какая-нибудь кнопка в 1-ом столбце. 0 на 5-ом пине соответствует нажатая кнопка 1-го столбца 1-ой строки, 0 на 6-ом – нажатая кнопка 1-го столбца 2-ой строки и т.д.

  1. Повторяем операции 2) и 3) для 2,3 и 4 пинов
  2. В результате получим координаты кнопки: 1-я переменная хранит номер столбца, 2-я переменная хранит номер строки. Записываем эти переменные в массив как аргументы и получаем символ или число соответствующее нажатой кнопке.

ПРИМЕР ПРОГРАММЫ:

int PinOut[4] {5, 4, 3, 2}; // пины выходы

int PinIn[4] {9, 8, 7, 6}; // пины входа

int val = 0;

const char value[4][4]


{ {'1', '4', '7', '*'},

{'2', '5', '8', '0' },

{'3', '6', '9', '#'},

{'A', 'B', 'C', 'D'}

};

// двойной массив, обозначающий кнопку

int b = 0; // переменная, куда кладется число из массива(номер кнопки)


void setup()

{

pinMode (2, OUTPUT); // инициализируем порты на выход (подают нули на столбцы)

pinMode (3, OUTPUT);

pinMode (4, OUTPUT);

pinMode (5, OUTPUT);

pinMode (6, INPUT); //инициализируем порты на вход с подтяжкой к плюсу(принимают нули на строках)

digitalWrite(6, HIGH);

pinMode (7, INPUT);

digitalWrite(7, HIGH);

pinMode (8, INPUT);

digitalWrite(8, HIGH);

pinMode (9, INPUT);

digitalWrite(9, HIGH);


Serial.begin(9600); // открываем Serial порт

}

void matrix () // создаем функцию для чтения кнопок

{

for (int i = 1; i <= 4; i++) // цикл, передающий 0 по всем столбцам

{

digitalWrite(PinOut[i - 1], LOW); // если i меньше 4 , то отправляем 0 на ножку

for (int j = 1; j <= 4; j++) // цикл, принимающих 0 по строкам

{

if (digitalRead(PinIn[j - 1]) == LOW) // если один из указанных портов входа равен 0, то..

{

Serial.println( value[i - 1][j - 1]); // то b равно значению из двойного массива

delay(175);

}

}

digitalWrite(PinOut[i - 1], HIGH); // подаём обратно высокий уровень

}

}

void loop()

{

matrix(); // используем функцию опроса матричной клавиатуры

}

Можно использовать и более простой вариант, если подключить библиотеку Keypad. Ее нужно будет установить из интернета через менеджер библиотек, если кто не знает, то вот объяснение: http://robotosha.ru/arduino/install-libraries-ardu... . В таком случае нам не придется писать код для перебора кнопок, библиотечные функции сделают все сами и код будет занимать меньше места.

ПРИМЕР ПРОГРАММЫ:

#include <Keypad.h>


const byte ROWS = 4; // число строк

const byte COLS = 3; // число столбцов

char keys[ROWS][COLS] = {

{'1','2','3'},

{'4','5','6'},

{'7','8','9'},

{'#','0','*'}

};

byte rowPins[ROWS] = {5, 4, 3, 2}; //пины строк

byte colPins[COLS] = {8, 7, 6}; // пины столбцов

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // константная строчка инициализации

void setup(){

Serial.begin(9600);

}

void loop(){

char key = keypad.getKey(); // получение символа кнопки

if (key != NO_KEY){ // если какая-то из кнопок нажата(есть номер)

Serial.println(key); // выводим соответствующий ей символ в ком-порт

}

}

Пользоваться матрицей удобно, но нужно помнить, что возвращаемое значение функций опроса(символ, соответствующей нажатой кнопке) будет выдано в типе данных char, следовательно, мы получим символ, а не число. Если мы выведем его в ком-порт, то увидим символ поставленный нами в массиве между «‘ ‘», но если проведем с ним алгебраическое действие(к примеру, умножим на 10), то получим результат это действия проведенного с числом этого символа по таблице кодировок. Чтобы этого избежать нужно будет воспользоваться приведением типов, а именно написать int(key) в алгебраическом действии и в массиве записывать числа без «’ ‘». Проще говоря, результаты будут таковы:

Для: Serial.println(key);

Serial.println(key*10); // символ «1» кодируется, как 48

Получим: 1 480

А для: Serial.println(int(key));

Serial.println(int(key)*10); // приводим число 1 в символьном эквиваленте к целочисленному типу

Получим: 1 10

У данной библиотеки есть один подводный камень. В ней по умолчанию стоит ограничение в 10 строк и 10 столбцов. Это ограничит вашу матрицу размером 10х10 кнопок. Но если вам все же нужно подключить матрицу большего размера, то «особо отчаянные» могут в коде библиотеки найти это ограничивающее значение(оно устанавливается как #define) и изменить его на любое им угодное.


Ссылки:

http://mypractic.ru/urok-18-podklyuchenie-matricy-...

https://elekt.kz/arduino/modules-and-sensors/the-c...

https://lesson.iarduino.ru/page/urok-13-podklyuche...











Габариты (Д х Ш х В):
43мм х 39мм х 11мм
Вес:
11г.

Сообщения не найдены

Написать отзыв

С этим товаром также покупают: С этим товаром также покупают: