#include <Wire.h> // Library for I2C communication
#include <LiquidCrystal_I2C.h> // Library for LCD
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
int tonePin = 4; // Tone pin of buzzer is connected to Digital pin 4
int trigPin = 9; // Trigger pin of HC-SR04 is connected to Digital pin 9
int echoPin = 10; // Echo pin of HC-SR04 is connected to Digital pin 10
int clockPin = 11; // Clock pin of 74HC595 is connected to Digital pin 11
int latchPin = 12; // Latch pin of 74HC595 is connected to Digital pin 12
int dataPin = 13; // Data pin of 74HC595 is connected to Digital pin 13
// Variable to hold the pattern of which LEDs are currently turned on or off
byte possible_patterns[9] = {
B00000000,
B00000001,
B00000011,
B00000111,
B00001111,
B00011111,
B00111111,
B01111111,
B11111111,
};
int proximity=0;
int duration;
int distance;
int distanceInch;
void setup() {
lcd.init();
lcd.backlight();
//Serial Port
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(tonePin, OUTPUT);
// LCD Display upon start up
lcd.setCursor(0,0);
lcd.print(" ULTRASONIC");
lcd.setCursor(0,1);
lcd.print(" DISTANCE");
delay(2000);
}
void loop() {
ULTRASONIC();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DISTANCE CM:");
lcd.print(distance);
lcd.setCursor(0,1);
lcd.print("DISTANCE INCH:");
lcd.print(distanceInch);
}
void ULTRASONIC() {
digitalWrite(latchPin, LOW);
digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
distanceInch = duration*0.0133/2;
Serial.print("Distance(cm): ");
Serial.println(distance);
Serial.print("Distance(inch): ");
Serial.println(distanceInch);
proximity = map(distance, 0, 45, 8, 0);
Serial.print("Proximity: ");
Serial.println(proximity);
Serial.print("\n");
if (proximity <= 0){
proximity = 0;
}
else if (proximity >= 3 && proximity <= 4){
tone(tonePin, 5000, 50);
}
else if (proximity >= 5 && proximity <= 6){
tone(tonePin, 5000, 200);
}
else if (proximity >= 7 && proximity <= 8){
tone(tonePin, 5000, 500);
}
shiftOut(dataPin, clockPin, MSBFIRST, possible_patterns[proximity]);
digitalWrite(latchPin, HIGH);
delay(500);
noTone(tonePin);
}