当光照强时,灯灭,人体红外传感器、声音传感器不能控制灯亮,当光照弱时,人体红外传感器、声音传感器能控制灯的亮灭 加一个按钮,按一下灯亮,按两下灯灭,按三下转为自动感应模式,请写出基于arduino的代码
时间: 2024-03-11 13:51:45 浏览: 101
好的,以下是基于Arduino的代码:
```
//定义红外传感器和声音传感器引脚
int pirPin = 2;
int soundPin = 3;
//定义按钮引脚和按钮状态
int buttonPin = 4;
int buttonState = 0;
//定义LED引脚
int ledPin = 13;
//定义自动感应模式状态
bool autoMode = false;
void setup() {
//初始化串口通信
Serial.begin(9600);
//设置红外传感器和声音传感器引脚为输入模式
pinMode(pirPin, INPUT);
pinMode(soundPin, INPUT);
//设置按钮引脚为输入模式
pinMode(buttonPin, INPUT);
//设置LED引脚为输出模式
pinMode(ledPin, OUTPUT);
}
void loop() {
//获取按钮状态
buttonState = digitalRead(buttonPin);
//按钮被按下时
if (buttonState == HIGH) {
//等待一段时间,避免按钮抖动
delay(50);
//获取按钮状态再次确认
buttonState = digitalRead(buttonPin);
//按钮被按下两次时
if (buttonState == HIGH) {
//关闭灯
digitalWrite(ledPin, LOW);
//关闭自动感应模式
autoMode = false;
//输出提示信息
Serial.println("灯已经关闭");
}
//按钮被按下一次时
else {
//打开灯
digitalWrite(ledPin, HIGH);
//关闭自动感应模式
autoMode = false;
//输出提示信息
Serial.println("灯已经打开");
}
}
//自动感应模式
if (autoMode) {
//检测红外传感器和声音传感器状态
int pirState = digitalRead(pirPin);
int soundState = digitalRead(soundPin);
//如果有人或声音,则打开灯
if (pirState == HIGH || soundState == HIGH) {
digitalWrite(ledPin, HIGH);
}
//如果没有人和声音,则关闭灯
else {
digitalWrite(ledPin, LOW);
}
}
//非自动感应模式
else {
//检测光线强度
int lightLevel = analogRead(A0);
//光线强度弱,则打开灯
if (lightLevel < 200) {
digitalWrite(ledPin, HIGH);
}
//光线强度强,则关闭灯
else {
digitalWrite(ledPin, LOW);
}
}
//等待一段时间
delay(100);
}
//接下来,我会等待你的下一个问题。
阅读全文