#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2 // Пин для DHT22
#define DHTTYPE DHT22 // Тип DHT
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес I2C, количество колонок и строк
const int trigPin = 9;
const int echoPin = 10;
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;
const int buttonLeft = 7;
const int buttonRight = 8;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(buttonLeft, INPUT_PULLUP);
pinMode(buttonRight, INPUT_PULLUP);
lcd.begin(16, 2); // Указываем количество колонок и строк
lcd.backlight();
dht.begin();
Serial.begin(9600);
}
void loop() {
static bool showDistance = true;
// Проверяем состояние кнопок
if (digitalRead(buttonLeft) == LOW) {
showDistance = true;
delay(200); // Дебаунс
}
if (digitalRead(buttonRight) == LOW) {
showDistance = false;
delay(200); // Дебаунс
}
if (showDistance) {
displayDistance();
setColor(0, 0, 255); // Синий
} else {
displayTemperatureHumidity();
setColor(0, 255, 0); // Зеленый
}
}
void displayDistance() {
long duration, distanceCm, distanceInch;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * 0.034 / 2;
distanceInch = distanceCm / 2.54;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Dist: ");
lcd.print(distanceCm);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distanceInch);
lcd.print(" in");
}
void displayTemperatureHumidity() {
float h = dht.readHumidity();
float t = dht.readTemperature();
// Проверка на ошибки чтения
if (isnan(h) || isnan(t)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error reading");
return;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(h);
lcd.print(" %");
}
void setColor(int redValue, int greenValue, int blueValue) {
analogWrite(redPin, redValue);
analogWrite(greenPin, greenValue);
analogWrite(bluePin, blueValue);
}