// traffic light controller // outputs for traffic lights of lane 1 #define red_1 3 #define yellow_1 2 #define green_1 1 // timing definitions in seconds // green time for lane 1 #define GT_1 30 // yellow to green time, same for both lanes #define G 30 #define Y 10 #define R 20 #define OFF HIGH #define ON LOW int state = 0; int nexttime; void setup() { pinMode(red_1,OUTPUT); pinMode(yellow_1,OUTPUT); pinMode(green_1,OUTPUT); nexttime = 1; } void loop() { delay(nexttime*1000); switch (state) { case 0 : // inactive state, all off SetLights(OFF,OFF,OFF); // start after WRT+5 (walkers must be gone) nexttime = 3; state = 1; break; case 1 : // red SetLights(ON,OFF,OFF); // goon after yellow to green time nexttime = R; state = 2; break; case 2 : // green // switch walker lights to green SetLights(OFF,OFF,ON); // wait for green time 1 minus time to switch // walkers light to red nexttime = G; state = 3; break; case 3 : // yellow SetLights(OFF,ON,OFF); // wait for walkers to leave the street nexttime = Y; state = 1; break; } } void SetLights( int sR, int sY, int sG) { digitalWrite(red_1,sR); digitalWrite(yellow_1,sY); digitalWrite(green_1,sG); }