这是我的while主循环
void loop () {
s4state = digitalRead(11); //Lit pin 11 switch
if (s4state == 1) { // wargning/detrese
detresse(1);
}
if (s4state == 0) { // wargning/detrese
detresse(0);
}
}
这是我要调用的函数。
void detresse(int valeurPin) {
while(1==valeurPin) {
digitalWrite (2, HIGH) ;
digitalWrite (3, HIGH) ;
digitalWrite (4, HIGH) ;
digitalWrite (5, HIGH) ;
digitalWrite (6, HIGH) ;
digitalWrite (7, HIGH) ;
delay (500) ;
digitalWrite (2, LOW) ;
digitalWrite (3, LOW) ;
digitalWrite (4, LOW) ;
digitalWrite (5, LOW) ;
digitalWrite (6, LOW) ;
digitalWrite (7, LOW) ;
delay (500) ;
}
}
但是由于某些原因,当我将引脚切换得太关时,请继续打开和关闭。我不明白为什么我会卡在这个循环中。我该如何逃脱?
答案 0 :(得分:1)
但是由于某些原因,当我将针脚也从灯丝上移开时,保持 打开和关闭。我不明白为什么我会卡在这个循环中。 我该如何逃脱?
循环不会中断,因为void detresse(int valeurPin)
的输入不会改变。就是说,一旦被调用,开关的状态就不会对该功能产生影响,并且它将在while循环中不断运行。您可以做的是像这样更改detresse
:
void detresse(void) {
digitalWrite (2, HIGH) ;
digitalWrite (3, HIGH) ;
digitalWrite (4, HIGH) ;
digitalWrite (5, HIGH) ;
digitalWrite (6, HIGH) ;
digitalWrite (7, HIGH) ;
delay (500) ;
digitalWrite (2, LOW) ;
digitalWrite (3, LOW) ;
digitalWrite (4, LOW) ;
digitalWrite (5, LOW) ;
digitalWrite (6, LOW) ;
digitalWrite (7, LOW) ;
delay (500) ;
}
此外,无论开关的状态如何,您都将调用此函数,这不是您想要的,因为无论您用开关做什么,都会触发照明顺序。由于切换只能有两种状态,因此您只能在一个或另一个上调用detresse
,而不是两个都调用。假设您想要肯定的逻辑,这将使loop
看起来像这样:
void loop () {
s4state = digitalRead(11); //Lit pin 11 switch
if (s4state == 1) { // wargning/detrese
detresse();
}
}