当人距离超声波距离较近时(<30cm),台灯亮起来。当人离开超声波较远时(2=30cm),台灯自动灭掉。当台灯亮起时间超过5秒,申叭响起来(久坐提醒) 按键按下,可以关掉剧叭响声(若距离没有发生变化,不要再无故响起)。,写arduino代码
时间: 2024-02-24 08:54:41 浏览: 23
好的,以下是能够实现你所描述功能的Arduino代码:
```
const int trigPin = 9; // 超声波测距模块的Trig引脚连接到Arduino的9号引脚
const int echoPin = 10; // 超声波测距模块的Echo引脚连接到Arduino的10号引脚
const int ledPin = 5; // 台灯的LED灯连接到Arduino的5号引脚
const int buzzerPin = 6; // 申叭连接到Arduino的6号引脚
const int buttonPin = 2; // 按键连接到Arduino的2号引脚
long duration; // 超声波测距模块的回波时间
int distance; // 距离
bool isLit = false; // 台灯是否已经亮起
bool isAlarm = false; // 是否已经响过申叭
bool isButtonPressed = false; // 按钮是否被按下
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// 测量距离
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
// 判断距离是否小于30cm
if (distance < 30) {
if (!isLit) { // 如果台灯还没有亮起
digitalWrite(ledPin, HIGH); // 点亮台灯
isLit = true;
isAlarm = false; // 重置申叭状态
}
} else {
if (isLit) { // 如果台灯已经亮起
digitalWrite(ledPin, LOW); // 熄灭台灯
isLit = false;
isAlarm = false; // 重置申叭状态
}
}
// 如果台灯已经亮起超过5秒,并且没有响过申叭
if (isLit && !isAlarm && millis() - lastLitTime > 5000) {
digitalWrite(buzzerPin, HIGH); // 开启申叭
isAlarm = true;
}
// 如果按钮被按下
if (digitalRead(buttonPin) == LOW) {
isButtonPressed = true;
} else {
if (isButtonPressed) { // 如果按钮之前被按下过
digitalWrite(buzzerPin, LOW); // 关闭申叭
isButtonPressed = false;
}
}
}
```
希望这个代码能够帮助到你!