#include <Servo.h>// 引入舵机库
Servo myservo;// 创建一个舵机对象
int pos=0;// 舵机位置变量初始化
int ledPin=12;// LED连接到引脚12
int inputPin=2;// PIR传感器连接到引脚2
int pirState=LOW;// PIR状态初始化为LOW
int val=0;// 传感器输入值变量初始化
int buzzer = 10;// 蜂鸣器连接到引脚10
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
myservo.attach(9); // 将舵机连接到引脚9
pinMode(buzzer, OUTPUT);// 设置蜂鸣器引脚为输出模式
Serial.begin(9600);// 初始化串口通信
}
void loop() {
//*和python代码通信:
// 处理串行通信命令
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
if (command == "activate") {
activateDevices();
}
}
// 读取PIR传感器的值
val = digitalRead(inputPin); // 读取PIR传感器的值
if (val == HIGH) { // 如果传感器检测到运动
digitalWrite(ledPin, HIGH); // 打开LED
tone(buzzer, 1000); // 打开蜂鸣器
if (pirState == LOW) {// 如果PIR状态为LOW
pirState = HIGH;// 将PIR状态设置为HIGH
Serial.println("检测到运动!");// 在串口监视器中打印“检测到运动”
activateDevices();
}
}
else {// 如果没有检测到运动
digitalWrite(ledPin, LOW); // 关闭LED
if (pirState == HIGH){
pirState = LOW;
Serial.println("运动结束!");// 在串口监视器中打印“运动结束”
}
}
delay(1000);
noTone(buzzer); // 关闭蜂鸣器
delay(1000);
}
void activateDevices() {
// 舵机从0度旋转到180度
for (pos = 0; pos <= 180; pos += 1) {
myservo.write(pos); // 设置舵机到当前位置
delay(15); // 等待15毫秒
}
// 舵机从180度旋转回0度
for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15);
}
}