#include <LiquidCrystal.h>
// Підключення LCD дисплею
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Підключення ультразвукового датчика відстані
const int trigPin = 9;
const int echoPin = 10;
// Підключення світлодіода та п'єзодинаміка
const int ledPin = 7;
const int buzzerPin = 6;
// Порогові рівні для дій
const int firstThreshold = 50; // Перший пороговий рівень (50 см)
const int secondThreshold = 40; // Другий пороговий рівень (40 см)
bool alarmState = false;
void setup() {
// Ініціалізація LCD дисплею
lcd.begin(16, 2);
// Ініціалізація пінів для ультразвукового датчика
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Ініціалізація пінів для світлодіода та п'єзодинаміка
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Виведення тексту на LCD
lcd.print("Calculate legnth");
}
void loop() {
// Відправлення ультразвукового сигналу
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Отримання часу відгуку
long duration = pulseIn(echoPin, HIGH);
// Розрахунок відстані в сантиметрах
int distance_cm = duration / 58;
// Обробка дій відповідно до виміряної відстані
if (distance_cm < firstThreshold) {
// Вимикаємо світлодіод
digitalWrite(ledPin, LOW);
// Виводимо відстань на LCD
lcd.setCursor(0, 1);
lcd.print("Length:");
lcd.print(distance_cm);
lcd.print(" cm");
// Періодичне ввімкнення та вимкнення п'єзодинаміка
if (alarmState) {
tone(buzzerPin, 1000);
alarmState = false;
} else {
noTone(buzzerPin);
alarmState = true;
}
} else if (distance_cm < secondThreshold) {
// Вимикаємо світлодіод
digitalWrite(ledPin, HIGH);
// Виводимо попередження на LCD
lcd.setCursor(0, 1);
lcd.print("Warning: Near");
// Запускаємо п'єзодинамік постійно
tone(buzzerPin, 1000);
} else {
// Вимикаємо світлодіод, вимикаємо п'єзодинамік і очищуємо LCD
digitalWrite(ledPin, LOW);
noTone(buzzerPin);
lcd.clear();
}
// Затримка перед наступним вимірюванням
delay(100);
}