Оператор else не работает должным образом

Я работал над довольно простым проектом Arduino-макета, который должен имитировать перекресток светофора. Есть два набора огней, один называется Север-Юг, а другой - Восток-Запад (очень похоже на светофоры, которые вы видите на перекрестке на дороге). Цель состоит в том, чтобы заставить светофоры менять свой правильный цвет в нужное время; однако один из моих желтых огней вообще не включается, а светодиоды макета, которые я использую, полностью пропускают рассматриваемый желтый свет и переходят прямо к красно-зеленой конфигурации, которая должна случится после.

Вот код, который у меня есть:

void setup() {

  pinMode(2, OUTPUT); //R-ns
  pinMode(3, OUTPUT); //Y-ns
  pinMode(4, OUTPUT); //G-ns
  pinMode(5, OUTPUT); //R-ew
  pinMode(6, OUTPUT); //Y-ew
  pinMode(7, OUTPUT); //G-ew

}

void loop() {

  for(int count = 0; count<16; count++) {
    
    if (count<7) {
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);      
      }

     else if (count==7) {
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);     
      }
      
     else if (7<count<15) {
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);      
      }
      
     else {
      digitalWrite(2, LOW);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      }
      
    delay(1000);
    }
    
}

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

, 👍0

Обсуждение

используйте serial.print() для отладки вашего кода, @jsotola


1 ответ


3

7<count<15 интерпретируется как (7<count)<15. 7<count приведет к false или true , которые будут интерпретироваться как 0 и 1, когда позже будут задействованы в части выражения < 15 , что означает, что 7<count<15 всегда истинно.

То, что вы, вероятно, ищете, - это 7 < count && count < 15.

,