Devices & Components
Arduino Uno Rev3
Breadboard - 830 contacts
Mini 5V Traffic Light LED Display Module for Arduino Red Yellow Green 5mm LED RG
TM1637 4 digit display
Jumper Wire
Hardware & Tools
Arduino USB Cable
Software & Tools
Mac OSX
Arduino IDE
Project description
Code
UK-Style 3-Way Traffic Light Simulation with Countdown Display
1#include <TM1637Display.h> 2 3// ---- Display ---- 4#define CLK 8 5#define DIO 9 6TM1637Display display(CLK, DIO); 7 8// ---- Light Pins ---- 9// Traffic Light A 10#define A_RED 2 11#define A_YEL 3 12#define A_GRN 4 13// Traffic Light B 14#define B_RED 5 15#define B_YEL 6 16#define B_GRN 7 17// Traffic Light C 18#define C_RED 10 19#define C_YEL 11 20#define C_GRN 12 21 22// ---- Timing ---- 23const int greenTime = 5; // seconds green is on 24const int amberTime = 3; // seconds for amber light 25const int redAmberTime = 2; // seconds for red+amber before green 26bool spinDirection = true; // toggle animation direction 27 28void setup() { 29 pinMode(A_RED, OUTPUT); 30 pinMode(A_YEL, OUTPUT); 31 pinMode(A_GRN, OUTPUT); 32 pinMode(B_RED, OUTPUT); 33 pinMode(B_YEL, OUTPUT); 34 pinMode(B_GRN, OUTPUT); 35 pinMode(C_RED, OUTPUT); 36 pinMode(C_YEL, OUTPUT); 37 pinMode(C_GRN, OUTPUT); 38 39 display.setBrightness(7); 40 allRed(); 41 delay(1000); 42} 43 44void loop() { 45 runLight(1, A_RED, A_YEL, A_GRN); 46 runLight(2, B_RED, B_YEL, B_GRN); 47 runLight(3, C_RED, C_YEL, C_GRN); 48} 49 50// ---- Sequence for one light ---- 51void runLight(int lightNum, int redPin, int yelPin, int grnPin) { 52 // ---- All lights start red ---- 53 allRed(); 54 55 // ---- Red + Amber (prepare) ---- 56 digitalWrite(redPin, HIGH); 57 digitalWrite(yelPin, HIGH); 58 digitalWrite(grnPin, LOW); 59 countdown(lightNum, redAmberTime); 60 61 // ---- Green ---- 62 allRed(); 63 digitalWrite(redPin, LOW); 64 digitalWrite(yelPin, LOW); 65 digitalWrite(grnPin, HIGH); 66 countdown(lightNum, greenTime); 67 68 // ---- Amber ---- 69 allRed(); 70 digitalWrite(redPin, LOW); 71 digitalWrite(yelPin, HIGH); 72 digitalWrite(grnPin, LOW); 73 changeover(); 74 75 // ---- Back to Red ---- 76 allRed(); 77 78 // ---- Both red + animation ---- 79 spinRing(spinDirection); 80 spinDirection = !spinDirection; 81} 82 83// ---- Countdown Display ---- 84void countdown(int lightNum, int seconds) { 85 for (int i = seconds; i > 0; i--) { 86 int displayVal = (lightNum * 100) + i; // e.g. 1:05 = 105 87 display.showNumberDecEx(displayVal, 0b01000000, true); 88 delay(1000); 89 } 90 display.clear(); 91} 92 93// ---- All lights red ---- 94void allRed() { 95 digitalWrite(A_RED, HIGH); 96 digitalWrite(A_YEL, LOW); 97 digitalWrite(A_GRN, LOW); 98 99 digitalWrite(B_RED, HIGH); 100 digitalWrite(B_YEL, LOW); 101 digitalWrite(B_GRN, LOW); 102 103 digitalWrite(C_RED, HIGH); 104 digitalWrite(C_YEL, LOW); 105 digitalWrite(C_GRN, LOW); 106} 107 108// ---- Amber wave animation ---- 109void changeover() { 110 uint8_t segmentOrder[] = { SEG_A, SEG_F, SEG_G, SEG_C, SEG_D, SEG_E, SEG_B }; 111 int segmentCount = sizeof(segmentOrder) / sizeof(segmentOrder[0]); 112 unsigned long endTime = millis() + (amberTime * 1000UL); 113 114 while (millis() < endTime) { 115 for (int step = 0; step < segmentCount; step++) { 116 uint8_t segs[4]; 117 for (int d = 0; d < 4; d++) { 118 int segIndex = (step - d + segmentCount) % segmentCount; 119 segs[d] = segmentOrder[segIndex]; 120 } 121 display.setSegments(segs); 122 delay(120); 123 } 124 } 125 display.clear(); 126} 127 128// ---- 500ms alternating chase ring ---- 129void spinRing(bool clockwise) { 130 uint8_t orderCW[] = { SEG_A, SEG_B, SEG_C, SEG_D, SEG_E, SEG_F, SEG_G }; 131 uint8_t orderCCW[] = { SEG_A, SEG_F, SEG_E, SEG_D, SEG_C, SEG_B, SEG_G }; 132 uint8_t* order = clockwise ? orderCW : orderCCW; 133 134 unsigned long start = millis(); 135 while (millis() - start < 500) { 136 for (int i = 0; i < 7; i++) { 137 uint8_t segs[4]; 138 for (int d = 0; d < 4; d++) { 139 int segIndex = (i + d) % 7; 140 segs[d] = order[segIndex]; 141 } 142 display.setSegments(segs); 143 delay(60); 144 } 145 } 146 display.clear(); 147}
Downloadable files
INO file for Arduino IDE
This is the file containing the code.
file.None
Comments
Only logged in users can leave comments