#include <LiquidCrystal.h>
#define PIN_TRIG 3
#define PIN_ECHO 4
#define led 13
#define vol 2
long duration, cm;
LiquidCrystal lcd(12, 7, 10, 8, 9, 6);
// Порогові значення
int threshold1 = 67; // Порогове значення №1
int threshold2 = 57; // Порогове значення №2
void setup() {
lcd.begin(16, 2);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(led, OUTPUT);
pinMode(vol, OUTPUT);
}
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, 0);
lcd.print("Distance: ");
lcd.print(cm);
lcd.print(" cm");
// Перевірка порогових значень
if (cm < threshold2) {
// Якщо відстань менше порогового значення №2
lcd.setCursor(0, 1); // Переходимо на другий рядок
lcd.print("Zanadto blyzʹko");
// Постійний сигнал зумера і ввімкнений світлодіод
digitalWrite(vol, HIGH);
digitalWrite(led, HIGH);
}
else if (cm < threshold1 && cm >= threshold2) {
// Якщо відстань менше порогового значення №1, але більше порогового значення №2
lcd.setCursor(0, 1);
lcd.print("Oberezhno! "); // Попередження, але не таке критичне
// Генерація періодичного сигналу зумера
digitalWrite(vol, HIGH);
delay((cm - threshold2) * 20);
digitalWrite(vol, LOW);
delay((cm - threshold2) * 20);
digitalWrite(led, LOW); // Світлодіод вимкнений
}
else {
// Якщо відстань більше порогового значення №1
lcd.setCursor(0, 1);
lcd.print("Bezpechno ");
// Вимикаємо зумер і світлодіод
digitalWrite(vol, LOW);
digitalWrite(led, LOW);
}
delay(250); // Затримка перед наступним вимірюванням
}