#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int Play = 0;
int Set_Dist = 0;
int Button = 2;
int Switch_Button = 3;
int Buzz = 5;
int Led_Red = 7;
int Led_Green = 6;
int trigPin = 9;
int echoPin = 8;
int Distance;
float duration_us, distance;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
Serial.begin(9600);
pinMode(Button, INPUT);
pinMode(Switch_Button, INPUT);
pinMode(Led_Red, OUTPUT);
pinMode(Led_Green, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
if (digitalRead(Button) == HIGH && Play == 0) {
Play = 1;
Set_On();
delay(500);
} else if (digitalRead(Button) == HIGH && Play == 1) {
Play = 0;
Set_Off();
delay(500);
}
if (digitalRead(Switch_Button) == HIGH && Play == 1) {
tone(Buzz, 400, 200);
lcd.clear();
Set_Dist = Set_Dist + 1;
delay(200);
tone(Buzz, 600, 100);
}
if (Play == 1) {
Led(1);
switch(Set_Dist) {
case 0: GetDistance(1, "cm"); break;
case 1: GetDistance(10, "mm"); break;
case 2: GetDistance(0.1, "dm"); break;
case 3: GetDistance(0.01, "m"); break;
case 4: Set_Dist = 0; break;
default:break;
}
} else {
Led(0);
lcd.clear();
}
}
void GetDistance(float Dist, String Dist_val) {
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration_us = pulseIn(echoPin, HIGH);
distance = 0.017 * duration_us;
Distance = distance * Dist;
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(Distance);
lcd.print(Dist_val);
lcd.print(" ");
delay(500);
}
void Led(int value) {
if (value == 1) {
digitalWrite(Led_Green, HIGH);
digitalWrite(Led_Red, LOW);
} else {
digitalWrite(Led_Green, LOW);
digitalWrite(Led_Red, HIGH);
}
}
void Set_On() {
tone(Buzz, 300, 200);
delay(200);
tone(Buzz, 400, 200);
delay(200);
tone(Buzz, 600, 400);
}
void Set_Off() {
tone(Buzz, 500, 200);
delay(200);
tone(Buzz, 400, 200);
delay(200);
tone(Buzz, 200, 400);
}