电子计算器上

https://www.bilibili.com/video/BV1is411x7Uc?from=search&seid=10722190990309141589
有4×4或3×4(少了最右边一行的A,B,C,D键),它的内部如同下图右边的电路所示,是由16个按键(开关)交织而成。有些按键模块直接使用按键(微触)开关组装,连接电路与程序都和本文相同。

薄膜按键

4×4按键模块有8个接脚,分成列、行两组,可以接在Arduino的任意8个接脚,笔者将它接在数位6~13脚:
image.png

按键侦测与扫描原理

为了方便解说,笔者把4×4按键简化成3×1,像下图这样串连三个开关,连接到同一个微控制器的输入脚。此外,因为要简化开关电路,所以要启用微控器内部的上拉电阻:

image.png

假设开关的「行1」「行3」输入端全都输入高电位,无论开关是否被按下,Arduino将接收到高电位(1)。为了检测到其中按键被按下,程序必须依序将「行1」「行3」脚位设定成低电位。
image.png

轮到「行2」脚输入低电位,此时,微控器的输入脚也将接收到低电位(0),由此可知连接「行2」的「开关B」被按下了
轮到「行3」脚输入低电位,由于「开关C」未被按下,因此微控器的输入脚接收到高电位(1)。
image.png

到此,侦测按键的程序必须再次回到「行1」,输入低电位…如此反复循环扫描,才能持续侦测到某个按键是否被按下。实际的程序需要运用双重循环,才能分批扫描每一列:
image.png

代码

include

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");

}

}

你可能感兴趣的:(电子计算器上)