#include "keyboard.h"
#include "alarm.h"
#include "globals.h"
#include "lcd.h"
#include "RTClib.h"
void initialStartParametr() {
rangeTimeNight[0] = subMenuNightLight[0].data.substring(0, 5);
rangeTimeNight[1] = subMenuNightLight[0].data.substring(8,13);
rangeTimeDay[0] = subMenuDayLight[0].data.substring(0, 5);
rangeTimeDay[1] = subMenuDayLight[0].data.substring(8,13);
timeDelayPirNight = subMenuNightLight[1].data.toInt()*10;
timeDelayPirDay = subMenuDayLight[1].data.toInt()*10;
timeDelayAlarm = subMenuBuzzer[1].data.toInt()*10;
controlLCD.setApplyDataMenu(false);
}
void updateTime() {
DateTime now = rtc.now(); // Получаем врем с модуля RTC
lcd.setCursor(0, 2);
lcd.print(String(now.year()) + "/");
lcd.print(String(now.month()) + "/");
lcd.print(String(now.day()) + " ");
// Формат HH:MM:SS
lcd.print(String(now.hour()) + ":");
if (now.minute() < 10) lcd.print("0");
lcd.print(String(now.minute()) + ":");
if (now.second() < 10) lcd.print("0");
lcd.print(now.second());
}
//****************************************************
void setup() {
//джостик
pinMode(Y_PIN, INPUT);
pinMode(X_PIN, INPUT);
buttonJostik.begin();
//lcd
Wire.begin();// Start I2C communication
lcd.backlight();//включить подстветку
lcd.init();
lcd.clear();
lcd.home();
lcd.print("********************");
Serial.begin(115200);
lcd.setCursor(0, 1);
lcd.print("Hello!");
lcd.setCursor(0, 3);
lcd.print("Press the joystick");
//RTC модуль
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
//кнопки
button1.begin();
button2.begin();
//LCD
digitalWrite(ledDay, LOW);
digitalWrite(ledNight, LOW);
pinMode(ledDay, OUTPUT); //дневная подсветка
pinMode(ledNight, OUTPUT); //ночная подстветка
//датчик движения
pirSensorNight.begin();
pirSensorDay.begin();
//Будильник
alarmClock.begin();
initialStartParametr();
}
//******************************************************
void loop() {
if(controlLCD.getApplyDataMenu()){ // проверка на изменение данных для дальнейших иницилизации
initialStartParametr();
}
if (!startmenu) {
updateTime(); //отображение времени и даты на экране
}
//*******логика кнопок***********************
button1.setResetButton();
button2.setResetButton();
buttonJostik.setResetButton();
if (button1.handleButton()) {
ledOn = !ledOn;
digitalWrite(32, ledOn);
}
if (button2.handleButton()) {
ledOn = !ledOn;
digitalWrite(32, ledOn);
}
//*********логика LCD и управления меню*****************
char keypressed = kpd.getKey();
unsigned long currentMillis = millis();
if (controlLCD.timeOfWork() || controlLCD.periodOfWork()
|| controlLCD.timeM() || controlLCD.dateM()) {
timeDelayError(previousMillis, currentMillis); //задержка для отображения ошибки
}
if (controlLCD.getenterMenu() && controlLCD.keyboardEnabled()) {
if (keypressed != NO_KEY) {
processKeyInput(keypressed);
}
}
//джостик
int x = analogRead(X_PIN); // считываем значение оси X
int y = analogRead(Y_PIN); // считываем значение оси Y
if (x != lastX) { // если значение оси X изменилось
delay(200);
controlLCD.moveCursor(x);
}
if (y != lastY) { // если значение оси Y изменилось
delay(200);
controlLCD.moveLine(y); // проверка нажатия и смещение
}
//кнопка джостика
if (buttonJostik.handleButton()) {
//первый старт меню
if (!startmenu) {
controlLCD.displayMenu();// отображение меню
controlLCD.changeCursor();// курсор выбора
startmenu = true;
}
else {
controlLCD.selectMenuItem();
}
}
// датчик движения ночью
if(subMenuNightLight[2].data == "on"){
pirSensorNight.enabled();
}
else if(subMenuNightLight[2].data == "off"){
pirSensorNight.disabled();
}
pirSensorNight.setTimeWork(rangeTimeNight[0], rangeTimeNight[1]);//время работы
pirSensorNight.setTimeDelay(timeDelayPirNight); //времы задержки освещения
if (pirSensorNight.timeControl(rtc)) {
digitalWrite(ledNight, HIGH);
}
else {
digitalWrite(ledNight, LOW);
}
// датчик движения днем
if(subMenuDayLight[2].data == "on"){
pirSensorDay.enabled();
}
else if(subMenuDayLight[2].data == "off"){
pirSensorDay.disabled();
}
pirSensorDay.setTimeWork("rangeTimeDay[0]", rangeTimeDay[1]);//время работы
pirSensorDay.setTimeDelay(timeDelayPirDay); //времы задержки освещения
if (pirSensorDay.timeControl(rtc)) {
if (!condition) { // проверка, не было ли условие выполнено ранее
digitalWrite(ledDay, HIGH);
condition = true; // установить флаг в true
}
} else {
if (condition) { // проверка, было ли условие выполнено ранее
digitalWrite(ledDay, LOW);
condition = false; // сбросить флаг
}
}
//Serial.println(rangeTimeNight[0]);
//Serial.println(rangeTimeNight[1]);
//Serial.println(rangeTimeDay[0]);
//Serial.println(rangeTimeDay[1]);
//Serial.println(timeDelayPirNight);
//Serial.println(timeDelayPirDay);
//Serial.println(timeDelayAlarm );
//будильникcurrentMenu[_currentMenuItem].data = inputBuffer;
Serial.println(subMenuClock[0].data);
Serial.println(subMenuClock[1].data);
if(subMenuBuzzer[2].data == "On"){
alarmClock.enabled();
}
else if(subMenuBuzzer[2].data == "Off"){
alarmClock.disabled();
}
alarmClock.setTimeDelay(timeDelayAlarm);
alarmClock.setTimeAlarm(subMenuBuzzer[1].data);
alarmClock.timeControl(rtc);
}
Основной свет
Ночная подсветка
Доп нагрузка