[Arduino範例] 4x4,4x3薄膜鍵盤的使用
Arduino操作輸入的方法還不少,最簡單的當然是按鈕相關的元件了。但如果輸入變得複雜,像是要輸入密碼之類的,可能就要考慮使用鍵盤模組了。
Arduino的鍵盤種類相當多,有薄膜的、機械式的,5x4、4x4、4x3,4x1...等等,其中最常被使用的,就是薄膜式的4x4、4x3,基本上這兩款的使用方法一模一樣,我們先以4x4版本來做說明。
鍵盤的程式並不難,其實可以不用函式庫就能自行寫出來,但為了方便,傑森還是習慣用函式庫,選擇的是最常見的Adafruit Keypad函庫。
再來就是接線囉,4x4和4x3薄膜鍵盤的接線算是所有鍵盤裡面最簡單的了!
- 列(ROWS)的腳位:從最左邊算起4個PIN。(11, 10, 9, 8)
- 行(COLS)的腳位:定義完列後,剩下的4個腳位就是行的腳位了。(7, 6, 5, 4)
- 為了方便接線,建議用公對公的杜邦線去連接鍵盤和Arduino。
傑森將範例程式keypad_test加以簡化改寫,程式很簡單,先定義是幾行幾列的鍵盤。
const byte ROWS = 4; // 列數(橫的)
const byte COLS = 4; // 行數(直的)
再來定義鍵盤上每一個按鍵的名稱
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
接著分別定義腳位。
byte rowPins[ROWS] = {11, 10, 9, 8}; //定義列的腳位
byte colPins[COLS] = {7, 6, 5, 4}; /定義行的腳位
設定工作基本上就是這樣了,主要的語法customKeypad.tick()必須寫在loop裡,這樣才會不斷偵測使用者按了什麼鍵,再來就是判斷按了什麼鍵。
while(customKeypad.available()){
keypadEvent e = customKeypad.read();
Serial.print((char)e.bit.KEY);
if(e.bit.EVENT == KEY_JUST_PRESSED) Serial.println(" pressed");
//按下的狀態是KEY_JUST_PRESSED
else if(e.bit.EVENT == KEY_JUST_RELEASED) Serial.println(" released");
//放開的狀態是KEY_JUST_RELEASED
}
程式到這裡算是完成囉!以下分別附上4x4、4x3的範例,至於還有一款比較少見的5x4,使用方法也完全相同,只是腳位多了,大家就自行改寫囉!
4x4薄膜鍵盤範例程式
//4x4薄膜鍵盤範例程式
#include "Adafruit_Keypad.h"
const byte ROWS = 4; // 列數(橫的)
const byte COLS = 4; // 行數(直的)
//鍵盤上每一個按鍵的名稱
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //定義列的腳位
byte colPins[COLS] = {7, 6, 5, 4}; //定義行的腳位
//初始化鍵盤
Adafruit_Keypad customKeypad = Adafruit_Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
customKeypad.begin();
Serial.println("KeyPad Test...");
}
void loop() {
// 開始偵測使用者的按鍵狀態
customKeypad.tick();
//判斷按了哪一個鍵
while(customKeypad.available()){
keypadEvent e = customKeypad.read();
Serial.print((char)e.bit.KEY);
if(e.bit.EVENT == KEY_JUST_PRESSED) Serial.println(" pressed");
//按下的狀態是KEY_JUST_PRESSED
else if(e.bit.EVENT == KEY_JUST_RELEASED) Serial.println(" released");
//放開的狀態是KEY_JUST_RELEASED
}
delay(10);
}
4x3薄膜鍵盤範例程式
//4x4薄膜鍵盤範例程式
#include "Adafruit_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] = {11, 10, 9, 8}; //定義列的腳位
byte colPins[COLS] = {7, 6, 5}; //定義行的腳位
//初始化鍵盤
Adafruit_Keypad customKeypad = Adafruit_Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
customKeypad.begin();
Serial.println("KeyPad Test...");
}
void loop() {
// 開始偵測使用者的按鍵狀態
customKeypad.tick();
//判斷按了哪一個鍵
while(customKeypad.available()){
keypadEvent e = customKeypad.read();
Serial.print((char)e.bit.KEY);
if(e.bit.EVENT == KEY_JUST_PRESSED) Serial.println(" pressed");
//按下的狀態是KEY_JUST_PRESSED
else if(e.bit.EVENT == KEY_JUST_RELEASED) Serial.println(" released");
//放開的狀態是KEY_JUST_RELEASED
}
delay(10);
}