#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LCDs
LiquidCrystal_I2C lcd1(0x27, 16, 2);
// LEDs
const int redLED = 2;
const int yellowLED = 3;
const int greenLED = 4;
const int pedRedLED = 5;
const int pedGreenLED = 6;
const int pirPin = 7;
// Push button
const int pushButton = 8; // Connect push button to this pin
bool buttonPressedBefore = false;
bool pirState = digitalRead(pirPin);
void setup() {
// Initialize the LCDs and the LEDs
lcd1.init();
lcd1.backlight();
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(pedRedLED, OUTPUT);
pinMode(pedGreenLED, OUTPUT);
pinMode(pushButton, INPUT);
pinMode(pirPin, INPUT);
// Initial state
digitalWrite(pedRedLED, HIGH); // Red LED initially on
digitalWrite(pedGreenLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
lcd1.setCursor(5, 0);
lcd1.print("Car Go!");
}
void loop() {
digitalWrite(pedRedLED, HIGH);
digitalWrite(pedGreenLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
lcd1.setCursor(5, 0);
lcd1.print("Car Go!");
// Check if the push button is pressed
if (digitalRead(pushButton) == HIGH || pirState == HIGH) {
// Push button pressed
buttonPressedBefore = true;
delay(3000);
lcd1.setCursor(1, 0);
lcd1.print("Ready to stop");
delay(3000);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
delay(3000);
lcd1.setCursor(5, 0);
lcd1.print("STOP");
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print(" Pedestrian Walk");
digitalWrite(pedGreenLED, HIGH);
digitalWrite(pedRedLED, LOW);
delay (10000);
digitalWrite(pedRedLED, HIGH);
digitalWrite(pedGreenLED, LOW);
lcd1.clear();
} else if (digitalRead(pushButton) == LOW) {
buttonPressedBefore = false;
}
}