- #include <Servo.h>
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- #include<Stepper.h>
- LiquidCrystal_I2C lcd(0x27,16,2); //配置LCD地址及行列
- Servo myservo; //创建一个舵机控制对象
- int led1=3; //定义LED1引脚
- int led2=4; //定义LED2引脚
- int buzzer=5; //定义蜂鸣器引脚
- int button=6; //定义按键引脚
- int length; //定义一个变量用来表示共有多少个音符
- int steps=512;
- Stepper myStepper(steps, 8, 9, 10, 11);
- int song[] =
- {
- /* 歌曲频率*/
- 589, 495, 441, 495,
- -1, 589, 495, 441, 589,
- 495, -1, 495, 495, 495, 441, 495, -1, 495,
- 589, 495, 441, 589, 495, -1,
- };
- float duration[]=
- {
- /* 持续的时间 单位 ms */
- 1, 1, 0.5, 0.5,
- 1, 0.5, 0.5, 0.5, 0.5,
- 1, 0.5, 0.5, 0.5, 1, 0.5, 1, 0.5, 0.5,
- 0.5,0.5, 0.5, 0.5, 1, 1,
- };
- void setup()
- {
- {
- pinMode(led1,OUTPUT); //3号数字口设置为输出状态
- pinMode(led2,OUTPUT); //4号数字口设置为输出状态
- }
- pinMode(buzzer,OUTPUT);
- length = sizeof(song) / sizeof(song[0]); //这里用了一个sizeof函数,查出数组里有多少个音符
- for (int x = 0; x < length; x++) //循环音符的次数
- {
- tone(buzzer, song[x]); //依次播放tune数组元素,即每个音符
- delay(400 * duration[x]); //每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快
- noTone(buzzer); //停止当前音符,进入下一音符
- }
- {
- Serial.begin(9600);
- myservo.attach(2); //绑定对象至D7
- }
- {
- // 设置转速,单位r/min
- myStepper.setSpeed(20);
-
- // 初始化串口
- Serial.begin(9600);
- }
- }
- void duoji1()
- {
- myservo.write(150); //写入角度
- Serial.println(myservo.read()); //打印舵机角度
- }
- void duoji2()
- {
- myservo.write(0); //写入角度
- Serial.println(myservo.read()); //打印舵机角度
- }
- void duoji3()
- {
- myservo.write(10); //写入角度
- Serial.println(myservo.read()); //打印舵机角度
- }
- void clockwise()
- {
- // 顺时针一次旋转
- Serial.println();
- myStepper.step(520);
- delay(1000);
- }
- void clockwises()
- {
- // 顺时针一次旋转
- Serial.println();
- myStepper.step(-520);
- delay(1000);
- }
-
- void xianshi1()
- {
- lcd.init(); //初始化LCD
- lcd.backlight(); //打开背光
- lcd.setCursor(3,0); //设置显示位置
- lcd.print("Welcome to "); //显示字符数据
- lcd.setCursor(5,1); //设置显示位置
- lcd.print("Home !"); //显示字符数据
- }
- void xianshi2()
- {
- lcd.init(); //初始化LCD
- lcd.backlight(); //打开背光
- lcd.setCursor(4,0); //设置显示位置
- lcd.print("Good Bye"); //显示字符数据
- lcd.setCursor(4,1); //设置显示位置
- lcd.print("*Locked*"); //显示字符数据
- }
- void loop()
- {
- jiance();
- }
- void jiance()
- {
- int buttonState = digitalRead(button); // 检测按键
- delay(1000);
- int n =digitalRead(button); //创建一个变量n,按键状态采集出来赋值给他。
- if (n==HIGH) //判断n是否为高电平,如果是执行下面的语句,不是则跳过。
- {
-
- digitalWrite(led2,LOW); //LED2灭
- digitalWrite(led1,HIGH); //LED1亮
- xianshi1(); //运行xianshi
- delay(1000);
- duoji1(); //运行xianshi
- setup();
- delay(1000);
- clockwise(); //运行xianshi
- delay(11000);
-
- digitalWrite(led1,LOW); //LED1灭
- digitalWrite(led2,HIGH); //LED2亮
- xianshi2(); //运行xianshi2
- setup();
- clockwises();
- delay(1000);
- duoji2(); //运行xianshi
- delay(1000);
- duoji3(); //运行duoji3
- }
- }
复制代码 |