#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
// defines pins numbers
const int trigPin = 11;
const int echoPin = 12;
// defines variables
long duration;
double distanceCm;
double distanceM;
void setup() {
lcd.init();
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(20);
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distanceCm = duration * 0.034 / 2;
//correction
if (distanceCm > 9) {
if (distanceCm < 16) {
distanceCm = distanceCm - 1;
}
}
distanceM = round(distanceCm);
distanceM = distanceM / 100;
delay (10);
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("D = ");
lcd.print(distanceM);
lcd.print(" m ");
lcd.setCursor(0,1);
if (distanceM > 2) {lcd.print("N/A ");}
if (distanceM < 2) {
lcd.print("PE: ");
if (distanceM > 0.8 && distanceM < 2) {lcd.print("+/- 5cm ");}
if (distanceM < 0.8 && distanceM > 0.2) {lcd.print("+/- 2cm ");}
if (distanceM < 0.2) {lcd.print("+/- 1cm ");}
}
delay(500);
}