Гибкая матричная клавиатура 4 на 3 кнопки используется в проектах на базе Arduino для реализации функции ввода информации. На плате матричной клавиатуры находится 12 кнопок, которые расположены в матрице 4х3 по схеме показанной на рисунке.
Принцип работы матричной клавиатуры очень прост, попеременно подается сигнал низкого уровня на один из контактов 1 — 4. Если кнопка нажата, то по наличию сигнала низкого уровня на контактах 5 — 7 определяем нажатую кнопку из ряда 1 — 4.
В среде Arduino для управления работой матричной клавиатуры можно использовать библиотеку iarduino_KB, которая значительно упрощает работу с клавиатурой.
Ниже показан пример скетча который выводит в монитор порта значения нажатых кнопок клавиатуры, при этом вместо символов «*» и «#» выводятся значения 14 и 15.
#include <iarduino_KB.h> // https://github.com/tremaru/iarduino_KB.git iarduino_KB KB(8,7,6,5,4,3,2); /// 8765 432 void setup(){ Serial.begin(9600); KB.begin(KB3); } void loop(){ if(KB.check(KEY_DOWN )){Serial.println(KB.getNum);} delay(200); }//loop
Фактически библиотека поддерживает различные форматы клавиатур:
эластичная 4х4, тип KB1
кнопочная 4х4, тип KB2
эластичная 3х4, тип KB3
эластичная 1х4, тип KB4
Тип клавиатуры указывается в функции KB.begin(тип)
Следующий пример скетча позволяет выводить в монитор порта введенное несколькими кнопками число (максимум четырехзначное). Символ «#» обнуляет число, а символ «*» выводит полученное число.
Как видно на скриншоте, нажимаем кнопку 5, затем 8, далее нажимает кнопку * (код 15) и в монитор порта выводится число 58. Само число передано в переменную int ccc для дальнейшего использования.
#include <iarduino_KB.h> // https://github.com/tremaru/iarduino_KB.git iarduino_KB KB(8,7,6,5,4,3,2); /// 8765 432 int code[5],ccc,i; void setup(){ Serial.begin(9600); KB.begin(KB3); } void loop(){ if(KB.check(KEY_DOWN )){ Serial.println(KB.getNum); code[i] = KB.getNum; if(KB.getNum==15){i=-1;ccc=0;code[0]=0;code[1]=0;code[2]=0;code[3]=0;} // # стереть число if(KB.getNum==14){Serial.println(ccc);i=-1;code[0]=0;code[1]=0;code[2]=0;code[3]=0;} // * вывести число в монитор порта if(KB.getNum<10&&i<4){ switch(i){ case 0: ccc = code[0];break; case 1: ccc = code[0]*10 + code[1];break; case 2: ccc = code[0]*100 + code[1]*10 + code[2];break; case 3: ccc = code[0]*1000 + code[1]*100 + code[2]*10 + code[3];break; }} i++; if(i>3){i=4;}delay(200); } }//loop