找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1176|回复: 1
打印 上一主题 下一主题
收起左侧

Arduino开关键控锁程序,自动门

[复制链接]
跳转到指定楼层
楼主
ID:644246 发表于 2019-11-18 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <Servo.h>
  2. #include <Wire.h>
  3. #include <LiquidCrystal_I2C.h>
  4. #include<Stepper.h>

  5. LiquidCrystal_I2C lcd(0x27,16,2);  //配置LCD地址及行列
  6. Servo myservo;        //创建一个舵机控制对象

  7. int led1=3;         //定义LED1引脚
  8. int led2=4;         //定义LED2引脚
  9. int buzzer=5;         //定义蜂鸣器引脚
  10. int button=6;         //定义按键引脚
  11. int length;           //定义一个变量用来表示共有多少个音符
  12. int steps=512;
  13. Stepper myStepper(steps, 8, 9, 10, 11);

  14. int song[] =
  15. {
  16.   /*  歌曲频率*/
  17. 589, 495, 441, 495,  
  18.   -1, 589, 495, 441, 589,
  19. 495,  -1, 495, 495, 495, 441, 495, -1, 495,
  20. 589, 495, 441, 589, 495,  -1,
  21. };

  22. float duration[]=
  23. {  
  24.   /*  持续的时间 单位 ms */
  25.    1,    1, 0.5, 0.5,
  26.    1,  0.5, 0.5, 0.5, 0.5,
  27.    1,  0.5, 0.5, 0.5,   1, 0.5, 1, 0.5, 0.5,
  28.    0.5,0.5, 0.5, 0.5,   1,   1,
  29. };

  30. void setup()
  31. {  
  32.   {            
  33.   pinMode(led1,OUTPUT);     //3号数字口设置为输出状态
  34.   pinMode(led2,OUTPUT);     //4号数字口设置为输出状态
  35.   }
  36.   pinMode(buzzer,OUTPUT);
  37.   length = sizeof(song) / sizeof(song[0]);  //这里用了一个sizeof函数,查出数组里有多少个音符
  38.   for (int x = 0; x < length; x++)          //循环音符的次数
  39.    {
  40.      tone(buzzer, song[x]);     //依次播放tune数组元素,即每个音符
  41.      delay(400 * duration[x]);  //每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快
  42.      noTone(buzzer);            //停止当前音符,进入下一音符
  43.    }
  44.    {
  45.   Serial.begin(9600);
  46.   myservo.attach(2);         //绑定对象至D7
  47.   }
  48.   {
  49.     // 设置转速,单位r/min
  50.     myStepper.setSpeed(20);

  51.     // 初始化串口
  52.     Serial.begin(9600);
  53.   }
  54. }

  55. void duoji1()
  56. {
  57.    myservo.write(150);                 //写入角度
  58.    Serial.println(myservo.read());     //打印舵机角度
  59. }

  60. void duoji2()
  61. {
  62.    myservo.write(0);                 //写入角度
  63.    Serial.println(myservo.read());     //打印舵机角度
  64. }

  65. void duoji3()
  66. {
  67.    myservo.write(10);                 //写入角度
  68.    Serial.println(myservo.read());    //打印舵机角度
  69. }
  70. void clockwise()
  71. {
  72.   // 顺时针一次旋转
  73.     Serial.println();
  74.     myStepper.step(520);
  75.     delay(1000);
  76. }
  77. void clockwises()
  78. {
  79.   // 顺时针一次旋转
  80.     Serial.println();
  81.     myStepper.step(-520);
  82.     delay(1000);
  83. }

  84. void xianshi1()
  85. {  
  86.    lcd.init();                 //初始化LCD
  87.    lcd.backlight();            //打开背光
  88.    lcd.setCursor(3,0);         //设置显示位置
  89.    lcd.print("Welcome to ");   //显示字符数据
  90.    lcd.setCursor(5,1);         //设置显示位置
  91.    lcd.print("Home !");        //显示字符数据
  92.   }
  93. void xianshi2()
  94. {
  95.    lcd.init();              //初始化LCD
  96.    lcd.backlight();         //打开背光
  97.    lcd.setCursor(4,0);      //设置显示位置
  98.    lcd.print("Good Bye");   //显示字符数据
  99.    lcd.setCursor(4,1);      //设置显示位置
  100.    lcd.print("*Locked*");   //显示字符数据
  101. }
  102. void loop()
  103. {
  104.     jiance();
  105. }

  106. void jiance()

  107. {
  108.   int buttonState = digitalRead(button); // 检测按键
  109.   delay(1000);
  110.   int n =digitalRead(button);            //创建一个变量n,按键状态采集出来赋值给他。
  111.   if (n==HIGH)           //判断n是否为高电平,如果是执行下面的语句,不是则跳过。
  112.   {
  113.      
  114.      digitalWrite(led2,LOW);           //LED2灭
  115.      digitalWrite(led1,HIGH);          //LED1亮
  116.      xianshi1();               //运行xianshi
  117.      delay(1000);
  118.      duoji1();              //运行xianshi
  119.      setup();   
  120.      delay(1000);
  121.      clockwise();                //运行xianshi
  122.      delay(11000);


  123.      
  124.      digitalWrite(led1,LOW);          //LED1灭
  125.      digitalWrite(led2,HIGH);          //LED2亮
  126.      xianshi2();               //运行xianshi2
  127.       setup();   
  128.      clockwises();
  129.      delay(1000);
  130.      duoji2();              //运行xianshi
  131.      delay(1000);
  132.      duoji3();              //运行duoji3
  133.    }
  134. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-11-20 14:55 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表