Застрял в то время как петля Arduino - PullRequest
0 голосов
/ 29 апреля 2019

Вот мой основной цикл

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 Ответ

1 голос
/ 29 апреля 2019

Но по какой-то причине, когда я слишком сильно выключаю штифт включение и выключение. Я не понимаю, почему я застрял в этой петле. Как я могу сбежать от этого?

Цикл не прерывается, потому что ввод в 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();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...