#include <Wire.h>
//#include <LCD_1602_RUS.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
//#include <microDS3231.h>
//MicroDS3231 rtc;
//Константы проекта
#define PUMPDURATION 60 // Продолжительность открытия клапана (сек)
#define SOILMOISTURE1 200 // Влажность почвы датчика 1 для срабатывания клапана
#define HOURTOWORK 23 // Время проверки не пора ли поливать
#define TIMEFORDELAY 200 // Время (сек) задержки для пропитывания грунта после полива
#define BTN_PIN 4 // Пин, на который подключена кнопка
#define VERSION "0.21" // Версия прошивки
RTClib RTC;
//LCD_1602_RUS lcd(0x27, 16, 2); // Инициализация дисплея
//GButton but1(BTN_PIN);// Подключаем кнопку, пин BTN_PIN, если используем сенсорную кнопку TTP223 - LOW_PULL, если физическую - HIGH_PULL
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
Wire.begin(); // Start the I2C interface
lcd.init(); // Start LCD
lcd.backlight(); // Включаем подсветку дисплея
//rtc.setTime(COMPILE_TIME); // Получаем время компиляции, для передачи в модуль DS3231 и передаём его
pinMode(2, OUTPUT); // пин D2 для управления мосфетом
//but1.setType(LOW_PULL);
Serial.begin(9600);
}
void loop() {
DateTime now = RTC.now();
// Подсветка включена
lcd.backlight();
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Watering time");
lcd.setCursor(1, 1);
lcd.print((String("Sensor 1: ") + String(analogRead(A2))));
delay (5000);
// Проверка надо ли поливать
//if (analogRead(A2) > SOILMOISTURE1 && (now.minute() == 0 || now.minute() == 5 || now.minute() == 10 || now.minute() == 15 || now.minute() == 20 || now.minute() == 25 || now.minute() == 30 || now.minute() == 37 || now.minute() == 44 || now.minute() == 51 || now.minute() > 58))
if (analogRead(A2) > SOILMOISTURE1 && (now.minute() == 36 || now.minute() == 10 || now.minute() == 20 || now.minute() == 30 || now.minute() == 40 || now.minute() == 47 || now.minute() == 54 || now.minute () == 59))
{
// Если текущее время в минутах равно заданному - начинаем полив
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" PUMP-");
digitalWrite(2, HIGH); //пин 2 состояние 1 - сигнал мосфету на полив
int i = PUMPDURATION;
for (int count = -1; count < PUMPDURATION; count++) {
i = i - 1;
delay (1000);
lcd.setCursor(9, 0);
if (i == 9) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" PUMP-");
}
lcd.print(i);
}
lcd.clear();
digitalWrite(2, LOW); //пин 2 состояние 0 - сигнал мосфету на выключение полива
// Задержка для впитывания воды в грунт
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Absorption");
int i1 = TIMEFORDELAY ;
for (int count = 0; count < TIMEFORDELAY; count++) {
i1 = i1 - 1;
delay (1000);
lcd.setCursor(6, 1);
lcd.print(" ");
lcd.setCursor(7, 1);
lcd.print (i1);
}
}
lcd.noBacklight();
}