个人原创,未经允许请问转载!
该设计是由本人在2016年构想并经过多次改进设计出来的,未经允许勿用于商业等,未参考如何资料,如有雷同或侵权请联系博主
多按键的作用
可以用来制作密码锁,特别方便,因为连的线比较少,还可以制作钢琴,具体制作后期更新
基本原理
灵感来源于光明传感器(原理图如下),光明传感器接在模拟输入口会读取光敏电阻和定值电阻连接点的先对点位,也可理解成连接点与GND之间的电压,这也是模拟输入读取原理,由此可推导用按键开关控制电阻的串联、并联即可判断是哪个按键被按下。
电阻的连接
电路图如下
但S1按键本按下时,5V和A0之间的68k电阻与47k电阻并联,总电阻变小,A0读取的点位就会增大
但S2按键本按下时,GND和A0之间的68k电阻与47k电阻并联,总电阻变小,A0读取的点位就会增减小
测试代码
arduino IDE测试代码如下,打开串口监视器按下不同按键即可看到效果
// 测试代码
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(analogRead(A0));
delay(200);
}
图形化编程如下
多按键开关电路图
电路图如下
图中的电阻阻值仅供参考,也就是一个Excel表加几个公式计算一下数据(末尾有参考数据),尽量让按键按下时的读取数值比较均匀且差值大一点,使按键开关控制更稳定。
电路图看不懂的欢迎留言讨论
注意事项
连接两个以上的模拟口时一定要选择大电阻串联、并联,且按下按键后的总电阻阻值不要低于10k。(不要问我为什么,这是一个说来话长的物理知识)
和4X4按键矩阵相比的优缺点
需要自己焊接或连接电路,如果都不卖的换焊接和连接电路图的难度也并不难多少
优点就是按键判断的代码逻辑简单,不需要加载类库
密码锁
实际的密码锁
当时没学过编程,代码编写的不忍直视,现在硬件调试太麻烦,就不修改了,意思到了就行,程序逻辑还是很清晰的
代码如下,想了解更多的请看下一篇
// 测试代码
int key[]={
0,0,0,0,0,0}; // 用来保存6位按序输入的数字
int password[]={
2,4,5,6,8,1}; // 6位密码,改密码改括号里的6位数字
int n=0,m=0; // n用来记录输入密码次数,超过一定次数时暂时不能输入密码
// m用来记录输入密码数量,当输入6位密码之后不能在输入密码
#include <Servo.h>
Servo servo_2; // 设置控制舵机的是2号数字引脚
void setup()
{
for(int i=4;i < 16 ;i++){
// 把4到16号引脚依次设置为按键开关就收引脚
pinMode(i, INPUT); // 把4到16号引脚依次设置为按键开关就收引脚
pinMode(i, OUTPUT); // 把4到16号引脚依次设置为按键开关就收引脚
digitalWrite(i, HIGH);} // 把4到16号引脚依次设置为按键开关就收引脚
pinMode(2, OUTPUT);
servo_2.attach(2);
servo_2.write(0);
Serial.begin(9600);
}
void loop()
{
//for(int y=0;y<6;y++) //显示密码
// Serial.println(password[y]);
Serial.println("Please enter the password");
while (1) {
//读取密码
while ( digitalRead(4)&& digitalRead(5)&&