// === Shauna Samms ====
// Module #6 project
// setup to use LCD
#include <LiquidCrystal_I2C.h> // lcd
LiquidCrystal_I2C lcd(0x27, 16, 2);
// North South LEDs pin configuration
const int red_LED1 = 14; // Red LED1 wired to ESP32 GPIO14
const int yellow_LED1 = 12; // Yellow LED1 wired to ESP32 GPIO12
const int green_LED1 = 13; // Green LED1 wired to ESP32 GPIO13
// East West LEDs pin configuration
const int red_LED2 = 25; // Red LED2 wired to ESP32 GPIO25
const int yellow_LED2 = 26; // Yellow LED2 wired to ESP32 GPIO26
const int green_LED2 = 27; // Green LED2 wired to ESP32 GPIO27
// setup crosswalk value and button variables
const int Xw_button = 19; // Cross Walk button
bool Xw_value = false; // flag
// setup buzzer pin assignment
const int bzr = 32; // GPIO32 to connect the Buzzer
// Define what happens when interrupt is activated
void IRAM_ATTR crosswalkB()
{ // Cross Walk button interrupt handler
Xw_value = true;
}
// the setup function runs once when you press reset or power the board
void setup()
{
// setup crosswalk button as input and attach the Interrupt
pinMode(Xw_button, INPUT_PULLUP); // 0=pressed, 1=unpressed button
attachInterrupt(digitalPinToInterrupt(Xw_button), crosswalkB, RISING);
// setup serial speed
Serial.begin(115200);
// LCD setup
lcd.init(); // initialize the lcd
lcd.backlight(); // turn on backlight
lcd.setCursor(0, 0);
lcd.print(" === CEIS114 ===");
// buzzer set to output
pinMode(bzr, OUTPUT);
tone(bzr, 0);
// NS pin direction set to output
pinMode(red_LED1, OUTPUT);
pinMode(yellow_LED1, OUTPUT);
pinMode(green_LED1, OUTPUT);
// EW pin direction set to output
pinMode(red_LED2, OUTPUT);
pinMode(yellow_LED2, OUTPUT);
pinMode(green_LED2, OUTPUT);
}
// this loop function runs over and over again forever - keeps the main program always running
void loop()
{
// while Crosswalk button pressed
while (Xw_value == true)
{
delay(500);
digitalWrite(yellow_LED1, LOW);
digitalWrite(green_LED1, LOW);
digitalWrite(yellow_LED2, LOW);
digitalWrite(green_LED2, LOW);
for (int i = 10; i > 0; i--)
{
Serial.print(" Count = ");
Serial.print(i);
Serial.println(" == Walk == ");
lcd.setCursor(0, 1);
lcd.print(" == Walk == ");
lcd.print(i);
lcd.print(" = "); // spaces help clear leftovers
digitalWrite(red_LED1, HIGH);
digitalWrite(red_LED2, HIGH);
tone(bzr, 200);
delay(500);
digitalWrite(red_LED1, LOW);
digitalWrite(red_LED2, LOW);
tone(bzr, 250);
delay(500);
}
tone(bzr, 0);
Xw_value = false;
}
// while Crosswalk button is not pressed
while (Xw_value == false)
{
lcd.setCursor(0, 1);
lcd.print("= Do Not Walk = ");
Serial.println(" == Do Not Walk == ");
digitalWrite(red_LED1, HIGH);
digitalWrite(yellow_LED1, LOW);
digitalWrite(green_LED1, LOW);
delay(1000);
digitalWrite(red_LED2, LOW);
digitalWrite(yellow_LED2, LOW);
digitalWrite(green_LED2, HIGH);
delay(1000);
digitalWrite(red_LED2, LOW);
digitalWrite(yellow_LED2, HIGH);
digitalWrite(green_LED2, LOW);
delay(1000);
digitalWrite(red_LED2, HIGH);
digitalWrite(yellow_LED2, LOW);
digitalWrite(green_LED2, LOW);
delay(1000);
digitalWrite(red_LED1, LOW);
digitalWrite(yellow_LED1, LOW);
digitalWrite(green_LED1, HIGH);
delay(1000);
digitalWrite(red_LED1, LOW);
digitalWrite(yellow_LED1, HIGH);
digitalWrite(green_LED1, LOW);
digitalWrite(red_LED2, HIGH);
digitalWrite(yellow_LED2, LOW);
digitalWrite(green_LED2, LOW);
delay(1000);
}
}