char led_red = 23;
char led_yellow = 19;
char led_green = 18;
long led_red_previous_millis = 0;
char led_red_status = LOW;
int led_red_interval = 1000;
long led_yellow_previous_millis = 0;
char led_yellow_status = LOW;
int led_yellow_interval = 2000;
long led_green_previous_millis = 0;
char led_green_status = LOW;
int led_green_interval = 500;
void setup()
{
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
}
void loop()
{
long current_millis; // referee to keep track of time
// current time
current_millis= millis();
//check if it is red led's turn
if (current_millis-led_red_previous_millis >= led_red_interval)
{
// update led red's time
led_red_previous_millis = current_millis;
//LOW --> HIGH or
//High --> LOW
if (led_red_status == LOW)
led_red_status= HIGH;
else
led_red_status= LOW;
// control the red led
digitalWrite(led_red, led_red_status);
}
//check if it is yellow led's turn
if (current_millis-led_yellow_previous_millis >= led_yellow_interval)
{
// update led yellow's time
led_yellow_previous_millis = current_millis;
//LOW --> HIGH or
//High --> LOW
if (led_yellow_status == LOW)
led_yellow_status= HIGH;
else
led_yellow_status= LOW;
// control the yellow led
digitalWrite(led_yellow, led_yellow_status);
}
//check if it is green led's turn
if (current_millis-led_green_previous_millis >= led_green_interval)
{
// update green red's time
led_green_previous_millis = current_millis;
//LOW --> HIGH or
//High --> LOW
if(led_green_status == LOW)
led_green_status= HIGH;
else
led_green_status= LOW;
// control the green led
digitalWrite(led_green, led_green_status);
}
}