#include <LiquidCrystal.h>
#define PIN_TRIG 4
#define PIN_ECHO 3
#define RED_LED 13
#define BUZZ 10
#define LEVEL_1 32
#define LEVEL_2 22
long duration, cm;
LiquidCrystal lcd(12,11,9,8,7,6);
void setup() {
Serial.begin(9600);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZ, OUTPUT);
lcd.begin(16,2);
lcd.print("Duration:");
}
void loop() {
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(5);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
duration = pulseIn(PIN_ECHO, HIGH);
cm = (duration / 2) / 29.1;
lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm ");
if (cm <= LEVEL_2) {
lcd.setCursor(0, 0);
lcd.print("Warning! Object");
digitalWrite(RED_LED, HIGH);
tone(BUZZ, 1000);
}
else if (cm <= LEVEL_1) {
lcd.setCursor(0, 0);
lcd.print("Duration: ");
digitalWrite(RED_LED, LOW);
int frequency = map(cm, LEVEL_2, LEVEL_1, 2000, 500);
tone(BUZZ, frequency, 100);
delay(200 - (cm - LEVEL_2) * 5);
}
else {
lcd.setCursor(0, 0);
lcd.print("Duration: ");
digitalWrite(RED_LED, LOW);
noTone(BUZZ);
}
delay(250);
}