Hi.
I'm from Serbia, English is not my native language and I'm sorry for my mistakes, if I make any.
I'm really new in Arduino, bought my UNO five days ago. I made my first project, wich works just fine. It was something like "Thunder and lightning" that is well known except I implemented RF remote controller for sound volume levels. MP3 DFPlayer is used for playing sound and its BUSY pin for triggering LED's. Timing of DFPlayer is controlled using millis(). Sequence of LED's was controlled using delay() funktion. Only issue that occurred was lag in controlling sound volume due to delay(). It is possible only when lights are LOW.
Now I'm trying to replicate that light sequence using millis(). And I did it. Sort of... I wrote two codes separately.
First code for sequence that turns on first LED for 500ms than turns it of, turns on second LED for 500ms than turns it of and turns on third LED for 500ms than turns it of. And that works.
Second code for sequence that turns on all LED's at fast rate. And that works too...
But when I joined two codes together all I got is all LED's blinking at fast rate.
It skips first sequence and execute second one continuously.
I'm missing something but don't know what. I've tried to find solution on forum but it's specific problem.
Any help would be appreciated. Thank's.
Here is my code:
int ledPin8=8;
int ledPin9=9;
int ledPin10=10;
int ledState8 = LOW;
int ledState9 = LOW;
int ledState10 = LOW;
int ledStateXX = LOW;
unsigned long previousMillis8 = 0; // will store last time LED was updated
unsigned long previousMillis9 = 0;
unsigned long previousMillis10 = 0;
unsigned long interval_100 = 100; // interval at which to blink (milliseconds)
unsigned long interval_500 = 500;
void setup()
{
Serial.begin(19200);
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin10, OUTPUT);
}
void loop(){
unsigned long currentMillis = millis();
// First LED=HIGH for 500ms , others=LOW
if(
((ledState8==HIGH) && ( currentMillis - previousMillis8 >= interval_500 ))
&&
((ledState9==LOW) && ( currentMillis - previousMillis8 >= interval_500 ))
&&
((ledState10==LOW) && ( currentMillis - previousMillis8 >= interval_500 ))
)
{
ledState8=LOW;
digitalWrite(ledPin8,ledState8);
digitalWrite(ledPin9,ledState8);
digitalWrite(ledPin10,ledState8);
previousMillis8 = currentMillis;
}
else
if(
(ledState8==LOW) && ( currentMillis - previousMillis8 >= interval_500 )
&&
((ledState9==LOW) && ( currentMillis - previousMillis8 >= interval_500 ))
&&
((ledState10==LOW) && ( currentMillis - previousMillis8 >= interval_500 ))
)
{
ledState8=HIGH;
digitalWrite(ledPin8,ledState8);
digitalWrite(ledPin9,ledStateXX);
digitalWrite(ledPin10,ledStateXX);
previousMillis8 = currentMillis;
}
// Second LED=HIGH for 500ms , others=LOW
if(
((ledState9==HIGH) && ( currentMillis - previousMillis9 >= interval_500 ))
&&
((ledState8==LOW) && ( currentMillis - previousMillis9 >= interval_500 ))
&&
((ledState10==LOW) && ( currentMillis - previousMillis9 >= interval_500 ))
)
{
ledState9=LOW;
digitalWrite(ledPin9,ledState9);
digitalWrite(ledPin8,ledState9);
digitalWrite(ledPin10,ledState9);
previousMillis9 = currentMillis;
}
else
if(
((ledState9==LOW) && ( currentMillis - previousMillis9 >= interval_500 ))
&&
((ledState8==LOW) && ( currentMillis - previousMillis9 >= interval_500 ))
&&
((ledState10==LOW) && ( currentMillis - previousMillis9 >= interval_500 ))
)
{
ledState9=HIGH;
digitalWrite(ledPin9,ledState9);
digitalWrite(ledPin8,ledStateXX);
digitalWrite(ledPin10,ledStateXX);
previousMillis9 = currentMillis;
}
// Third LED=HIGH for 500ms , others=LOW
if(
((ledState10==HIGH) && ( currentMillis - previousMillis10 >= interval_500 ))
&&
((ledState9==LOW) && ( currentMillis - previousMillis10 >= interval_500 ))
&&
((ledState8==LOW) && ( currentMillis - previousMillis10 >= interval_500 ))
)
{
ledState10=LOW;
digitalWrite(ledPin10,ledState10);
digitalWrite(ledPin8,ledStateXX);
digitalWrite(ledPin9,ledStateXX);
previousMillis10 = currentMillis;
}
else
if(
((ledState10==LOW) && ( currentMillis - previousMillis10 >= interval_500 ))
&&
((ledState9==LOW) && ( currentMillis - previousMillis10 >= interval_500 ))
&&
((ledState8==LOW) && ( currentMillis - previousMillis10 >= interval_500 ))
)
{
ledState10=HIGH;
digitalWrite(ledPin10,ledState10);
digitalWrite(ledPin8,ledStateXX);
digitalWrite(ledPin9,ledStateXX);
previousMillis10 = currentMillis;
}
// All LEDs in HIGH/LOW sequence at fast rate
if(
((ledState10==LOW) && ( currentMillis - previousMillis10 >= interval_100 ))
&&
((ledState9==LOW) && ( currentMillis - previousMillis9 >= interval_100 ))
&&
((ledState8==LOW) && ( currentMillis - previousMillis8 >= interval_100 ))
)
{
ledState8=HIGH;
ledState9=HIGH;
ledState10=HIGH;
previousMillis8 = currentMillis;
previousMillis9 = currentMillis;
previousMillis10 = currentMillis;
digitalWrite(ledPin8,ledState8);
digitalWrite(ledPin9,ledState9);
digitalWrite(ledPin10,ledState10);
}
else
if(
((ledState10==HIGH) && ( currentMillis - previousMillis10 >= interval_100 ))
&&
((ledState9==HIGH) && ( currentMillis - previousMillis9 >= interval_100 ))
&&
((ledState8==HIGH) && ( currentMillis - previousMillis8 >= interval_100 ))
)
{
ledState8 = LOW;
ledState9 = LOW;
ledState10 = LOW;
previousMillis8 = currentMillis;
previousMillis9 = currentMillis;
previousMillis10 = currentMillis;
digitalWrite(ledPin8,ledState8);
digitalWrite(ledPin9,ledState9);
digitalWrite(ledPin10,ledState10);
}
}