利用薄膜键盘与舵机制作密码门锁

深藏阁楼爱情的钟 2023-07-04 08:54 64阅读 0赞

开头:由于自己买的LCD没有焊接,需要的arduino插口较多,所以没有选择LCD进行显示信息而改为电脑串口显示器窗口显示,代码纯手打,开源不易,请勿喷。
接线:薄膜键盘的针脚是从2接到9
舵机是10号脚
红色led接12号
绿色led接13号
蜂鸣器接11号,当然可以将蜂鸣器和红色灯接到一起,但是声音不大。

  1. #include <Keypad.h>
  2. #include<Servo.h>
  3. const byte ROWS = 4; //4 rows
  4. const byte COLS = 4; //4 columns
  5. char passwd='1';int temp=1;
  6. char keys[ROWS][COLS] = { //对应自己想要打印出的字符
  7. { 'D','=','0','*'},
  8. { 'C','9','8','7'},
  9. { 'B','6','5','4'},
  10. { 'A','3','2','1'}};
  11. String firstNum = "";
  12. float password = 456;//设置默认密码
  13. int demo=1;//这是用来转换模式用的
  14. Servo myservo;
  15. int pos=0;//舵机旋转角度
  16. float result = 0.0;//结果
  17. char operatr = ' ';
  18. byte rowPins[ROWS] = { 5, 4, 3, 2}; //连接到键盘的行插脚
  19. byte colPins[COLS] = { 9,8, 7, 6}; //连接到键盘的列插脚
  20. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );//实例化Keypad 对象
  21. void setup(){
  22. Serial.begin(9600);
  23. pinMode(11,OUTPUT);//蜂鸣器
  24. pinMode(12,OUTPUT);//红色led灯
  25. pinMode(13,OUTPUT);//绿色led灯
  26. digitalWrite(12,LOW);digitalWrite(13,LOW);myservo.attach(10);
  27. }
  28. void loop(){
  29. Serial.println("如忘记密码请添加微信18476618070进行修改密码。");
  30. Serial.println("输入密码后按'#'键以确认,按’*’键重输:");
  31. Serial.print("请输入密码:");
  32. while(1){ char key = keypad.getKey();//新建一个key 变量 用于获取键盘当前的值
  33. if(demo==1){
  34. if (key != NO_KEY && (key == '1' || key == '2' || key == '3'||key == 'A' ||key == 'B' ||key == 'C' ||key == 'D' || key == '4' || key == '5' ||key == '.' ||key == '*' || key == '6' || key == '7' || key == '8' || key == '9' || key == '0')) {
  35. Serial.print(key);firstNum =firstNum +key;}
  36. else if(key != NO_KEY &&(key == '=' )){ demo=2;} }
  37. if(demo==2)
  38. { Serial.println("");
  39. if(firstNum.toFloat() == password){ Serial.println("欢迎回家!");
  40. for(demo=1;demo<=3;demo++){
  41. digitalWrite(13,HIGH);delay(200);digitalWrite(13,LOW);delay(200);}
  42. for(demo=1;demo<=1;demo++)
  43. { for(pos=0;pos<=180;pos++)
  44. { myservo.write(pos);delay(5);}
  45. delay(2000);
  46. for(pos=180;pos>=0;pos--)
  47. { myservo.write(pos);delay(5);}}
  48. Serial.print("请输入密码:");}
  49. else{ Serial.print("输入错误!请重新输入密码:");
  50. for(demo=1;demo<=3;demo++){
  51. digitalWrite(12,HIGH);tone(11,2093);delay(200);digitalWrite(12,LOW);noTone(11);delay(200);}}
  52. firstNum = "";demo=1;temp=0;}
  53. } }

下面是效果图:
在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,64人围观)

还没有评论,来说两句吧...

相关阅读

    相关 利用OpenCV的findContours轮廓检测

    问: 边缘检测与轮廓检测有什么区别? 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件

    相关 雕刻机制 PCB 指南

    之前使用过感光蓝油制作过 PCB,虽然感光法精度高,但个人制作耗时耗力,发给厂家周期又很长。看到国外的网友使用雕刻机制作 PCB 视频之后。几番周折之后还是成功了。有感于网上几