Поочередное мигание светодиодов с помощью функции millis

mixail80
Offline
Зарегистрирован: 11.04.2020

Привет!

Не могу сообразить как правильно заставить поочередно мигать светодиоды с помощью функции millis, с delay то все понятно. Вот скетч как одним мигать, взял с этого форума.

#define LED  13 
unsigned long timer_1;

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
if(millis() - timer_1 >= 1000) {

timer_1 = millis();
digitalWrite(LED, !digitalRead(LED));
  
 }
}

Пробовал разные варианты и так сяк, все одно лажа.

Можно ли использовать оператор if несколько раз?

 

b707
Offline
Зарегистрирован: 26.05.2017

показывайте варианты, как пробовали

sadman41
Offline
Зарегистрирован: 19.10.2016

Конечно лажа - светодиод-то один. Откуда очередности взяться?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

mixail80 пишет:

Можно ли использовать оператор if несколько раз?

Любой оператор можно использовать несколько раз.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

mixail80 пишет:

Пробовал разные варианты

Почему ни одного не вижу?

mixail80 пишет:

Можно ли использовать оператор if несколько раз?

После первого, каждый следующий раз - $1 (мне) и используй на здоровье.

У него, правда, количество срабатываний ограничено - истирается. Как совсем сотрётся - заменишь. Ну, или  регламенто заменяй (как масло в машине) каждые 100 срабатываний, например - должно хватить, если не китайский.

mixail80
Offline
Зарегистрирован: 11.04.2020

Во сообразил с помощью оператора switch

#define LED  13 
#define LEDa  12 
unsigned long timer_1;
int pereky = 0;


void setup() {
 Serial.begin(9600);
  pinMode(13, OUTPUT);
pinMode(12, OUTPUT);

}

void loop() {
if(millis() - timer_1 >= 2000) {

timer_1 = millis();
pereky++;
Serial.println(pereky); 
  //digitalWrite(LED, !digitalRead(LED));
  
}

switch (pereky) {
  case 1: digitalWrite(LED, HIGH); digitalWrite(LEDa, LOW);
  break;
  case 2: digitalWrite(LEDa, HIGH); digitalWrite(LED, LOW);
  pereky = 0;
  break;
}
}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

А нахрена здесь millis()? Из принципа? Тута и delay() сойдет.

Но дорисую Вашу программу - я сегодня добрый, водочки принял :)

int LED;
unsigned long timer_1;

void setup() {
LED=2;
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
if(millis() - timer_1 >= 1000) {

timer_1 = millis();
digitalWrite(LED, !digitalRead(LED));
LED++;
if(LED==13)LED=2;  
 }


}

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

mixail80 пишет:

Во сообразил с помощью оператора switch

Это чтоб мне $1 не платить за повторное использование if? До чего ж, блин, народ жадный пошёл!

sadman41
Offline
Зарегистрирован: 19.10.2016

Для двух светодиодов никакого кейса не нужно - достаточно включать второй светодиод в инверсное (по отношению к первому) состояние.