4x3 键盘只有三个引脚
组件和用品
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
|
应用和在线服务
|
关于这个项目
简介
该项目的目的是显着减少数字键盘所需的引脚数量。这是因为与 Arduino Uno 或 Nanoboards 上可用的引脚相比,我们通常需要许多 I/O 引脚。
普通数字键盘采用矩阵结构:一个 4x3 键盘,需要 4+3 个 Arduino 数字引脚。网上有许多库可以与 Arduino 一起使用。
我的解决方案
我提出的解决方案要好得多,因为它只使用三个模拟输入,电路如下图所示。
对于每一列,只有 4 个电压值,对应于 4 个键中的每一个,如果没有按下任何键,则加上零伏。在等效方案(b)中,R1e表示四个电阻R1-R4之一,而R2e表示三个电阻R5-R7之一。
现在让我们看看如何制作四个最宽的间隔。首先可以使电阻R2e =R5 =R6 =R7相等,然后我们可以设置R1 =0以使第一条线对应的输出为5V。
R2=330 ohm, R3=1 k ohm, R4=3 k ohm, R5, R6, R7=1 k ohm, 每个输出得到如下区间:
如您所见,三个输出的间隔尽可能大,您可以使用六个标准电阻,公差为 ±5%。通过额外的模拟输入和另一个电阻,可以使用 4x4 键盘等等。下图显示了与Arduino的连接。
在图中,电阻器 R1 连接到线路 2,因为线路 1 上的电阻器已用电线绘制它,因此电阻器参考已按 1 缩放。管脚分配可以根据需要修改,只要管脚配置为模拟即可。
当然,如果 Arduino 以 3.3V 供电,则不会发生任何变化,因为默认情况下 ADC 转换器使用电源电压并且 ADC 数量不会改变。
为了测试程序,没有这种类型的键盘,我用回收的键构建了它,下图显示了我的原型。 5 针右侧连接器用于将其连接到 Arduino。
代码
- Analog4x3Keybf.ino
Analog4x3Keybf.inoArduino
测试 KeyPad() 函数的简单程序/* 程序 Analog4x3Keybf * 测试具有 3 个模拟输出的 4x3 键键盘 * G. Carrera - 19/11/2018 */// 键盘输出值的限制:const int NADCm100[4 ] ={923,669,412,156};const int NADCp100[4] ={1123,869,612,356};const char key[13] ={'1','4','7','C','2','5' ,'8','0','3','6','9','E'};int keyval[3];int i,colp,val;void setup(){ Serial.begin(9600); // 与串行监视器一起使用}void loop() { char k; k =KeyPad();// 读取键盘 if (k !='N'){ // 按下了一个键 Serial.print("key ="); Serial.println(k);延迟(500); }}/******** 程序使用的函数 ********/char KeyPad(){// 读取键盘并返回字符键// key ='N' for none KeyScan();// 读取模拟键盘 if (keyval[0]+keyval[1]+keyval[2] <40) { return 'N'; } else { // 一个键被按下 delay(10);// antibounce KeyScan();// reread模拟键盘 for (i=0; i <3; i++){//确定它属于哪一列 if (keyval [i]> 40){ colp=i; val=keyval[i];// 这是 (int j=0; j <4; j++) 的对应值{// if (val>=NADCm100[j] &&keyval <=NADCp100[j]){ 返回键[colp*4+j];休息; } } } } }}void KeyScan(){// 读取模拟键盘 keyval[0]=analogRead(A0);延迟(1); keyval[1]=analogRead(A1);延迟(1); keyval[2]=analogRead(A2);延迟(1); }
示意图
制造工艺