Матричная клавиатура 4×3 кнопки (Arduino)

Гибкая матричная клавиатура 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

 

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

Войти с помощью: