// STM32F103C8T6 Pelican Crossing (Fast Test Version)
#define CAR_GREEN PA0
#define CAR_YELLOW PA1
#define CAR_RED PA2
#define PED_GREEN PA3
#define PED_RED PA4
#define BUTTON PB0
void setup()
{
pinMode(CAR_GREEN, OUTPUT);
pinMode(CAR_YELLOW, OUTPUT);
pinMode(CAR_RED, OUTPUT);
pinMode(PED_GREEN, OUTPUT);
pinMode(PED_RED, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
// Initial state
digitalWrite(CAR_GREEN, HIGH);
digitalWrite(CAR_YELLOW, LOW);
digitalWrite(CAR_RED, LOW);
digitalWrite(PED_GREEN, LOW);
digitalWrite(PED_RED, HIGH);
}
void loop()
{
if(digitalRead(BUTTON) == LOW)
{
delay(20); // debounce
if(digitalRead(BUTTON) == LOW)
{
// Car green OFF, yellow ON
digitalWrite(CAR_GREEN, LOW);
digitalWrite(CAR_YELLOW, HIGH);
delay(1000);
// Car red ON
digitalWrite(CAR_YELLOW, LOW);
digitalWrite(CAR_RED, HIGH);
delay(500);
// Pedestrian crossing
digitalWrite(PED_RED, LOW);
digitalWrite(PED_GREEN, HIGH);
delay(3000);
// Flash pedestrian green
for(int i = 0; i < 3; i++)
{
digitalWrite(PED_GREEN, LOW);
delay(300);
digitalWrite(PED_GREEN, HIGH);
delay(300);
}
// Pedestrian stop
digitalWrite(PED_GREEN, LOW);
digitalWrite(PED_RED, HIGH);
delay(500);
// Cars go
digitalWrite(CAR_RED, LOW);
digitalWrite(CAR_GREEN, HIGH);
// Wait for button release
while(digitalRead(BUTTON) == LOW);
delay(100);
}
}
}