抱歉,标题含糊不清,但我不知道该怎么写,因为我真的不知道我的问题是什么。为连接到arduino的运动传感器编写了一些代码。每次运行脚本时,它都绕过while循环,因为某种原因我标记了这个循环,然后执行下面的代码并停止。
int buzzPin = 8;
int upPin = 7;
int downPin = 6;
int motionPin = 12;
int redLed = 4;
int amberLed = 3;
int greenLed = 2;
void setup() {
pinMode(buzzPin, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(amberLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(upPin, INPUT);
pinMode(downPin, INPUT);
pinMode(motionPin, INPUT);
}
void loop() {
delay(1000);
digitalWrite(greenLed, HIGH);
digitalWrite(amberLed, LOW);
while(!digitalRead(upPin)==HIGH); //this is just bypassed when 'upPin' is not high
if(digitalRead(upPin)==HIGH){
digitalWrite(greenLed, LOW);
digitalWrite(amberLed, HIGH);
digitalWrite(buzzPin, HIGH); //delay before arming the motion sensor
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(250);
digitalWrite(buzzPin, LOW);
delay(250);
digitalWrite(buzzPin, HIGH);
delay(1000);
digitalWrite(buzzPin, LOW);
} //stops here...
while(!digitalRead(motionPin)==HIGH);
disarm();
alarm();
}
bool disarm(){ //button combination to disarm the motion sensor and stop the alarm
int i = 0;
while(true){
while(digitalRead(upPin)||digitalRead(downPin));
while(!digitalRead(upPin)||!digitalRead(downPin)){i++;
delay(1000);
if(i == 5){
return(false);
}
}
if(digitalRead(upPin)==HIGH){
int i = 0;
}
else{continue;}
while(digitalRead(upPin)||digitalRead(downPin));
while(!digitalRead(upPin)||!digitalRead(downPin)){i++;
delay(1000);
if(i == 5){
return(false);
}
}
if(digitalRead(upPin)==HIGH){
int i = 0;
}
else{continue;}
while(digitalRead(upPin)||digitalRead(downPin));
while(!digitalRead(upPin)||!digitalRead(downPin)){i++;
delay(1000);
if(i == 5){
return(false);
}
}
if(digitalRead(downPin)==HIGH){
int i = 0;
}
else{continue;}
while(digitalRead(upPin)||digitalRead(downPin));
while(!digitalRead(upPin)||!digitalRead(downPin)){i++;
delay(1000);
if(i == 5){
return(false);
}
}
if(digitalRead(upPin)==HIGH){
int i = 0;
}
else{continue;}
while(digitalRead(upPin)||digitalRead(downPin));
while(!digitalRead(upPin)||!digitalRead(downPin)){i++;
delay(1000);
if(i == 5){
return(false);
}
}
if(digitalRead(downPin)==HIGH){
int i = 0;
}
else{continue;}
while(digitalRead(upPin)||digitalRead(downPin));
while(!digitalRead(upPin)||!digitalRead(downPin)){i++;
delay(1000);
if(i == 5){
return(false);
}
}
if(digitalRead(downPin)==HIGH){
int i = 0;
}
else{continue;}
break;
}
return(true);
delay(50);
return(false);
}
void alarm(){
digitalWrite(redLed, HIGH);
digitalWrite(amberLed, LOW);
while(disarm()==false){
digitalWrite(buzzPin, HIGH);
delay(500);
digitalWrite(buzzPin, LOW);
delay(500);
}
}如果有人能告诉我我的问题是什么以及如何解决它,那就太好了。
发布于 2016-12-03 18:31:41
循环()
(这不是一个循环,而是一个持续了很长时间的不间断延迟的集合)
这是:
void loop() {
show_green();
hang_until(upPin, LOW); // this can last forever
show_amber();
buzz_a_while(); // blocks a couple of seconds
hang_until(motionPin, LOW); // this seems to last forever
disarm();
alarm();
delay(1 sec);
}因此,只要强迫upPin和motionPin永远保持低位,您就不会注意到“停止”。
但是()在arduino编码中总是可疑的,因为它禁用了arduino的主要特性:永远运行循环函数。
发布于 2016-12-03 18:08:55
您在第一个while循环的注释中写道,如果引脚不高,就会绕过它。但是,您有一个否定运算符(!)就在看上去很奇怪的情况之前。我建议你把它去掉。之后的语句似乎也没有必要,因为它只是在checka的条件下进入循环。
https://stackoverflow.com/questions/40950814
复制相似问题