// Библиотека по I2C дисплеям
#include <LiquidCrystal_I2C.h>
// определения дисплеев
#define I2C_ADDR_1 0x0D
#define I2C_ADDR_2 0x0E
#define LCD_COLUMNS 16
#define LCD_LINES 2
// два дисплея - один OxOD, второй - 0x0E
LiquidCrystal_I2C lcd1(I2C_ADDR_1, LCD_COLUMNS, LCD_LINES);
LiquidCrystal_I2C lcd2(I2C_ADDR_2, LCD_COLUMNS, LCD_LINES);
void setup() {
// put your setup code here, to run once:
// Инициализация дисплеев
lcd1.init();
lcd1.backlight();
lcd2.init();
lcd2.backlight();
// Поздороваемся "с двух рук" :-)
lcd1.setCursor(0,0);
lcd1.print("Hello,world!");
delay(1500);
lcd1.clear();
lcd2.setCursor(0,0);
lcd2.print("Hello,world too!");
delay(1500);
lcd2.clear();
// Инициализация портов датчика температуры и кнопки режима
pinMode(A0, INPUT);
pinMode(0, INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
// на одном дисплее - режим, на другом температура с датчика
lcd1.setCursor(0,0);
lcd1.print("Mode HVAC:");
lcd2.setCursor(0,0);
lcd2.print("Temp. ambient:");
//Это из примера по датчику вырезано
int analogValue = analogRead(A0);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / 3950 + 1.0 / 298.15) - 273.15;
bool Mode=digitalRead(0);
lcd1.setCursor(0,1);
lcd2.setCursor(0,1);
// Выдача температуры, добавка пробелов - чтобы не оставались
// артефакты при малых значениях
lcd2.print(String(celsius)+" ");
// Проверка, нажата ли кнопка и не зима ли по-настоящему
if ((!Mode)||(celsius < 4.0))
{
// Если верно - так и пишем: зима, иначе: лето
lcd1.print("Winter");
}
else
{
lcd1.print("Summer");
}
// Задержка - все остальное, что должен делать ПЛК
delay(100);
}