0
我目前正在開發一個自動燈開關。這裏是我的代碼:Arduino自動燈開關2
#include <Servo.h>
boolean time = false;
const int timeLim = 10000;
const int delLen = 5000;
int pirVal = 0;
const int pirPin = 2;
const int sensePin = 5;
boolean timeRet = false;
int lightVal;
Servo myServo;
unsigned long limit;
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
myServo.attach(11);
myServo.write(40);
}
void loop() {
unsigned long Timer = millis();
pirVal = digitalRead(pirPin);
int lightVal = analogRead(sensePin);
Serial.print(pirVal);
Serial.print(' ');
Serial.print(lightVal);
Serial.print(' ');
Serial.print(Timer);
Serial.print(' ');
Serial.print(time);
Serial.print(' ');
Serial.print(limit);
Serial.print(' ');
Serial.println(timeRet);
if (lightVal < 400) {
time = false;
limit = 0;
timeRet = false;
} if (lightVal < 400 && pirVal == 1) {
unsigned long time = false;
pirVal = 0;
myServo.write(160);
} if (lightVal > 400 && pirVal == 0 && timeRet == false){
limit = getTimeLim(timeLim, Timer);
pirVal = 0;
timeRet = true;
} if (lightVal > 400 && pirVal == 0 && timeRet == true) {
time = timeStat (limit, Timer);
} if (lightVal > 400 && time == true) {
myServo.write(40);
}
}
int getTimeLim(const int timeLim, unsigned long Timer) {
unsigned long limit = Timer + timeLim;
return limit;
}
boolean timeStat(unsigned long limit, unsigned long Timer) {
if (Timer < limit) {
time = false;
} else if (Timer > limit) {
time = true;
}
return time;
}
的問題是,當你看串行首次getTimeLim功能一切正常,但第二個時間總是有些離譜的數字(例如4294937965)。我不知道爲什麼它會給我這個龐大的數字。幫助將不勝感激。
if語句是因爲每當我做我沒有使用其他的原因,整個代碼失敗,並沒有任何反應在所有。此外,不幸的是,它仍然吐出這麼大的數字 – Michaelslec
沒問題,試着向我們解釋你的變量是否應該這樣做,以便我們更好地理解它。 – tay10r
其實我看到了你的建議的最後一部分,而不是使用getTimeLim,只需用timeLim + Timer替換即可。這解決了我的問題!非常感謝。 – Michaelslec