我是Arduino的新手,我正在为学校做项目。我正在尝试创建一种可以检测火灾的设备,并以光,动作和声音的形式向用户提供直接反馈。
我的代码遇到了一些问题。我想要实现的是,我的设备在检测到光线(LED)和移动(伺服)时会发出直接反馈,但不会发出声音。
除压电蜂鸣器和LED灯外,一切正常。当火焰传感器检测到火灾但LED没有发光时,伺服电机开始转动180度。我不太明白为什么我的LED不闪亮..我的代码有什么问题。另外,蜂鸣器的问题是当火焰传感器检测到火灾时蜂鸣器必须熄灭但仅在15分钟后。现在它就在瞬间消失。伺服的延迟功能似乎也影响了压电蜂鸣器的持续时间。我想将它们彼此分开。我现在正在使用延迟功能,但它似乎不起作用。我知道我必须使用millis()
函数,但我不知道如何将延迟函数更改为millis。
代码:
#include <Servo.h>
Servo myservo;
const int servoPin = D8; // Servo pin op D8
const int flamePin = D6; // Flame sensor pin op D6
const int buzzerPin = D5; // Piezo buzzer op D5
const int ledPin1 = D3; // Led licht 1 op D3
const int ledPin2 = D7; // Led licht 2 op D7
int Flame = HIGH; // De waarde HIGH wordt gekoppeld aan wanneer de vlam aan staat
void setup() {
pinMode(flamePin, INPUT); // Flame sensor is input
myservo.attach(servoPin); // Servo is ouput
pinMode(buzzerPin, OUTPUT); //Piezo buzzer is output
pinMode(ledPin1, OUTPUT); //Led 1 is output
pinMode(ledPin2, OUTPUT); //led 2 is output
} //setup
void loop() {
Flame = digitalRead(flamePin); // Flame waarde wordt gekoppeld aan de waarde die de flamePin leest
if (digitalRead(flamePin) == HIGH) { // Wanneer de flame sensor vuur waarneemt
myservo.write(180); // Draait de servo 180 graden
delay(50); // Doet er 50ms over om naar de positie te komen
noTone(D5);
delay(50000);
tone(D5, 261, 50000);
digitalWrite(ledPin1, HIGH); //Led 1 gaat branden zodra vuur wordt waargenomen
digitalWrite(ledPin2, HIGH); //Led 2 gaat branden zodra vuur wordt waargenomen
}
else if (Flame == LOW){ // Wanneer de flame sensor geen vuur waarneemt
myservo.write(0); // Draait de servo niet
noTone(D5);
digitalWrite(ledPin1, LOW); //Led 1 staat uit
digitalWrite(ledPin2, LOW); //Led 2 staat uit
}
}//loop
答案 0 :(得分:1)
millis
将返回自主板重启后经过的时间。所以你怎么知道15分钟过去了?你记得你开始等待的时间,并且不时检查那段时间加上15分钟是否过去了。
因此,为了在发现火灾后15分钟触发蜂鸣器:
检测到火灾 - &gt;将当前时间戳(millis())存储在变量中。我们将它命名为startTime。 在循环中经常检查当前时间(millis())是否> = startTime + 900000。 如果是这样,启动蜂鸣器,否则继续检查您的火灾传感器输入是否为低电平。
我确定你知道怎么把它倒进代码中!