#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ультразвуковой датчик
#define TRIG 9
#define ECHO 8
// светодиоды (6 шт.)
int leds[] = {2, 3, 4, 5, 6, 7};
int ledCount = 6;
// зуммер
#define BUZZER 10
// потенциометр
#define POT A0
void setup() {
lcd.init();
lcd.backlight();
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
for (int i = 0; i < ledCount; i++) {
pinMode(leds[i], OUTPUT);
}
pinMode(BUZZER, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Smart Parking");
}
void loop() {
// ультразвуковой импульс
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH);
float distance = duration * 0.034 / 2; // см
// порог с потенциометра
int threshold = map(analogRead(POT), 0, 1023, 10, 200);
// вывод расстояния
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distance);
lcd.print(" cm ");
// ---- СВЕТОДИОДНАЯ ШКАЛА ----
// Чем ближе объект, тем больше светодиодов горит
int ledsOn = map(distance, threshold, 10, 0, ledCount);
ledsOn = constrain(ledsOn, 0, ledCount);
for (int i = 0; i < ledCount; i++) {
if (i < ledsOn) digitalWrite(leds[i], HIGH);
else digitalWrite(leds[i], LOW);
}
// ---- ЗУММЕР ----
// Пищит, если объект ближе порога. Частота растёт при уменьшении расстояния.
if (distance < threshold) {
int toneFreq = map(distance, threshold, 5, 300, 2500);
tone(BUZZER, toneFreq); // частота растёт
} else {
noTone(BUZZER); // вне зоны — тишина
}
delay(50);
}