#include <LiquidCrystal.h>
#define POTPIN A0
const int ledPin = 13;
const int rs = 12;
const int buzzer = 11;
const int echoPin = 10;
const int trigPin = 9;
const int en = 6;
const int d4 = 5;
const int d5 = 4;
const int d6 = 3;
const int d7 = 2;
float duration, distance;
int data, speed;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
byte Heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
byte Skull[8] = {
0b00000,
0b01110,
0b10101,
0b11011,
0b01110,
0b01110,
0b00000,
0b00000
};
void zone1() // Safe zone
{
lcd.clear();
noTone(buzzer);
digitalWrite(ledPin, LOW);
}
void zone2() // You're going to crash if you don't slow down zone.
{
noTone(buzzer);
digitalWrite(ledPin, HIGH);
lcd.clear();
lcd.print("STOP! You are");
lcd.setCursor(0,1);
lcd.print("going to crash!");
}
void zone3() // You REALLY have to slow down zone.
{
digitalWrite(ledPin, HIGH);
tone(buzzer, 1000);
digitalWrite(ledPin, LOW);
}
void zone4() // You crashed
{
lcd.clear();
digitalWrite(ledPin, HIGH);
lcd.print("You crashed");
lcd.setCursor(0,1);
digitalWrite(ledPin, LOW);
lcd.write(byte(1));
lcd.write(byte(2));
}
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, 1000);
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
data = analogRead(POTPIN);
speed = map(data, 0, 1023, 0, 130);
duration = pulseIn(echoPin, HIGH);
distance = (duration*.0343)/2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.print("\nSpeed: ");
Serial.print(speed);
Serial.print("\n");
if (speed >= 25) // Freeway (25-65)
{
if (distance > 227.5)
{
zone1();
}
if (distance <= 227.5 && distance >= 56.875)
{
zone2();
}
if (distance <= 113.75)
{
zone3();
}
if (distance < 56.875 && distance > 0)
{
zone4();
}
}
if (speed >= 0 && speed < 25) // business district or residential street (0-25 mph)
{
if (distance > 132.5)
{
zone1();
}
if (distance <= 132.5 && distance >= 33.125)
{
zone2();
}
if (distance <= 66.2)
{
zone3();
}
if (distance < 33.125 && distance > 0)
{
zone4();
}
}
delay(100);
}