#include <LiquidCrystal.h>
// Инициализация LCD (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int temperature; // переменная для температуры
int brightness; // переменная для яркости LED
// Символ градуса
byte degree[8] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};
void setup() {
// Создаем символ градуса
lcd.createChar(0, degree);
// Настройка LCD
lcd.begin(16, 2);
// Вывод начального сообщения
lcd.print("Temp = ");
lcd.setCursor(10, 0);
lcd.write(byte(0)); // выводим символ градуса
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Ventilation");
// Настройка пинов
pinMode(6, OUTPUT); // вентилятор
pinMode(13, OUTPUT); // LED (проверить наличие ШИМ на пине 13)
// Небольшая задержка для стабилизации
delay(1000);
}
void loop() {
// Чтение температуры с датчика LM35 или аналогичного
// Формула: (значение АЦП * 5.0 * 100.0) / 1024.0
// или как в оригинале: 0.488 * analogRead(A0) - 49.76
temperature = 0.488 * analogRead(A0) - 49.76;
// Чтение значения с потенциометра для яркости LED
brightness = analogRead(A1);
brightness = map(brightness, 0, 1023, 0, 255);
// Управление яркостью LED
analogWrite(13, brightness);
// Очистка LCD и вывод информации
lcd.clear();
// Вывод температуры
lcd.setCursor(0, 0);
lcd.print("Temp = ");
lcd.print(temperature);
lcd.setCursor(12, 0);
lcd.write(byte(0));
lcd.print("C");
// Вывод статуса вентиляции
lcd.setCursor(0, 1);
lcd.print("Ventilation ");
if (temperature <= 25) {
lcd.print("OFF");
digitalWrite(6, LOW); // выключаем вентилятор
} else {
lcd.print("ON ");
digitalWrite(6, HIGH); // включаем вентилятор
}
// Небольшая задержка для стабильности
delay(500);
}