/
gavr1337
/
smart_socket
Обзор
Документация
Войти
/
gavr1337
/
smart_socket
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/menu.cpp
1 241 строка
34 KB
Igor Gorodensky
Добавлено окно перехода в режим Wi fi
20 дек 2025, 01:28
20 дек 2025, 01:28
16fa5b8
Код
Авторство
О чём код?
#include "menu.h" MenuWindow getCurrentWindow() { return currentWindow; } TriggerMode getCurrentTriggerMode() { return currentTriggerMode; } void setCurrentTriggerMode(const TriggerMode &mode) { currentTriggerMode = mode; } void toNextWindow() { if (currentWindow < currentMode) currentWindow = static_cast<MenuWindow>(currentWindow + 1); } void toPreviousWindow() { if (currentWindow > currentTime) currentWindow = static_cast<MenuWindow>(currentWindow - 1); } void toNextTimeMode() { if (currentTimeMode < secondsTimeOnes) currentTimeMode = static_cast<TimeDisplayMode>(currentTimeMode + 1); } void toPreviousTimeMode() { if (currentTimeMode > defaultTime) currentTimeMode = static_cast<TimeDisplayMode>(currentTimeMode - 1); } void toTimeIsUpWindow() { currentWindow = timeIsUp; } void toTimeDisplayUpWindow() { currentWindow = currentTime; } void toRemoteControl() { currentWindow = remoteControl; } void toSetTimeWindow(struct Timer &timer) { currentTimeModifyMode = TimeModifyMode::timer_modify; clearLcd(); memcpy(&timeToSet, &timer, sizeof(Timer)); char printTime[9] = {0}; while (1) { char key = getPadKey(); switch (key) { case '1': onDigit1Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '2': onDigit2Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '3': onDigit3Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '4': onDigit4Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '5': onDigit5Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '6': onDigit6Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '7': onDigit7Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '8': onDigit8Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '9': onDigit9Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '0': onDigit0Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case 'A': isDataDisplayed = false; currentTimeMode = defaultTime; return; case 'C': memset(&timeToSet, 0, sizeof(Timer)); isDataDisplayed = true; currentTimeMode = defaultTime; break; case 'B': memcpy(&timer, &timeToSet, sizeof(Timer)); isDataDisplayed = false; currentTimeMode = defaultTime; return; case '#': toNextTimeMode(); isDataDisplayed = true; break; case '*': toPreviousTimeMode(); isDataDisplayed = true; break; default: break; } if (isDataDisplayed) { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: snprintf(printTime, sizeof(printTime), "%02d:%02d:%02d", timeToSet.hours, timeToSet.minutes, timeToSet.seconds); break; case TimeDisplayMode::hoursTimeTens: snprintf(printTime, sizeof(printTime), "#%d:%02d:%02d", timeToSet.hours % 10, timeToSet.minutes, timeToSet.seconds); break; case TimeDisplayMode::hoursTimeOnes: snprintf(printTime, sizeof(printTime), "%d#:%02d:%02d", timeToSet.hours / 10, timeToSet.minutes, timeToSet.seconds); break; case TimeDisplayMode::minutesTimeTens: snprintf(printTime, sizeof(printTime), "%02d:#%d:%02d", timeToSet.hours, timeToSet.minutes % 10, timeToSet.seconds); break; case TimeDisplayMode::minutesTimeOnes: snprintf(printTime, sizeof(printTime), "%02d:%d#:%02d", timeToSet.hours, timeToSet.minutes / 10, timeToSet.seconds); break; case TimeDisplayMode::secondsTimeTens: snprintf(printTime, sizeof(printTime), "%02d:%02d:#%d", timeToSet.hours, timeToSet.minutes, timeToSet.seconds % 10); break; case TimeDisplayMode::secondsTimeOnes: snprintf(printTime, sizeof(printTime), "%02d:%02d:%d#", timeToSet.hours, timeToSet.minutes, timeToSet.seconds / 10); break; default: break; } clearLcd(); printData("Set time", 4, 0); printData(printTime, 4, 1); isDataDisplayed = false; } } } int toRtcSetupWindow(RtcDateTime &rtc) { currentTimeModifyMode = TimeModifyMode::rtc_modify; clearLcd(); memcpy(&rtcToSet, &rtc, sizeof(RtcDateTime)); char printTime[9] = {0}; while (1) { char key = getPadKey(); switch (key) { case '1': onDigit1Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '2': onDigit2Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '3': onDigit3Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '4': onDigit4Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '5': onDigit5Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '6': onDigit6Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '7': onDigit7Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '8': onDigit8Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '9': onDigit9Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case '0': onDigit0Pressed(); if (defaultTime != currentTimeMode) toNextTimeMode(); isDataDisplayed = true; break; case 'A': isDataDisplayed = false; currentTimeMode = defaultTime; return false; case 'C': memset(&rtcToSet, 0, sizeof(RtcDateTime)); isDataDisplayed = true; currentTimeMode = defaultTime; break; case 'B': memcpy(&rtc, &rtcToSet, sizeof(RtcDateTime)); isDataDisplayed = false; currentTimeMode = defaultTime; return true; case '#': toNextTimeMode(); isDataDisplayed = true; break; case '*': toPreviousTimeMode(); isDataDisplayed = true; break; default: break; } if (isDataDisplayed) { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: snprintf(printTime, sizeof(printTime), "%02d:%02d:%02d", rtcToSet.Hour(), rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::hoursTimeTens: snprintf(printTime, sizeof(printTime), "#%d:%02d:%02d", rtcToSet.Hour() % 10, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::hoursTimeOnes: snprintf(printTime, sizeof(printTime), "%d#:%02d:%02d", rtcToSet.Hour() / 10, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeTens: snprintf(printTime, sizeof(printTime), "%02d:#%d:%02d", rtcToSet.Hour(), rtcToSet.Minute() % 10, rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: snprintf(printTime, sizeof(printTime), "%02d:%d#:%02d", rtcToSet.Hour(), rtcToSet.Minute() / 10, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeTens: snprintf(printTime, sizeof(printTime), "%02d:%02d:#%d", rtcToSet.Hour(), rtcToSet.Minute(), rtcToSet.Second() % 10); break; case TimeDisplayMode::secondsTimeOnes: snprintf(printTime, sizeof(printTime), "%02d:%02d:%d#", rtcToSet.Hour(), rtcToSet.Minute(), rtcToSet.Second() / 10); break; default: break; } clearLcd(); printData("Set RTC", 4, 0); printData(printTime, 4, 1); isDataDisplayed = false; } } return true; } static void toNextTriggerMode() { if (currentTriggerMode < toggle) currentTriggerMode = static_cast<TriggerMode>(currentTriggerMode + 1); } static void toPreviousTriggerMode() { if (currentTriggerMode > on) currentTriggerMode = static_cast<TriggerMode>(currentTriggerMode - 1); } void onDigit1Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit1Timer(); break; case TimeModifyMode::rtc_modify: changeDigit1Rtc(); break; default: break; } } void onDigit2Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit2Timer(); break; case TimeModifyMode::rtc_modify: changeDigit2Rtc(); break; default: break; } } void onDigit3Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit3Timer(); break; case TimeModifyMode::rtc_modify: changeDigit3Rtc(); break; default: break; } } void onDigit4Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit4Timer(); break; case TimeModifyMode::rtc_modify: changeDigit4Rtc(); break; default: break; } } void onDigit5Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit5Timer(); break; case TimeModifyMode::rtc_modify: changeDigit5Rtc(); break; default: break; } } void onDigit6Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit6Timer(); break; case TimeModifyMode::rtc_modify: changeDigit6Rtc(); break; default: break; } } void onDigit7Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit7Timer(); break; case TimeModifyMode::rtc_modify: changeDigit7Rtc(); break; default: break; } } void onDigit8Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit8Timer(); break; case TimeModifyMode::rtc_modify: changeDigit8Rtc(); break; default: break; } } void onDigit9Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit9Timer(); break; case TimeModifyMode::rtc_modify: changeDigit9Rtc(); break; default: break; } } void onDigit0Pressed() { switch (currentTimeModifyMode) { case TimeModifyMode::timer_modify: changeDigit0Timer(); break; case TimeModifyMode::rtc_modify: changeDigit0Rtc(); break; default: break; } } void toSetModeWindow() { clearLcd(); TriggerMode previousTriggerMode = currentTriggerMode; while (1) { char key = getPadKey(); switch (key) { case 'A': isDataDisplayed = false; currentTriggerMode = previousTriggerMode; return; case 'B': isDataDisplayed = false; return; case '*': toPreviousTriggerMode(); isDataDisplayed = true; break; case '#': toNextTriggerMode(); isDataDisplayed = true; break; default: break; } if (isDataDisplayed) { clearLcd(); printData("Trigger mode", 1, 0); switch (currentTriggerMode) { case TriggerMode::off: printData("Off", 6, 1); break; case TriggerMode::on: printData("On", 7, 1); break; case TriggerMode::toggle: printData("Toggle", 5, 1); break; default: break; } isDataDisplayed = false; } } } static void changeDigit1Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeTens: timeToSet.hours = (timeToSet.hours % 10) + 10; break; case TimeDisplayMode::hoursTimeOnes: timeToSet.hours = (timeToSet.hours / 10) * 10 + 1; break; case TimeDisplayMode::minutesTimeTens: timeToSet.minutes = (timeToSet.minutes % 10) + 10; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 1; break; case TimeDisplayMode::secondsTimeTens: timeToSet.seconds = (timeToSet.seconds % 10) + 10; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 1; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit2Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeTens: timeToSet.hours = (timeToSet.hours % 10) + 20; break; case TimeDisplayMode::hoursTimeOnes: timeToSet.hours = (timeToSet.hours / 10) * 10 + 2; break; case TimeDisplayMode::minutesTimeTens: timeToSet.minutes = (timeToSet.minutes % 10) + 20; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 2; break; case TimeDisplayMode::secondsTimeTens: timeToSet.seconds = (timeToSet.seconds % 10) + 20; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 2; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit3Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: timeToSet.hours = (timeToSet.hours / 10) * 10 + 3; break; case TimeDisplayMode::minutesTimeTens: timeToSet.minutes = (timeToSet.minutes % 10) + 30; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 3; break; case TimeDisplayMode::secondsTimeTens: timeToSet.seconds = (timeToSet.seconds % 10) + 30; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 3; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit4Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if (timeToSet.hours / 10 < 2) timeToSet.hours = (timeToSet.hours / 10) * 10 + 4; break; case TimeDisplayMode::minutesTimeTens: timeToSet.minutes = (timeToSet.minutes % 10) + 40; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 4; break; case TimeDisplayMode::secondsTimeTens: timeToSet.seconds = (timeToSet.seconds % 10) + 40; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 4; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit5Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if (timeToSet.hours / 10 < 2) timeToSet.hours = (timeToSet.hours / 10) * 10 + 5; break; case TimeDisplayMode::minutesTimeTens: timeToSet.minutes = (timeToSet.minutes % 10) + 50; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 5; break; case TimeDisplayMode::secondsTimeTens: timeToSet.seconds = (timeToSet.seconds % 10) + 50; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 5; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit6Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if (timeToSet.hours / 10 < 2) timeToSet.hours = (timeToSet.hours / 10) * 10 + 6; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 6; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 6; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit7Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if (timeToSet.hours / 10 < 2) timeToSet.hours = (timeToSet.hours / 10) * 10 + 7; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 7; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 7; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit8Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if (timeToSet.hours / 10 < 2) timeToSet.hours = (timeToSet.hours / 10) * 10 + 8; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 8; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 8; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit9Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if (timeToSet.hours / 10 < 2) timeToSet.hours = (timeToSet.hours / 10) * 10 + 9; break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10 + 9; break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10 + 9; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit0Timer() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeTens: timeToSet.hours = timeToSet.hours * 0 + (timeToSet.hours % 10); break; case TimeDisplayMode::hoursTimeOnes: timeToSet.hours = (timeToSet.hours / 10) * 10; break; case TimeDisplayMode::minutesTimeTens: timeToSet.minutes = timeToSet.minutes * 0 + (timeToSet.minutes % 10); break; case TimeDisplayMode::minutesTimeOnes: timeToSet.minutes = (timeToSet.minutes / 10) * 10; break; case TimeDisplayMode::secondsTimeTens: timeToSet.seconds = timeToSet.seconds * 0 + (timeToSet.seconds % 10); break; case TimeDisplayMode::secondsTimeOnes: timeToSet.seconds = (timeToSet.seconds / 10) * 10; currentTimeMode = defaultTime; break; default: break; } } static void changeDigit1Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() % 10) + 10, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::hoursTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 1, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() % 10) + 10, rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 1, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() % 10) + 10); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 1); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit2Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() % 10) + 20, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::hoursTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 2, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() % 10) + 20, rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 2, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() % 10) + 20); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 2); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit3Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 3, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() % 10) + 30, rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 3, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() % 10) + 30); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 3); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit4Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if ((rtcToSet.Hour() / 10) < 2) rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 4, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() % 10) + 40, rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 4, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() % 10) + 40); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 4); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit5Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if ((rtcToSet.Hour() / 10) < 2) rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 5, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() % 10) + 50, rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 5, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() % 10) + 50); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 5); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit6Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if ((rtcToSet.Hour() / 10) < 2) rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 6, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 6, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 6); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit7Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if ((rtcToSet.Hour() / 10) < 2) rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 7, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 7, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 7); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit8Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if ((rtcToSet.Hour() / 10) < 2) rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 8, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 8, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 8); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit9Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeOnes: if ((rtcToSet.Hour() / 10) < 2) rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10 + 9, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10 + 9, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10 + 9); currentTimeMode = defaultTime; break; default: break; } } static void changeDigit0Rtc() { switch (currentTimeMode) { case TimeDisplayMode::defaultTime: return; case TimeDisplayMode::hoursTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour() * 0 + (rtcToSet.Hour() % 10), rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::hoursTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), (rtcToSet.Hour() / 10) * 10, rtcToSet.Minute(), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute() * 0 + (rtcToSet.Minute() % 10), rtcToSet.Second()); break; case TimeDisplayMode::minutesTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), (rtcToSet.Minute() / 10) * 10, rtcToSet.Second()); break; case TimeDisplayMode::secondsTimeTens: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), rtcToSet.Second() * 0 + (rtcToSet.Second() % 10)); break; case TimeDisplayMode::secondsTimeOnes: rtcToSet = RtcDateTime(rtcToSet.Year(), rtcToSet.Month(), rtcToSet.Day(), rtcToSet.Hour(), rtcToSet.Minute(), (rtcToSet.Second() / 10) * 10); currentTimeMode = defaultTime; break; default: break; } }