@noiasca
This is my working code. I want to add one more thing. That is if any of the pattern is running. then in between if I press the push-button of that particular LED then that LED will turn off and next LED in that pattern will turn on. I tried this code but it's not working as my expectation. There is no effect when I press that particular LED Button.
Here is my code.
const int Button_pattern_1 = 2;
const int Button_pattern_2 = 3;
const int Button_pattern_stop = 4;
const int LED_Button_one = 5;
const int LED_one = 12;
const int LED_Button_two = 6;
const int LED_two = 11;
const int LED_Button_three = 7;
const int LED_three = 10;
const int LED_Button_four = 8;
const int LED_four = 9;
int buttonState_pattern_1 = 0;
int buttonState_pattern_2 = 0;
int buttonState_pattern_stop = 0;
const long Interval = 3000;
byte state = 0;
char ledState_pattern_one = 'A', ledState_pattern_two = 'A';
unsigned long previousMillis_pattern_one = 0, previousMillis_pattern_two = 0;
const long interval = 3000;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(Button_pattern_1, INPUT);
pinMode(Button_pattern_2, INPUT);
pinMode(Button_pattern_stop, INPUT);
pinMode(LED_Button_one, INPUT);
pinMode(LED_Button_two, INPUT);
pinMode(LED_Button_three, INPUT);
pinMode(LED_Button_four, INPUT);
pinMode(LED_one, OUTPUT);
pinMode(LED_two, OUTPUT);
pinMode(LED_three, OUTPUT);
pinMode(LED_four, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
unsigned long currentMillis = millis();
buttonState_pattern_1 = digitalRead(Button_pattern_1);
// Serial.println(buttonState_pattern_1);
buttonState_pattern_2 = digitalRead(Button_pattern_2);
// Serial.println(buttonState_pattern_2);
buttonState_pattern_stop = digitalRead(Button_pattern_stop);
// Serial.println(buttonState_pattern_stop);
buttonRun();
switch (state)
{
case 'a':
Serial.println("Pattern one running");
pattern_one(currentMillis);
break;
case 'b':
Serial.println("Pattern two running");
pattern_two(currentMillis);
break;
}
}
void buttonRun()
{
if (digitalRead(Button_pattern_1) == HIGH)
{
state = 'a';
}
if (digitalRead(Button_pattern_2) == HIGH)
{
state = 'b';
}
if (digitalRead(Button_pattern_stop) == HIGH)
{
Serial.println("Pattern stop");
patternStop();
state = 0;
}
}
void pattern_one(unsigned long currentMillis_pattern)
{
if (currentMillis_pattern - previousMillis_pattern_one >= interval)
{
previousMillis_pattern_one = currentMillis_pattern;
if (ledState_pattern_one == 'A')
{
ledState_pattern_one = 'B';
if (digitalRead(LED_Button_two) == 1) //Here I have used pull-up resistor that's why i have checked with 1.
{
// Serial.print("two");
Serial.println(digitalRead(LED_Button_two));
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
else
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
}
else if (ledState_pattern_one == 'B')
{
ledState_pattern_one = 'C';
if (digitalRead(LED_Button_four) == 1) //Here I have used pull-up resistor that's why i have checked with 1.
{
// Serial.print("four");
Serial.println(digitalRead(LED_Button_four));
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, HIGH);
}
else
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
}
else if (ledState_pattern_one == 'C')
{
ledState_pattern_one = 'D';
if (digitalRead(LED_Button_one) == 1) //Here I have used pull-up resistor that's why i have checked with 1.
{
// Serial.print("one");
Serial.println(digitalRead(LED_Button_one));
digitalWrite(LED_one, HIGH);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
else
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
}
else if (ledState_pattern_one == 'D')
{
ledState_pattern_one = 'A';
if (digitalRead(LED_Button_three) == 1) //Here I have used pull-up resistor that's why i have checked with 1.
{
// Serial.print("three");
Serial.println(digitalRead(LED_Button_three));
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, HIGH);
digitalWrite(LED_four, LOW);
}
else
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
}
}
}
void pattern_two(unsigned long currentMillis_pattern)
{
if (currentMillis_pattern - previousMillis_pattern_two >= interval)
{
previousMillis_pattern_two = currentMillis_pattern;
if (ledState == 'A')
{
ledState = 'B';
if (digitalRead(LED_Button_one) == 1) //Here I have used pull-up resistor that's why i have checked with 1.
{
// Serial.print("one");
Serial.println(digitalRead(LED_Button_one));
digitalWrite(LED_one, HIGH);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
else
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
}
else if (ledState == 'B')
{
ledState = 'C';
if (digitalRead(LED_Button_three) == 1) //Here I have used pull-up resistor that's why i have checked with 1.
{
// Serial.print("three");
Serial.println(digitalRead(LED_Button_three));
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, HIGH);
digitalWrite(LED_four, LOW);
}
else
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
}
else if (ledState == 'C')
{
ledState = 'D';
if (digitalRead(LED_Button_two) == 1) //Here I have used pull-up resistor that's why i have checked with 1.
{
// Serial.print("two");
Serial.println(digitalRead(LED_Button_two));
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
else
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
}
else if (ledState == 'D')
{
ledState = 'A';
if (digitalRead(LED_Button_four) == 1) //Here I have used pull-up resistor that's why i have checked with 1.
{
// Serial.print("four");
Serial.println(digitalRead(LED_Button_four));
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, HIGH);
}
else
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
}
}
}
}
void patternStop()
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
state = 0;
}
Here is my circuit diagram.