#include "car_traffic_light.h"
#include "pedistrian_traffic_light.h"
#include "biker_traffic_light.h"
#include "constants.h"
bool lock = false;
void setup() {
Serial.begin(115200) ;
Serial.println(" starting . . .") ;
pinMode(button_ped_Pin, INPUT_PULLUP);
pinMode(button_bike_Pin, INPUT_PULLUP);
pinMode(CAR_RED_PIN, OUTPUT);
pinMode(CAR_YELLOW_PIN, OUTPUT);
pinMode(CAR_GREEN_PIN, OUTPUT);
pinMode(PED_RED_PIN, OUTPUT);
pinMode(PED_GREEN_PIN, OUTPUT);
pinMode(BIKE_RED_PIN, OUTPUT);
pinMode(BIKE_GREEN_PIN, OUTPUT);
// pedestrian cycle starts on Stop (RED)
digitalWrite(PED_RED_PIN, HIGH); //!!
digitalWrite(PED_GREEN_PIN, LOW); //!!
// car cycle starts on Stop (RED)
digitalWrite(CAR_GREEN_PIN, LOW);
digitalWrite(CAR_YELLOW_PIN, LOW);
digitalWrite(CAR_RED_PIN, HIGH);
digitalWrite(BIKE_GREEN_PIN, LOW);
digitalWrite(BIKE_RED_PIN, HIGH);
pinMode( Dark_Light_switch, INPUT_PULLUP);
}
void setAllLightsOff() {
digitalWrite(CAR_GREEN_PIN, LOW);
digitalWrite(CAR_YELLOW_PIN, LOW);
digitalWrite(CAR_RED_PIN, LOW);
digitalWrite(PED_GREEN_PIN, LOW);
digitalWrite(PED_RED_PIN, LOW);
digitalWrite(BIKE_GREEN_PIN, LOW);
digitalWrite(BIKE_RED_PIN, LOW);
};
void loop()
{
enum class Mode { UNSET, DAY, NIGHT } ;
Mode mode;
static Mode oldMode = Mode::UNSET;
bool light = digitalRead(Dark_Light_switch) ;
if (light == 0) {
mode = Mode::DAY;
} else {
mode = Mode::NIGHT;
}
if (oldMode == Mode::UNSET || mode != oldMode ) {
oldMode = mode;
if ( mode == Mode::DAY ) {
setAllLightsOff();
carState = CarState::PREPARE_STOP;
pedistrianState = PedistrianState::PREPARE_STOP;
bikeState = BikeState::PREPARE_STOP;
lock = false;
}
else {
setAllLightsOff();
}
delay( 50 ) ; // crude debounce only on switch change
}
if ( mode == Mode::DAY ) {
carFSM();
pedistrianStateFSM();
bikeStateFSM();
}
else {
digitalWrite(CAR_YELLOW_PIN, millis() % 1024 > 500 ? HIGH : LOW);
digitalWrite(BIKE_RED_PIN, millis() % 1024 > 500 ? HIGH : LOW);
digitalWrite(PED_RED_PIN, millis() % 1024 > 500 ? HIGH : LOW);
}
}
Car traffic light
bike traffic light
Pedistrian traffic light