卡在while循环中

时间:2019-04-29 18:55:39

标签: arduino

这是我的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) ;
  }
}

但是由于某些原因,当我将引脚切换得太关时,请继续打开和关闭。我不明白为什么我会卡在这个循环中。我该如何逃脱?

1 个答案:

答案 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();
  }
}
相关问题