这里先给新来的小伙伴参考一下arduino开发板的主要技术参数:
微控制器 | ATmega328P |
工作电压 | 5伏特 |
输入电压,还行 | 7-12伏特 |
输入电压,最牛逼 | 6-20伏特 |
数字输入输出引脚 | 14个(其中有6个引脚可作为PWM引脚) |
PWM引脚 | 6个 |
模拟输入引脚 | 6个 |
输入/输出引脚直流电流 | 20 毫安 |
3.3V引脚电流 | 50 毫安 |
Flash Memory(闪存) | 32 KB (ATmega328P) 其中由 0.5 KB用于系统引导(bootloader) |
SRAM(静态存储器) | 2 KB (ATmega328P) |
EEPROM | 1 KB (ATmega328P) |
内置LED引脚 | 13 |
长 | 68.6 mm |
宽 | 53.4 mm |
重 | 25克 |
时钟频率 | 16 MHz |
回归正题:
硬件概述
薄膜键盘由薄而柔韧的薄膜材料制成。它们的尺寸可能有4×3、4×4、4×1等。不管它们的尺寸如何,它们都以相同的方式工作。
微控制器可以扫描这些线路以查找按钮按下状态-为此-它遵循以下程序。
1. 微控制器将所有列和行线设置为输入。
2. 然后,它选择一行设置为输出,并将其设置为高电平。
3. 之后,它依次检查每一列线。
4. 如果列连接保持低电平,则未按下该列线上的按钮。
5. 如果它变为高电平,则微控制器知道哪一行设置为高电平,以及在检查时检测到哪一列为高电平。
6. 最后,它知道按下了对应于检测到的行和列的按钮。
开始吧!
现在我们了解了有关薄膜键盘的所有信息,可以开始将它与Arduino连接起来。连接非常简单。首先将键盘的引脚1连接到Arduino上的数字引脚9。现在继续向左连接引脚,如2与8、3与7等。
学习代码
该草图首先包含Keypad.h库并定义行数和列数。
接下来,我们定义一个二维键盘数组keys[ROWS][COLS],它保存在键盘上按下特定按钮时要打印的字符。
在我们的草图中,字符的布局与它们出现在键盘上的一样。但实际上你可以将这些定义为你想要的任何东西。例如,如果您打算创建一个计算器项目,您只需将数组定义更改为:
char keys[ROWS][COLS] = {
{'1','2','3','4'},
{'5','6','7','8'},
{'9','0','+','-'},
{'.','*','/','='}
};
接下来,我们创建一个keypad对象。构造函数Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS ) 接受五个参数。
● makeKeymap(keys) 将内部键盘映射初始化为等于用户定义的键盘映射。
● rowPins 和 colPins 是与键盘的行和列连接的arduino引脚号。
● ROWS 和 COLS 是键盘的行数和列数。
一旦创建了keypad对象,我们可以发出一个简单的命令 getKey() 来检查按下了哪个按键。
键盘库中的其他有用函数
您可以将一些有用的函数与Keypad对象一起使用。下面列出了其中的几个:
● char waitForKey() 永远等待,直到有人按下一个键。它会阻止所有其他代码,直到按下某个键。这意味着没有闪烁的LED,没有LCD屏幕更新,除了中断程序之外什么都没有。
● KeyState getState() 返回任何键的当前状态。四种状态是IDLE、PRESSED、RELEASED和HOLD。
● boolean keyStateChanged() 让您知道按键何时从一种状态更改为另一种状态。例如,您可以测试何时按下某个键,而不仅仅是测试一个有效的键。
● setHoldTime(unsigned int time) 设置用户必须按住按钮直到触发HOLD状态的毫秒数。
● setDebounceTime(unsigned int time) 设置键盘在接受新的按键/按键事件之前将等待的毫秒数。
● addEventListener(keypadEvent) 如果使用键盘,则触发事件。
代码放到最后(得确保你学会了)
#include <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] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if (key){
Serial.print("Key Pressed : ");
Serial.println(key);
}
}
这是串口监视器中输出的样子(随便按按):
如果你也是这样的话说明:
完结!
你已经可以去创造更多关于薄膜键盘的东西了!