i did a traffic light project out of a book and have adapted it for pedestrian lights as well but have problems with the lights sequence changing when i add my bit.
byte red_led = 6;
byte yellow_led = 5;
byte green_led = 4;
byte switch_pin = 2;
byte pedestrian_red = 8;
byte pedestrian_green = 7;
unsigned long red_start_time = 0;
unsigned long red_duration = 5000;
unsigned long yellow_start_time = 0;
unsigned long yellow_duration = 3000;
unsigned long green_start_time = 0;
unsigned long green_duration = 5000;
unsigned long current_time = 0;
unsigned long both_start_time = 0;
unsigned long both_duration = 3000;
unsigned long pedestrian_green_start = 0;
unsigned long pedestrian_green_duration = 250;
int button = 0;
void setup()
{
pinMode (red_led, OUTPUT);
pinMode (yellow_led, OUTPUT);
pinMode (green_led, OUTPUT);
pinMode (switch_pin, INPUT);
pinMode (pedestrian_red, OUTPUT);
pinMode (pedestrian_green, OUTPUT);
digitalWrite (switch_pin, LOW);
current_time = millis();
}
void loop()
{
[u][i][i] if (button == 1);
{
digitalWrite (yellow_led, HIGH);
digitalWrite (green_led, LOW);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
yellow_start_time = current_time;
while ((current_time - yellow_start_time) <= yellow_duration)
{
current_time = millis();
}
digitalWrite (yellow_led, LOW);
digitalWrite (green_led, LOW);
digitalWrite (red_led, HIGH);
digitalWrite (pedestrian_red, LOW);
digitalWrite (pedestrian_green, HIGH);
red_start_time = current_time;
pedestrian_green_start = current_time;
while ((current_time - red_start_time) <= red_duration)
{
current_time = millis();
}
digitalWrite (yellow_led, HIGH);
digitalWrite (green_led, LOW);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, LOW);
digitalWrite (pedestrian_green, HIGH);
yellow_start_time = current_time;
while ((current_time - yellow_start_time) <= yellow_duration)
{
current_time = millis();
while ((current_time - pedestrian_green_start) <= pedestrian_green_duration)
{
current_time = millis();
}
if (pedestrian_green == HIGH)
{
pedestrian_green = LOW;
yellow_led = LOW;
}
else
{
pedestrian_green = HIGH;
yellow_led = HIGH;
}
button = 0;
}
}
[/i][/i][/u]
digitalWrite (yellow_led, HIGH);
digitalWrite (green_led, LOW);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
yellow_start_time = current_time;
while ((current_time - yellow_start_time) <= yellow_duration)
{
current_time = millis();
}
digitalWrite (yellow_led, LOW);
digitalWrite (green_led, LOW);
digitalWrite (red_led, HIGH);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
red_start_time = current_time;
while ((current_time - red_start_time) <= red_duration)
{
current_time = millis();
}
digitalWrite (yellow_led, HIGH);
digitalWrite (green_led, LOW);
digitalWrite (red_led, HIGH);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
both_start_time = current_time;
while ((current_time - both_start_time) <= both_duration)
{
current_time = millis();
}
digitalWrite (yellow_led, LOW);
digitalWrite (green_led, HIGH);
digitalWrite (red_led, LOW);
digitalWrite (pedestrian_red, HIGH);
digitalWrite (pedestrian_green, LOW);
green_start_time = current_time;
while ((current_time - green_start_time) <= green_duration)
{
current_time = millis();
if (digitalRead (switch_pin) == HIGH)
{
button = 1;
break;
}
}
}
the underlined bit is my code.
i also have problems with the pedestrian light not lighting but i think this is due to miswiring.