Мигание светодиодов с меняющейся частотой

loop

Я пытаюсь мигать двумя светодиодами, начиная с медленной скорости, а затем увеличивая ее до быстрой: 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); //зеленый горит

они становятся частью цикла. Может кто-нибудь сказать мне, что я делаю неправильно? Это что-то новое.

, 👍0

Обсуждение

проверьте строку if (delay1 > 10), @MichaelT


2 ответа


Лучший ответ:

0

В if(delay1>10) нет условного кода в {}, поэтому он должен выглядеть так

if(delay1>10) { 
//условный код, что произойдет, если оператор == true
} 

И если я правильно понял ваш проект и код, когда delay1 <= 10, вы хотите, чтобы светодиоды 3 и светодиоды 4 загорались. Итак, вы хотите добавить дополнительный блок else{}. Этот необязательный блок будет пропущен, если будет выполнен оператор if. Если оператор if не выполняется, потому что, например, ваша задержка1 меньше или равна 10, тогда будет выполнен блок else.

else{
//светодиоды 3 и светодиоды 4 загораются
}
,

0

У вас есть ряд проблем с форматированием кода, как эстетических, так и структурных.

Вам необходимо сделать отступ в коде и использовать фигурные скобки. Если вы плохо отформатируете свой код, вам будет очень трудно понять, что вы делаете.

Вот попытка очистить ваш код:

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 мигает без задержки».

,