#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "Enabl_Main_Light_Button.h"
#include "Enabl_Night_Light_Sensor.h"
#include "Enabl_Main_Light_Sensor.h"
#include "Enabl_MyAlarmClock_Main_Light.h"
#include "Synchronization.h"
#include "LCD_Mode.h"
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
// Вводим имя и пароль точки доступа
String ssid = "Wokwi-GUEST";
String password = "";
const String endpoint = "http://worldtimeapi.org/api/timezone/Europe/Moscow";
RTC_DS1307 rtc; // объект RTC
HTTPClient http;
char keypressedFact;
const byte Rows= 4; // количество строк на клавиатуре
const byte Cols= 4; // количество столбцов на клавиатуре
// определяем массив символов соответствующий распределению кнопок на клавиатуре:
char keymap[Rows][Cols]=
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#','D'}
};
// соединения клавиатуры с выводами Arduino:
byte rPins[Rows]= {2,0,4,16};
byte cPins[Cols]= {17,5,18,19};
// создаем объект класса Keypad
Keypad kpd= Keypad(makeKeymap(keymap), rPins, cPins, Rows, Cols);
static PIN_BUTTON BUTTON_1(26);// 1 кнопка вкл выкл основного света
static PIN_BUTTON BUTTON_2(25);// 2 кнопка вкл выкл основного света
static PIN_BUTTON Sensor(13);// 1 кнопка вкл выкл основного света
static PIN_RELAY LED_main(12);// реле основного света
static PIN_RELAY LED_nigt(14);// реле ночного света
static PIN_RELAY LED_add(27);// реле дополнительной нагрузки
int lastButton[2] ={LOW,LOW}; //предыдущее состояние кнопки
int curButton[2] ={LOW,LOW}; //Текущее состояние кнопки
int count = 0; // состояние включения
int action_Sensor_nigt = 1; // активность датчика движения ночью
int action_Sensor_main= 1; // активность датчика движения днем
int action_AlarmClock= 1; // активность будильника
unsigned long time_Sensor_nigt = 10; // время работы ночной подстветки от датчика движения (по умолчанию 10 с)
unsigned long time_Sensor_main = 10; // время работы ночной подстветки от датчика движения (по умолчанию 10 с)
unsigned long time_AlarmClock = 10; // время работы будильника (по умолчанию 10 с)
int time_Sensor_status_nigt = 0; // флаг включения ночной подстветки от датчика движения
int time_Sensor_status_main = 0; // флаг включения основной подстветки отдатчика движения
int time_AlarmClock_status =0; // флаг включения будильника
unsigned long timer_nigt = 0; // время начала работы ночной подстветки для отсчета времени работы в переменной time_Sensor
unsigned long timer_main = 0; // время начала работы основной подстветки для отсчета времени работы в переменной time_Sensor
unsigned long timer_AlarmClock = 0; // время начала работы будильника для отсчета времени работы в переменной time_Sensor
unsigned long hour_set = 0; // уставка часы будильник
unsigned long minute_set = 1; // уставка минуты будильник
unsigned long hour_set_time = 0; // уставка часы будильник
unsigned long minute_set_time = 0; // уставка минуты будильник
int category_LCD=0; // категории меню LCD
int control_cick_A=0; // контроль нажатия клавиши А
void setup() {
Serial.begin(115200);
Synchronization(LCD, ssid, password, endpoint, rtc, http); // функция подключения к вай-фай и синхронизация времени
}
void loop() {
DateTime now = rtc.now(); // чтение текущего времени
//hour_set_time = now.hour();
//minute_set_time = now.minute();
Enabl_Main_Light_Button(BUTTON_1, // ожидание нажатия первой кнопки вкл выкл основного света
LED_main,
lastButton[0],
curButton[0],
count);
Enabl_Main_Light_Button(BUTTON_2, // ожидание нажатия второй кнопки вкл выкл основного света
LED_main,
lastButton[1],
curButton[1],
count);
Enabl_Night_Light_Sensor(Sensor, //функция регулирование работы ночной подсветки от датчика движения
LED_nigt,
now.hour(),
now.minute(),
action_Sensor_nigt,
time_Sensor_nigt,
time_Sensor_status_nigt,
timer_nigt);
Enabl_Main_Light_Sensor(Sensor, //функция регулирование работы основного света от датчика движения
LED_main,
now.hour(),
now.minute(),
action_Sensor_main,
time_Sensor_main,
time_Sensor_status_main,
timer_main);
Enabl_MyAlarmClock_Main_Light(LED_add, //функция регулирование работы будильника
now.hour(),
now.minute(),
hour_set,
minute_set,
action_AlarmClock,
time_AlarmClock,
time_AlarmClock_status,
timer_AlarmClock);
LCD_Mode( LCD, //функция настройки параметров работы
kpd,
now,
rtc,
action_Sensor_nigt,
action_Sensor_main,
action_AlarmClock,
category_LCD,
time_Sensor_nigt,
time_Sensor_main,
time_AlarmClock,
ssid,
password,
hour_set,
minute_set,
hour_set_time,
minute_set_time,
control_cick_A);
}
Основной
свет
Ночной
свет
Дополнительная
нагрузка
On/off main ligt
On/off main ligt
Ввод активаций - 1 или 0
Ввод значений таймеров и часов- цифры (в рамках ограничений, при вводе неккоретных данных будут установлены граничные значения)
Ввод названия сети и пароль - В перебор значений вверх
С перебор значений вниз
D запоминание значения символа
А переход к другому параметру
Ввод значений текущего времени * для перехода к новому времени