#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define PIN_TRIG 13
#define PIN_ECHO 12
#define PIN_BUTTON 4
#define PIN_LED 3
int buttonLastState = HIGH;
void setup() {
// initialize serial
//Serial.begin(115200);
// initialize ultrasonic
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
// initialize button
pinMode(PIN_BUTTON, INPUT_PULLUP);
buttonLastState = HIGH;
// initialize LED
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, LOW);
//initialize lcd screen
lcd.begin(16,2);
lcd.backlight();
lcd.print("Ultrasonic v1.0");
delay(1000);
lcd.clear();
lcd.noBacklight();
}
void loop() {
// read button value
int buttonValue = digitalRead(PIN_BUTTON);
//Serial.println(buttonValue);
// Start a new measurement:
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
int duration = pulseIn(PIN_ECHO, HIGH);
// Use 343 metres per second as speed of sound
float distance = duration * 0.034 / 2;
if(distance <= 20){
digitalWrite(PIN_LED, HIGH);
}
else{
digitalWrite(PIN_LED, LOW);
}
if(buttonLastState != buttonValue){
buttonLastState = buttonValue;
if(buttonValue == HIGH){
lcd.clear();
lcd.noBacklight();
}
if(buttonValue == LOW){
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Level: ");
lcd.print(distance);
lcd.print("cm");
lcd.setCursor(0,1);
lcd.print("Remaining: ");
lcd.print(getDays(distance));
lcd.print(" d.");
delay(3000);
}
}
}
int getDays(int distance)
{
// Calculate the number of days based on the distance
int days = distance / 5;
return days;
}