Почему следующий код не заставляет светодиоды мигать, а горит постоянно?

int timer = 1000;
int thispin = 5;

void setup() {
  for (int thispin = 5; thispin < 8; thispin++) 
    pinMode(thispin, OUTPUT);
}

void loop() {
  for (int thispin = 5; thispin < 8; thispin++) 
    digitalWrite(thispin, HIGH);

  delay(timer);
  digitalWrite(thispin, LOW);


  for (int thispin = 7; thispin = 5; thispin--) 
    digitalWrite(thispin, HIGH);

  delay(timer);
  digitalWrite(thispin, LOW);
}

У меня есть приведенный выше код. Я думал, что то, как это было написано, приведет к миганию светодиодов, но все они горят постоянно. Может ли кто-нибудь помочь объяснить, что это я сделал неправильно? Я очень новичок в этом, и я просто играю в основном, пытаясь научиться. Спасибо!

, 👍1

Обсуждение

Добавлены теги кода и отступы - должно быть более очевидно, что делается циклами, а что не выполняется повторно циклами. Также ; этот штифт = 5; ... - это присвоение, а не сравнение., @KIIV

вы только устанавливаете контакт 5 LOW. это глобальный thispin, @Juraj

если вы правильно закодировали программу, как вы думаете, как долго будет длиться низкий вывод после этой строки? ... digitalWrite(thispin, LOW); ... в вашем коде, каково значение thispin?, @jsotola

пожалуйста, просмотрите документацию по циклу for... он работает не так, как вы думаете, @jsotola

= не будет работать. Вы должны изменить его на ==., @Python Schlange

Вы увидите значения OUTPUT только во время вызовов delay(). Все остальное, включая перезапуск loop(), происходит слишком быстро. В вашем коде во время задержки все выводы ВЫСОКИЕ., @DataFiddler


4 ответа


0

Поменяйте местами последние строки:

delay(timer);  
digitalWrite(thispin, LOW);

Это 2 секунды и, возможно, несколько сотен наносекунд.

,

0

В последнем цикле for() выражение ограничения thispin =5;, вероятно, означало thispin <=5;. Как написано, выражение является присваиванием, а не проверкой, и оно всегда будет true, потому что 1) оператор присваивания также является выражением, имеющим значение, равное присваиваемому значению; и 2) присвоенное значение «5», будучи ненулевым, эквивалентно «истине»), поэтому этот цикл никогда не закончится. этот вывод будет декрементироваться навсегда и постоянно устанавливать вывод 5 в состояние HIGH. Он оставляет другие контакты в покое, но они уже были высокими, а светодиоды продолжают гореть, что вы и наблюдали.

(Есть несколько других ошибок, как отмечалось ранее предыдущими ответчиками, которые также не позволят вашему коду работать так, как вы ожидали.)

,

1

Из приведенного кода не совсем понятно, чего вы пытаетесь достичь. Если я правильно понял, вы хотите, чтобы контакты загорались на одну секунду, а затем гасли. Сначала с 5 на 7, а потом с 7 на 5. Попробуйте указанный код.

int timer = 1000;

void setup() 
{
  for (int thispin = 5; thispin < 8; thispin++) 
    pinMode(thispin, OUTPUT);
}

void loop() 
{
  for (int thispin = 5; thispin < 8; thispin++)
  { 
    digitalWrite(thispin, HIGH);
    delay(timer);
    digitalWrite(thispin, LOW);
  }

  delay(timer);

  for (int thispin = 7; thispin >= 5; thispin--) 
  {
    digitalWrite(thispin, HIGH);
    delay(timer);
    digitalWrite(thispin, LOW);
  }
}

Кроме того, использование одного и того же имени для глобальных переменных и итераторов цикла является плохим стилем.

,

3

Цель кода не ясна. Кажется, идея состоит в том, чтобы многократно мигать 3 светодиодами, подключенными к контактам 5, 6 и 7. Для этого код нуждается в небольшой модификации —

int timer = 1000;
int thispin = 5;

void setup() {
  
  for (int thispin = 5; thispin < 8; thispin++) 
    pinMode(thispin, OUTPUT);
}

void loop() {
  
  for (int thispin = 5; thispin < 8; thispin++) 
    digitalWrite(thispin, HIGH); 
 
    delay(timer); 

  
  for (int thispin = 5; thispin < 8; thispin++) 
    digitalWrite(thispin, LOW);

    delay(timer); 

}

Кроме того, поскольку вы хотели знать, почему светодиоды постоянно горят в вашем коде- Это связано с тем, что после любого из операторов digitalWrite-LOW нет оператора задержки. Если задержки нет, светодиоды могут погаснуть на долю миллисекунды, что будет незаметно.

,