#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
byte heart[] = {
0x00,
0x0A,
0x1F,
0x0E,
0x04,
0x00,
0x00
};
byte smile[] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b10001,
0b01110,
0b00000,
0b00000
};
int COUNT;
int red = 13;//red light pin
int orange = 3; //orange light pin
int green = 2; // green light pin
int buzz = 5;
//tone(buzz,3000,300);
//noTone(buzz);
int MS = 4; //motion sensor pin
int DT = 3000; //time delay
int value = 0; // the value og motion sensor
int a=8,b=9,c=10,d=11,e=12,f=7,g=6; // seven segment pins
void setup() {
// put your setup code here, to run once:
pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT);
pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT);
pinMode(g, OUTPUT); // seven segment
pinMode(red, OUTPUT); pinMode(orange, OUTPUT); pinMode(green, OUTPUT);//led ligh
pinMode(MS, INPUT);//motion sensor
lcd.init();
lcd.backlight();
lcd.clear();
lcd.createChar(1,smile);
lcd.setCursor(2,0);
lcd.write(1);
lcd.print(" HELLO DRIVER ");
lcd.write(1);
Serial.begin(9600);
}
void loop() {
// timer(5);
// put your main code here, to run repeatedly:
Red_light();
delay(DT/6);
Yellow_light();
delay(DT/6);
Green_light();
delay(DT/6);
}
void Red_light()
{
RT();// Red Text
digitalWrite(red,HIGH);
delay(DT);
digitalWrite(red,LOW);
for ( int i = 0;i < 5; i++){
digitalWrite(red,HIGH);
delay(DT/10);
digitalWrite(red,LOW);
delay(DT/10);
}
value == digitalRead(MS);
if (value == HIGH) {
tone(buzz,3000,300);
}
else {
noTone(buzz);
}
}
void Yellow_light()
{ YT();// Yellow Text
digitalWrite(orange,HIGH);
delay(DT);
digitalWrite(orange,LOW);
for ( int i = 0;i < 5; i++){
digitalWrite(orange,HIGH);
delay(DT/10);
digitalWrite(orange,LOW);
delay(DT/10);
}
}
void Green_light()
{
GT();// Green Text
digitalWrite(green,HIGH);
delay(DT);
digitalWrite(green,LOW);
for (int i = 0; i < 5; i++){
digitalWrite(green,HIGH);
delay(DT/10);
digitalWrite(green,LOW);
delay(DT/10);
}
}
void RT() // Red text
{
lcd.createChar(2,heart);
lcd.setCursor(2,2);
lcd.write(2);
lcd.print(" PLEASE STOP ");
lcd.write(2);
}
void YT()// Yellow Text
{
lcd.createChar(2,heart);
lcd.setCursor(2,2);
lcd.write(2);
lcd.print(" PLEASE WAIT ");
lcd.write(2);
}
void GT()// Green Text
{
lcd.createChar(2,heart);
lcd.setCursor(2,2);
lcd.write(2);
lcd.print(" DRIVE SAFE ");
lcd.write(1);
}
void timer(int nu)
{
for(COUNT=nu;COUNT>=0;COUNT--)
{
Serial.begin(9600);
Serial.println(COUNT);
switch (COUNT)
{
case 0://when count value is zero show”0” on disp
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
analogWrite(g, 1);;
delay(1000);
break;
case 1:// when count value is 1 show”1” on disp
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
analogWrite(g, 1);
delay(1000);
break;
case 2:// when count value is 2 show”2” on disp
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
analogWrite(g, 0);
delay(1000);
break;
case 3:// when count value is 3 show”3” on disp
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
analogWrite(g, 0);
delay(1000);
break;
case 4:// when count value is 4 show”4” on disp
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
analogWrite(g, 0);
delay(1000);
break;
case 5:// when count value is 5 show”5” on disp
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c,LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
analogWrite(g, 0);
delay(1000);
break;
}
}
}