Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Road intersection with traffic lights and pedestrian crossing lights. Uses 2 shift registers to control
- traffic lights and pedestrian crossing lights
- This sketch was created by Gary Granai , July,2021. www.steamtrainfo.com
- Yoy are free to use and modify this sketch as long as everything in this comment
- section remains intact and unchanged.
- Traffic lights are on shift register 1 and the pedestrian crossing lights are on shift register 2
- Main road, crossing road and pedestrian crossing LEDs are each on their own resistor boards.
- You may choose the number and type lights you put on the intersection. For details and documentation see https://steamtraininfo.com/arduino-projects/traffic-signals
- */
- /*
- Shift register pin connections
- Shift Register 1 Controls Traffic Lights
- Q0 Main Road Red Q1 Main Road Yellow Q2 Main Road Green
- Q3 Crossing Road Red Q4 Crossing Road Yellow
- Q5 Crossing Road Green
- Shift Register 2 Controls Pedestrian Crossing Lights
- Q0 Main Road Pedestrian Red Q1 Main Road Pedestrian Green
- Q2 Crossing Road Pedestrian Red Q3 Crossing Road Pedestrian Green */
- //Change these delays to change the timing of your traffic flow.
- #define redDelay 5000
- #define yellowDelay 450
- #define maingreenDelay 7000
- #define crossinggreenDelay 5000
- #define redyellowDelay 350
- //Pin connected to DS of 74HC595
- #define dataPin 10
- //Pin connected to ST_CP of 74HC595
- #define latchPin 11
- //Pin connected to SH_CP of 74HC595
- #define clockPin 12
- //***************************************************
- void setup() {
- //set pins to output so you can control the shift register
- pinMode(latchPin, OUTPUT);
- pinMode(clockPin, OUTPUT);
- pinMode(dataPin, OUTPUT);
- Serial.begin(9600);
- }
- //************************************************
- void loop() {
- //Main road traffic flow, cross road traffic stopped
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00001001);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00001100);
- digitalWrite(latchPin, HIGH);
- delay(maingreenDelay);
- //*********************************************
- //pedesrian lights flash warning
- /*begin for function. This flashes 8 times. Change
- that and the delay to fit your intersection.*/
- for(int i = 0; i < 7; i++){
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00001001);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00001110);
- digitalWrite(latchPin, HIGH);
- delay(yellowDelay);
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00000001);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00001110);
- digitalWrite(latchPin, HIGH);
- delay(yellowDelay);
- }
- //end for function
- //************************************************
- //all traffic stopped
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00000101);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00001001);
- digitalWrite(latchPin, HIGH);
- delay(redDelay);
- //************************************************
- //Change active lanes. Traffic starts on crossing road
- //red yellow flash
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00000101);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00011001);
- digitalWrite(latchPin, HIGH);
- delay(redyellowDelay);
- //Pedestrian lights
- digitalWrite(latchPin, LOW);
- shiftOut(dataPin, clockPin, MSBFIRST, B00000110);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00100001);
- digitalWrite(latchPin, HIGH);
- delay(crossinggreenDelay);
- //******************************************************
- //pedesrian lights flash warning
- /*begin for function. This flashes 8 times. Change
- that and the delay to fit your intersection.*/
- for(int i = 0; i < 7; i++){
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00000110);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00110001);
- digitalWrite(latchPin, HIGH);
- delay(yellowDelay);
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00000100);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00110001);
- digitalWrite(latchPin, HIGH);
- delay(yellowDelay);
- } //end for function
- //************************************************
- //all traffic stopped
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00000101);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00001001);
- digitalWrite(latchPin, HIGH);
- delay(crossinggreenDelay);
- digitalWrite(latchPin, LOW);
- //Pedestrian lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00000101);
- //Traffic lights
- shiftOut(dataPin, clockPin, MSBFIRST, B00001011);
- digitalWrite(latchPin, HIGH);
- delay(redyellowDelay);
- }
- //*****************************************************
- /*The active traffic lane will now change as program loops
- to beginning.*/
Add Comment
Please, Sign In to add comment