#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
uint8_t LED[6]={A0,A1,A2,A3,2,3};
Servo myservo1;
Servo myservo2;
int pos = 0;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
for(int i=0;i<6;i++){
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i],LOW);
}
myservo1.attach(4);
myservo2.attach(5);
myservo1.write(0);
myservo2.write(0);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("==ZEBRA CROSS ==");
lcd.setCursor(0,1);
lcd.print("SYSTEM BOOTING..");
}
void loop() {
/////////////STATE1////////////////
lcd.setCursor(0,0);
lcd.print("**ZEBRA CROSS**");
lcd.setCursor(0,1);
lcd.print("==>SLOW DOWN <==");
myservo1.write(90);
myservo2.write(0);
digitalWrite(LED[0],LOW);
digitalWrite(LED[1],LOW);
digitalWrite(LED[2],HIGH);
digitalWrite(LED[3],HIGH);
digitalWrite(LED[4],LOW);
digitalWrite(LED[5],LOW);
if(digitalRead(6)==LOW || digitalRead(7)==LOW){
digitalWrite(LED[0],LOW);
digitalWrite(LED[1],HIGH);
digitalWrite(LED[2],LOW);
digitalWrite(LED[3],LOW);
digitalWrite(LED[4],HIGH);
digitalWrite(LED[5],LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("==TIME LEFT==");
for(uint8_t i=10; i>0;i--){
lcd.setCursor(0,1);
lcd.print("===> seconds <===");
lcd.setCursor(4,1);
lcd.print(i);
delay(1000);
}
myservo1.write(0);
myservo2.write(90);
digitalWrite(LED[0],HIGH);
digitalWrite(LED[1],LOW);
digitalWrite(LED[2],LOW);
digitalWrite(LED[3],LOW);
digitalWrite(LED[4],LOW);
digitalWrite(LED[5],HIGH);
lcd.setCursor(0,0);
lcd.print("== STOP FOR ==");
for(uint8_t i=20; i>0;i--){
lcd.setCursor(0,1);
lcd.print("==> seconds <==");
lcd.setCursor(3,1);
lcd.print(i);
blinkSound(i);
}
lcd.clear();
}
}
void blinkSound(uint8_t num)
{
if(num>10){
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(500); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(500);
}
if(num<=10 && num>5){
for(uint8_t j=5;j>0;j--)
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(100);
}
}
if(num<=5 && num>0){
for(uint8_t j=10;j>0;j--)
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(50); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(50);
}
}
}