#include <Wire.h> // библиотека для управления устройствами по I2C 
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 1602
#include "IRremote.h"

#define BLUE 11
#define GREEN 10
#define RED 9


#include "DHT.h"
#define DHTPIN 4 // номер пина, к которому подсоединен датчик
DHT dht(DHTPIN, DHT11); // Инициируем датчик


LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея

IRrecv irrecv(6); // указываем вывод, к которому подключен приемник
decode_results results;


boolean Net = 0; // указываем переменную, в которой будем зпоминать нажатие кнопки
boolean Net1 = 0; // указываем переменную, в которой будем зпоминать нажатие кнопки
boolean Net2 = 0; // указываем переменную, в которой будем зпоминать нажатие кнопки

boolean rgblist=0;
boolean lcdlist=0; // указываем переменную, в которой будем зпоминать страницу дисплея


int  HUM=0; //переменная, отвчающая за влажность
int TEMP=0; //переменная, отвчающая за температуру

unsigned long timer;
const byte piezoPin = 5;


void setup() {
   Serial.begin(9600);
   irrecv.enableIRIn(); // запускаем прием
   LCD.init(); // инициализация LCD дисплея
   LCD.backlight(); // включение подсветки дисплея
   delay(1000);            // Приостанавливаем выполнение скетча на 1 секунду, для перехода датчика в активное состояние

   pinMode(A1, INPUT);
   pinMode(RED,OUTPUT);
   pinMode(BLUE,OUTPUT);
   pinMode(GREEN,OUTPUT);
   pinMode(13,OUTPUT);
   pinMode(12,OUTPUT);

   pinMode(piezoPin, OUTPUT); // настраиваем вывод 5 на выход
}

void loop() {        
    int sensorValue1 = analogRead(A0);
    int sensorValue2 = analogRead(A1);

   
    HUM = dht.readHumidity(); //Считываем влажность
    TEMP = dht.readTemperature(); // Считываем температуру
    

    
   if ( irrecv.decode(&results))// если данные пришли
  {
    if (results.value == 16195807)// если пришли данные от нужной кнопкм
    {
      Net = !Net;// запоминаем нажатие
      if (Net==1){
        LCD.backlight(); // включение подсветки дисплея
      }
      if (Net==0){
        LCD.noBacklight(); // отключение подсветки дисплея
      }
      delay(50);// ждем, чтобы кнопка вернудась в изначальное положение
    }

    if (results.value == 16187647)// если пришли данные от нужной кнопкм
    {
      Net1 = !Net1;// запоминаем нажатие
      if (Net1==1){
        lcdlist=1;
        LCD.clear();// отображение второй страницы данных
      }
      if (Net1==0){
        lcdlist=0;
        LCD.clear();// отображение первой страницы данных
      }
      delay(50);// ждем, чтобы кнопка вернудась в изначальное положение
    }

     if (results.value == 16228447)// если пришли данные от нужной кнопкм
    {
      Net2 = !Net2;// запоминаем нажатие
      if (Net2==1){
        rgblist=1;
      }
      if (Net2==0){
        rgblist=0;
      }
      delay(50);// ждем, чтобы кнопка вернудась в изначальное положение
    }
    
    irrecv.resume();// принимаем следующую команду
  }

  if (lcdlist==0){
    LCD.setCursor(0, 0);   
   LCD.print("Vlagnost"); 
   
   LCD.setCursor(12, 0);   
   LCD.print(HUM); 

   LCD.setCursor(0, 1);       
   LCD.print("Temperatura"); 
   
   LCD.setCursor(12, 1);       
   LCD.print(TEMP);   
  }
  
  if (lcdlist==1){
    LCD.setCursor(0, 0);   
   LCD.print("Reristance"); 
   
   LCD.setCursor(12, 0);   
   LCD.print(sensorValue1); 

   LCD.setCursor(0, 1);       
   LCD.print("Yarkost"); 
   
   LCD.setCursor(12, 1);       
   LCD.print(sensorValue2);  
   
   if (millis() - timer > 500) {
   timer = millis();
    LCD.setCursor(12, 0);   
   LCD.print("    "); 

   LCD.setCursor(12, 1);   
   LCD.print("    "); 
   }

   
  }

  
 if (rgblist==1){
  if ((HUM>0)&&(HUM<33)){
     digitalWrite(RED,0);
     digitalWrite(GREEN, 0);
     digitalWrite(BLUE, 1);
  }
   if ((HUM>34)&&(HUM<66)){
    digitalWrite(RED,0);
     digitalWrite(GREEN, 1);
     digitalWrite(BLUE, 0);
  }
  if ((HUM>67)&&(HUM<100)){
     digitalWrite(RED,1);
     digitalWrite(GREEN, 0);
     digitalWrite(BLUE, 0);
  }
 }
 
  if (rgblist==0){
      digitalWrite(RED,0);
     digitalWrite(GREEN, 0);
     digitalWrite(BLUE, 0);
  }

   if (analogRead(A0)>600){
    digitalWrite(13,1);
   }
   else{
    digitalWrite(13,0);
   }
   
   if (analogRead(A1)<600){
    digitalWrite(12,1);
   }
   else{
    digitalWrite(12,0);
   }

   if (TEMP>30){
    digitalWrite(piezoPin, HIGH);
   }
   else{
    digitalWrite(piezoPin, LOW);
   }
 }

   

  





