/*
* Multiple LED Patterns - Traffic Light System
* Features: Standard Traffic Light, Pedestrian Crossing, Emergency Mode, Night Mode
* Control: Push button to cycle through different modes
*/
// LED Pin Definitions
const int redLED = 13; // Red LED
const int yellowLED = 12; // Yellow LED
const int greenLED = 11; // Green LED
// Pedestrian LEDs (optional)
const int pedRedLED = 10; // Pedestrian Red
const int pedGreenLED = 9; // Pedestrian Green
// Button Pin
const int buttonPin = 2; // Mode change button
// Variables
int mode = 0; // Current mode (0-4)
int lastButtonState = HIGH; // Previous button state
int buttonState; // Current button state
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
// Initialize LED pins as outputs
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(pedRedLED, OUTPUT);
pinMode(pedGreenLED, OUTPUT);
// Initialize button pin as input with pullup
pinMode(buttonPin, INPUT_PULLUP);
// Initialize serial communication
Serial.begin(9600);
Serial.println("=================================");
Serial.println("Traffic Light System Started");
Serial.println("=================================");
Serial.println("Press button to change modes:");
Serial.println("Mode 0: Standard Traffic Light");
Serial.println("Mode 1: Pedestrian Crossing");
Serial.println("Mode 2: Emergency/Blinking");
Serial.println("Mode 3: Night Mode");
Serial.println("Mode 4: All Patterns Demo");
Serial.println("=================================\n");
// Turn off all LEDs initially
allOff();
}
void loop() {
// Read button with debouncing
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
// Button pressed (LOW because of INPUT_PULLUP)
if (buttonState == LOW) {
mode++;
if (mode > 4) mode = 0;
Serial.print("\n>>> Mode Changed to: ");
Serial.println(mode);
printModeDescription(mode);
allOff();
delay(500); // Brief pause when changing modes
}
}
}
lastButtonState = reading;
// Execute current mode
switch(mode) {
case 0:
standardTrafficLight();
break;
case 1:
pedestrianCrossing();
break;
case 2:
emergencyMode();
break;
case 3:
nightMode();
break;
case 4:
allPatternsDemo();
break;
}
}
// ============================================
// MODE 0: Standard Traffic Light Sequence
// ============================================
void standardTrafficLight() {
// Green Light - GO
Serial.println("GREEN - GO");
digitalWrite(greenLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(pedRedLED, HIGH); // Pedestrians STOP
digitalWrite(pedGreenLED, LOW);
delay(5000); // Green for 5 seconds
// Yellow Light - CAUTION
Serial.println("YELLOW - CAUTION");
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(redLED, LOW);
delay(2000); // Yellow for 2 seconds
// Red Light - STOP
Serial.println("RED - STOP");
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, HIGH);
delay(5000); // Red for 5 seconds
Serial.println("---");
}
// ============================================
// MODE 1: Pedestrian Crossing System
// ============================================
void pedestrianCrossing() {
// Vehicles GO, Pedestrians STOP
Serial.println("Vehicles: GREEN | Pedestrians: STOP");
digitalWrite(greenLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(pedRedLED, HIGH);
digitalWrite(pedGreenLED, LOW);
delay(4000);
// Transition - Yellow
Serial.println("Vehicles: YELLOW | Pedestrians: WAIT");
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, HIGH);
delay(2000);
// Vehicles STOP, Pedestrians GO
Serial.println("Vehicles: RED | Pedestrians: WALK");
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, HIGH);
digitalWrite(pedRedLED, LOW);
digitalWrite(pedGreenLED, HIGH);
delay(5000);
// Pedestrian warning - blinking green
Serial.println("Pedestrians: FINISH CROSSING (blinking)");
for(int i = 0; i < 5; i++) {
digitalWrite(pedGreenLED, LOW);
delay(300);
digitalWrite(pedGreenLED, HIGH);
delay(300);
}
digitalWrite(pedGreenLED, LOW);
digitalWrite(pedRedLED, HIGH);
Serial.println("---");
}
// ============================================
// MODE 2: Emergency/Blinking Mode
// ============================================
void emergencyMode() {
Serial.println("EMERGENCY MODE - All Red Blinking");
// Blink all red LEDs
for(int i = 0; i < 3; i++) {
digitalWrite(redLED, HIGH);
digitalWrite(pedRedLED, HIGH);
delay(500);
digitalWrite(redLED, LOW);
digitalWrite(pedRedLED, LOW);
delay(500);
}
Serial.println("---");
}
// ============================================
// MODE 3: Night Mode (Blinking Yellow)
// ============================================
void nightMode() {
Serial.println("NIGHT MODE - Blinking Yellow");
// Blink yellow LED
digitalWrite(yellowLED, HIGH);
delay(1000);
digitalWrite(yellowLED, LOW);
delay(1000);
}
// ============================================
// MODE 4: All Patterns Demo
// ============================================
void allPatternsDemo() {
Serial.println("\n=== DEMO MODE ===");
// Pattern 1: Sequential
Serial.println("Pattern: Sequential");
for(int i = 0; i < 2; i++) {
digitalWrite(redLED, HIGH);
delay(500);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
delay(500);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
delay(500);
digitalWrite(greenLED, LOW);
}
// Pattern 2: All Blink Together
Serial.println("Pattern: All Blink");
for(int i = 0; i < 3; i++) {
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, HIGH);
digitalWrite(pedRedLED, HIGH);
digitalWrite(pedGreenLED, HIGH);
delay(500);
allOff();
delay(500);
}
// Pattern 3: Chase Effect
Serial.println("Pattern: Chase");
for(int i = 0; i < 2; i++) {
digitalWrite(greenLED, HIGH);
delay(200);
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, HIGH);
delay(200);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, HIGH);
delay(200);
digitalWrite(redLED, LOW);
digitalWrite(pedGreenLED, HIGH);
delay(200);
digitalWrite(pedGreenLED, LOW);
digitalWrite(pedRedLED, HIGH);
delay(200);
digitalWrite(pedRedLED, LOW);
}
// Pattern 4: Alternating
Serial.println("Pattern: Alternating");
for(int i = 0; i < 3; i++) {
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, HIGH);
digitalWrite(pedRedLED, HIGH);
delay(500);
digitalWrite(redLED, LOW);
digitalWrite(greenLED, LOW);
digitalWrite(pedRedLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(pedGreenLED, HIGH);
delay(500);
digitalWrite(yellowLED, LOW);
digitalWrite(pedGreenLED, LOW);
}
Serial.println("=== END DEMO ===\n");
}
// ============================================
// Helper Functions
// ============================================
void allOff() {
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
digitalWrite(pedRedLED, LOW);
digitalWrite(pedGreenLED, LOW);
}
void printModeDescription(int m) {
Serial.print("Active Mode: ");
switch(m) {
case 0:
Serial.println("Standard Traffic Light");
break;
case 1:
Serial.println("Pedestrian Crossing");
break;
case 2:
Serial.println("Emergency/Blinking");
break;
case 3:
Serial.println("Night Mode");
break;
case 4:
Serial.println("All Patterns Demo");
break;
}
Serial.println();
}
Comments
Post a Comment