#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Настройки для LCD 2004
LiquidCrystal_I2C lcd(0x27, 20, 4); // Адрес I2C дисплея (может отличаться)
const int ledPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; // Пины светодиодов
const int buttonPins[] = {2, 3, 4, 5}; // Пины кнопок
const int buzzerPin = 7; // Пин зуммера
const int trigPin = 9; // TRIG ультразвукового датчика
const int echoPin = 8; // ECHO ультразвукового датчика
void setup() {
// Инициализация последовательного порта для отладки
Serial.begin(9600);
// Инициализация LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
// Настройка пинов светодиодов
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
// Настройка пинов кнопок
for (int i = 0; i < 4; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
// Настройка пинов ультразвукового датчика
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Настройка пина зуммера
pinMode(buzzerPin, OUTPUT);
digitalWrite(buzzerPin, LOW);
lcd.setCursor(0, 1);
lcd.print("Setup Complete");
delay(2000);
lcd.clear();
}
void loop() {
// Пример работы с ультразвуковым датчиком
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; // Расчет расстояния в сантиметрах
// Вывод расстояния на LCD
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm ");
// Чтение состояния кнопок
for (int i = 0; i < 4; i++) {
if (digitalRead(buttonPins[i]) == LOW) {
lcd.setCursor(0, 1);
lcd.print("Button ");
lcd.print(i + 1);
lcd.print(" pressed");
delay(500); // Защита от дребезга
}
}
// Включение/выключение светодиодов
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], HIGH);
delay(100);
digitalWrite(ledPins[i], LOW);
}
// Пример работы с зуммером
digitalWrite(buzzerPin, HIGH);
delay(200);
digitalWrite(buzzerPin, LOW);
delay(800);
}