Принцип работы такой клавиатуры достаточно прост. Микроконтроллер поочередно подает логическую единицу на каждый из выводов 4 рядов, а с выводов столбцов наоборот — считывает значения. Если нажать какую-либо из кнопок, то она замкнет вывод ряда и вывод столбца, с которыми связана, в результате чего, на соответствующем выводе столбца появится логическая единица.
Схема матричной клавиатуры:
Например, если нажать кнопку SW7, то она замкнет выводы Row2 и Col3. Нетрудно догадаться, что в таком случае, при подаче на Row2 логической единицы, через кнопку SW7 логическая единица установится и на выводе Col3.
Очевидно, что можно работать и в обратном порядке: подавать напряжение на выводы столбцов, а считывать с выводов рядов.
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <Keypad.h> // подключаем библиотеку Keypad const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца // определим символы для кнопок char hexaKeys[ROWS][COLS] = { {'0','1','2','3'}, {'4','5','6','7'}, {'8','9','A','B'}, {'C','D','E','F'} }; byte rowPins[ROWS] = {6, 7, 8, 9}; // цифровые выводы строк byte colPins[COLS] = {5, 4, 3, 2}; // цифровые выводы столбцов // используем класс библиотеки Keypad customKeypad = Keypad(makeKeymap(hexaKeys), colPins, rowPins, COLS, ROWS); void setup(){ Serial.begin(9600); } void loop(){ // вывод в монитор порта значения кнопки char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); } } |