https://www.bilibili.com/video/BV1is411x7Uc?from=search&seid=10722190990309141589
有4×4或3×4(少了最右邊一行的A栓霜,B儒鹿,C馆截,D鍵),它的內(nèi)部如同下圖右邊的電路所示朽色,是由16個按鍵(開關(guān))交織而成。有些按鍵模塊直接使用按鍵(微觸)開關(guān)組裝金矛,連接電路與程序都和本文相同毙玻。
4×4按鍵模塊有8個接腳,分成列速和、行兩組歹垫,可以接在Arduino的任意8個接腳,筆者將它接在數(shù)位6~13腳:
按鍵偵測與掃描原理
為了方便解說颠放,筆者把4×4按鍵簡化成3×1排惨,像下圖這樣串連三個開關(guān),連接到同一個微控制器的輸入腳碰凶。此外暮芭,因?yàn)橐喕_關(guān)電路,所以要啟用微控器內(nèi)部的上拉電阻:
假設(shè)開關(guān)的「行1」「行3」輸入端全都輸入高電位欲低,無論開關(guān)是否被按下辕宏,Arduino將接收到高電位(1)。為了檢測到其中按鍵被按下砾莱,程序必須依序?qū)ⅰ感?」「行3」腳位設(shè)定成低電位瑞筐。
輪到「行2」腳輸入低電位,此時腊瑟,微控器的輸入腳也將接收到低電位(0)聚假,由此可知連接「行2」的「開關(guān)B」被按下了
輪到「行3」腳輸入低電位块蚌,由于「開關(guān)C」未被按下,因此微控器的輸入腳接收到高電位(1)膘格。
到此峭范,偵測按鍵的程序必須再次回到「行1」,輸入低電位…如此反復(fù)循環(huán)掃描瘪贱,才能持續(xù)偵測到某個按鍵是否被按下纱控。實(shí)際的程序需要運(yùn)用雙重循環(huán),才能分批掃描每一列:
代碼
include <Keypad.h>
const byte KEYPAD_4_4_ROWS = 4;
const byte KEYPAD_4_4_COLS = 4;
char KEYPAD_4_4_hexaKeys[KEYPAD_4_4_ROWS][KEYPAD_4_4_COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte KEYPAD_4_4_rowPins[KEYPAD_4_4_ROWS] = {4, 5, 6, 7};
byte KEYPAD_4_4_colPins[KEYPAD_4_4_COLS] = {8, 9, 10, 11};
Keypad KEYPAD_4_4 = Keypad( makeKeymap(KEYPAD_4_4_hexaKeys), KEYPAD_4_4_rowPins, KEYPAD_4_4_colPins, KEYPAD_4_4_ROWS, KEYPAD_4_4_COLS);
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (KEYPAD_4_4.getKey() == '8') {
delay(1000);
Serial.println("hello");
}
}