Помогите с программированием.

Alexander_s
Offline
Зарегистрирован: 15.08.2018

Подскажите пожалуйста новичку с кодом:

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

Например: светодиод led0 400мс горит, затем тухнет и через 1100мс  загорается следующий (скажем led1) и т.д.

(чтоб они не моргали пока до них не дойдет очередь)

Написал через поначалу через delay, но там циклы переключаются не сразу. Через Mills немогу сообразить как ...)

const int led12 = 12;
int led0 = 0;                  
int led1 = 1;                 
int led3 = 3;
int led4 = 4;
int led13 = 13;
int buttonState = 0;

void setup()
{
  pinMode(led12, INPUT); 
  pinMode(led0, OUTPUT); 
  pinMode(led1, OUTPUT); 
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT); 
  pinMode(led13, OUTPUT);
  }
//===========================================================================
void loop() {
  buttonState = digitalRead(led12); 
  if(buttonState == LOW){          
      digitalWrite (led13, HIGH); 
      delay (random (1000, 1500)); 
      digitalWrite (led13, LOW); 
      delay (random (1000, 1500));
  }  
  else{                          
      digitalWrite (led0, HIGH);
      delay (300);
      digitalWrite (led0, LOW); 
      delay (1200);
      digitalWrite (led1, HIGH);
      delay (300);
      digitalWrite (led1, LOW); 
      delay (1200);
      digitalWrite (led1, HIGH);
      delay (300);
      digitalWrite (led1, LOW); 
      delay (1200);
      digitalWrite (led3, HIGH);
      delay (300);
      digitalWrite (led3, LOW); 
      delay (1200);
      digitalWrite (led0, HIGH);
      delay (300);
      digitalWrite (led0, LOW); 
      delay (1200);
      digitalWrite (led1, HIGH);
      delay (300);
      digitalWrite (led1, LOW); 
      delay (1200);
      digitalWrite (led1, HIGH);
      delay (300);
      digitalWrite (led1, LOW); 
      delay (1200);
      digitalWrite (led4, HIGH);
      ddelay (300);
      digitalWrite (led4, LOW); 
      delay (1200);        
  }
}  

 

mixail844
Offline
Зарегистрирован: 30.04.2012

насчет мерцания, схему подключения можно ? 

 

 

5N62V
Offline
Зарегистрирован: 25.02.2016

Alexander_s пишет:

 

Написал через поначалу через delay, но там циклы переключаются не сразу. Через Mills немогу сообразить как ...)

 

А чем Вас delay не устраивает?

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

Alexander_s пишет:

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

}  

Общий алгоритм:

при заходе в else 28 строка  считываем myTime=millis(), далее делаем цикл while() с условием состояния кнопки.

далее

digitalWrite (led0, HIGH);

if((myTime+300>millis())&& (myTime+300+1200<millis())) digitalWrite (led0, LOW);

и т.д.

Не идеально, но для понимания сути подойдет.

 

 

mixail844
Offline
Зарегистрирован: 30.04.2012

я тут заметил ,что у вас led0 = 0 и led1 = 1 ,если я прявильно помню , то это как раз выводы UART через который заливаеться прошивка в Ардуино, это может обьяснить мерцания .

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

mixail844 пишет:

я тут заметил ,что у вас led0 = 0 и led1 = 1 ,если я прявильно помню , то это как раз выводы UART через который заливаеться прошивка в Ардуино, это может обьяснить мерцания .

да нет, вряд ли - в самом скетче Serial не используется,  значит можно занимать пины 0 и 1 без проблем