#include <LiquidCrystal_I2C.h>
#include <EncButton.h>
#include <IRremote.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
#define PIN_RELAY 5
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
EncButton<EB_TICK, 2> btn1(INPUT_PULLUP);
// Переменные:
int ircode = 0;
int rec_ircode = 0;
int category = 1;
float vmin = 5.0;
int IR_RECEIVE_PIN = 4;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(13, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Ub:");
lcd.setCursor(0, 1);
lcd.print("Um:");
lcd.setCursor(9, 0);
lcd.print("IRr:");
lcd.setCursor(9, 1);
lcd.print("IRs:");
IrReceiver.begin(IR_RECEIVE_PIN); // Начинаем прием
}
void loop() {
// put your main code here, to run repeatedly:
btn1.tick();
if (btn1.click()) {
ircode += category;
if (ircode > 999) {
ircode = 0;
category = 1;
lcd.setCursor(13, 1);
lcd.print(" ");
}
}
if (btn1.held()) {
category *= 10;
lcd.noBacklight();
delay(100);
lcd.backlight();
if (category > 100) {
category = 1;
}
}
lcd.setCursor(13, 1);
lcd.print(ircode);
if (IrReceiver.decode()) //При получении сигнала...
{
rec_ircode = (IrReceiver.decodedIRData.command); //запоминаем его значение в последовательный порт
lcd.setCursor(13, 0);
lcd.print(rec_ircode);
if (rec_ircode == ircode) {
lcd.print(" ");
digitalWrite(PIN_RELAY, HIGH); // Включаем транзисторный ключ
digitalWrite(LED_BUILTIN, HIGH); // Включаем встроенный светодиод
delay(250);
digitalWrite(PIN_RELAY, LOW); // Выключаем транзисторный ключ
digitalWrite(LED_BUILTIN, LOW); // Выключаем встроенный светодиод
delay(250);
} else {
lcd.noBacklight();
delay(100);
lcd.backlight();
lcd.print(" ");
delay(500);
}
IrReceiver.resume(); // Получаем следующее значение
}
float vbatt = (((float)(analogRead(0) * 5.0) / 1023));
Serial.println(vbatt);
if (vbatt < vmin) {
vmin = vbatt;
}
lcd.setCursor(3, 0);
lcd.print(vbatt, 3);
lcd.setCursor(3, 1);
lcd.print(vmin, 3);
}