#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int btn1 = A0;
int redLED = 7;
int orLED = 8;
int gnLED = 9;
int btnState = 0;
void setup() {
lcd.begin(16, 2);
lcd.clear();
pinMode(btn1,INPUT_PULLUP);
pinMode(redLED,OUTPUT);
pinMode(orLED, OUTPUT);
pinMode(gnLED,OUTPUT);
digitalWrite(redLED,HIGH);
digitalWrite(orLED,LOW);
digitalWrite(gnLED,LOW);
// Set initial startup state
noCross();
}
void loop() {
btnState = digitalRead(btn1);
if(btnState == LOW){
goCrossing();
noCross();
}
delay(50);
}
void goCrossing(){
digitalWrite(redLED,LOW);
digitalWrite(gnLED,HIGH);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("CROSS NOW...");
digitalWrite(gnLED,LOW);
digitalWrite(orLED,HIGH);
byte z = 9;
for(byte i = 1; i <= 9; i++){
// Send a countdown to the LCD
lcd.setCursor(7,1);
lcd.print(z);
z--;
delay(1000);
}
// --- Flash the orange as a warning
lcd.clear();
lcd.setCursor(2,0);
lcd.print("HURRY UP...");
// Set c & i to the number of seconds to show warning
byte c = 5;
for(byte i = 0; i <= 5; i++){
// Send a countdown to the LCD
lcd.setCursor(7,1);
lcd.print(c);
c--;
digitalWrite(orLED,HIGH);
delay(500);
digitalWrite(orLED,LOW);
delay(500);
}
return;
}
void noCross(){
digitalWrite(redLED,HIGH);
digitalWrite(gnLED,LOW);
digitalWrite(orLED,LOW);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("DON'T CROSS!");
return;
}