Почему следующий код не заставляет светодиоды мигать, а горит постоянно?
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);
}
У меня есть приведенный выше код. Я думал, что то, как это было написано, приведет к миганию светодиодов, но все они горят постоянно. Может ли кто-нибудь помочь объяснить, что это я сделал неправильно? Я очень новичок в этом, и я просто играю в основном, пытаясь научиться. Спасибо!
@Jason, 👍1
Обсуждение4 ответа
Поменяйте местами последние строки:
delay(timer);
digitalWrite(thispin, LOW);
Это 2 секунды и, возможно, несколько сотен наносекунд.
В последнем цикле for() выражение ограничения thispin =5;
, вероятно, означало thispin <=5;
. Как написано, выражение является присваиванием, а не проверкой, и оно всегда будет true
, потому что 1) оператор присваивания также является выражением, имеющим значение, равное присваиваемому значению; и 2) присвоенное значение «5», будучи ненулевым, эквивалентно «истине»), поэтому этот цикл никогда не закончится. этот вывод будет декрементироваться навсегда и постоянно устанавливать вывод 5 в состояние HIGH. Он оставляет другие контакты в покое, но они уже были высокими, а светодиоды продолжают гореть, что вы и наблюдали.
(Есть несколько других ошибок, как отмечалось ранее предыдущими ответчиками, которые также не позволят вашему коду работать так, как вы ожидали.)
Из приведенного кода не совсем понятно, чего вы пытаетесь достичь. Если я правильно понял, вы хотите, чтобы контакты загорались на одну секунду, а затем гасли. Сначала с 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 светодиодами, подключенными к контактам 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 нет оператора задержки. Если задержки нет, светодиоды могут погаснуть на долю миллисекунды, что будет незаметно.
- Как повторить другое действие внутри цикла?
- Код для реализации простого сигнала светофора, а также отображения на ЖК-дисплее, какой цвет включен?
- Включение двигателя и светодиода одновременно в течение заданного периода времени
- Работа с мультиплексорами для получения постоянного напряжения на выходе
- Включение и выключение двух наборов светодиодов с помощью двух кнопок
- подключение светодиода к DHT и кодовой комбинации
- Состояние в цикле while не обновляется на моем mkr1010
- Хочу оптимизировать этот код и добавить цикл
Добавлены теги кода и отступы - должно быть более очевидно, что делается циклами, а что не выполняется повторно циклами. Также
; этот штифт = 5; ...
- это присвоение, а не сравнение., @KIIVвы только устанавливаете контакт 5 LOW. это глобальный
thispin
, @Jurajесли вы правильно закодировали программу, как вы думаете, как долго будет длиться низкий вывод после этой строки? ...
digitalWrite(thispin, LOW);
... в вашем коде, каково значениеthispin
?, @jsotolaпожалуйста, просмотрите документацию по циклу for... он работает не так, как вы думаете, @jsotola
=
не будет работать. Вы должны изменить его на==
., @Python SchlangeВы увидите значения OUTPUT только во время вызовов delay(). Все остальное, включая перезапуск loop(), происходит слишком быстро. В вашем коде во время задержки все выводы ВЫСОКИЕ., @DataFiddler