Мигание светодиодов с меняющейся частотой
Я пытаюсь мигать двумя светодиодами, начиная с медленной скорости, а затем увеличивая ее до быстрой: 1 горит, 1 и 2 горит, 2 горит, 1 и 2 горит, 1 горит и т. д. Мигание повторяется дважды. затем увеличьте скорость и повторяйте, пока оба не будут гореть постоянно. Тогда мне нужны светодиоды 3 & 4, чтобы идти дальше. Я получил 1 & 2 светодиода мигают так, как я хочу, но все, что я помещаю после цикла for/if, попадает в цикл. Это работает для мигания 1 & 2 светодиода:
int led1 = 9;
int led2 = 10;
int led3 = 11;
int led4 = 12;
int delay1 = 700;
int delayAmount1 = delay1 / 10;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}
void loop() {{
delay1 = delay1 - delayAmount1;
for (int i=0 ; i <2 ; i++) {
if (delay1 > 10)
digitalWrite(led1, HIGH); //включен желтый (желтый)
delay(delay1);
digitalWrite(led2, HIGH); //красный и желтый включены (оранжевый)
delay(delay1);
digitalWrite(led1, LOW); //желтый выключен (красный)
delay(delay1);
digitalWrite(led1, HIGH); //желтый (оранжевый)
delay(delay1);
digitalWrite(led2, LOW); //красный выключен (желтый)
digitalWrite (led1, LOW); //желтый выключен (все выключено)
}
}
// digitalWrite(led3, HIGH); //включен синий цвет
//задержка(1000);
//digitalWrite(led4, HIGH); //зеленый горит
}
Если я удалю // из
// digitalWrite(led3, HIGH); //включен синий цвет
//задержка(1000);
//digitalWrite(led4, HIGH); //зеленый горит
они становятся частью цикла. Может кто-нибудь сказать мне, что я делаю неправильно? Это что-то новое.
@JBrown, 👍0
Обсуждение2 ответа
Лучший ответ:
В if(delay1>10)
нет условного кода в {}, поэтому он должен выглядеть так
if(delay1>10) {
//условный код, что произойдет, если оператор == true
}
И если я правильно понял ваш проект и код, когда delay1 <= 10
, вы хотите, чтобы светодиоды 3 и светодиоды 4 загорались. Итак, вы хотите добавить дополнительный блок else{}
. Этот необязательный блок будет пропущен, если будет выполнен оператор if. Если оператор if не выполняется, потому что, например, ваша задержка1 меньше или равна 10, тогда будет выполнен блок else.
else{
//светодиоды 3 и светодиоды 4 загораются
}
У вас есть ряд проблем с форматированием кода, как эстетических, так и структурных.
Вам необходимо сделать отступ в коде и использовать фигурные скобки. Если вы плохо отформатируете свой код, вам будет очень трудно понять, что вы делаете.
Вот попытка очистить ваш код:
void loop() {
delay1 = delay1 - delayAmount1;
for (int i=0 ; i <2 ; i++) {
if (delay1 > 10) {
digitalWrite(led1, HIGH); //включен желтый (желтый)
delay(delay1);
digitalWrite(led2, HIGH); //красный и желтый включены (оранжевый)
delay(delay1);
digitalWrite(led1, LOW); //желтый выключен (красный)
delay(delay1);
digitalWrite(led1, HIGH); //желтый (оранжевый)
delay(delay1);
digitalWrite(led2, LOW); //красный выключен (желтый)
digitalWrite (led1, LOW); //желтый выключен (все выключено)
}
}
// digitalWrite(led3, HIGH); //включен синий цвет
//задержка(1000);
//digitalWrite(led4, HIGH); //зеленый горит
(Я не уверен, что должно быть внутри оператора if или нет, поскольку у вас не было открывающей скобки.)
В операторе цикла также было две открывающие скобки, что очень странно.
Обратите внимание, что использование delay()
для управления несколькими объектами одновременно — плохая идея. Функция задержки() заставляет вашу программу заморозить все, пока задержка не закончится. Если вы попытаетесь мигать разными светодиодами с разной скоростью, у вас ничего не получится. Если вы попытаетесь обнаружить нажатия кнопок, одновременно мигая светодиодами, вы пропустите нажатия кнопок, пока ваш код находится в задержке. На различных платах Arduino есть множество тем о том, как избежать использования задержки. Чтобы найти основную информацию, выполните поиск по запросу «Arduino мигает без задержки».
- Мигните светодиодом 5 раз с помощью цикла for
- Чтение нескольких аналоговых входных контактов
- Как остановить цикл в последовательном мониторе?
- Одновременное чтение кнопки?
- Объектно-ориентированное программирование Arduino
- Как запустить функцию каждый 10-й раз через цикл?
- Реализация циклического буфера и Serial.print()
- Почему циклы Do While не останавливаются?
проверьте строку
if (delay1 > 10)
, @MichaelT