/*
Forum: https://forum.arduino.cc/t/working-hours-logic/1228983/11
Wowki: https://wokwi.com/projects/390883908441457665
*/
int startTime;
int stopTime;
void setup() {
Serial.begin(115200);
calcStartStopTime(8,10,12,0);
checkTime(7,0);
checkTime(10,12);
checkTime(13,0);
calcStartStopTime(12,0,8,10);
checkTime(7,0);
checkTime(10,12);
checkTime(13,0);
calcStartStopTime(12,0,12,0);
checkTime(7,0);
}
void loop() {
}
void calcStartStopTime( int startH, int startM, int stopH, int stopM){
startTime = startH*60+startM;
stopTime = stopH*60 +stopM;
Serial.print("\nStart Time : ");
printTime(startH, startM);
Serial.print(" Stop Time : ");
printTime(stopH, stopM);
Serial.println();
}
void checkTime(int hour, int minute) {
boolean isWorkingTime = false;
unsigned long timeInMinutes = hour * 60 + minute;
printTime(hour, minute);
byte mode;
if (stopTime < startTime) {
mode = 0; // start after stop
} else {
mode = 1; // stop after start
}
if (startTime == stopTime) {
mode = 2; // start and stop at the same time
}
switch (mode) {
case 0: // stop before start
isWorkingTime = !(timeInMinutes >= stopTime && timeInMinutes < startTime );
break;
case 1: // Deactivation later
isWorkingTime = (timeInMinutes >= startTime && timeInMinutes < stopTime );
break;
case 2: // At the same time ... ?!!
Serial.println("All day working OR lazy?");
break;
}
if (mode != 2 ){
Serial.println(isWorkingTime ? "Working Time" : "Free Time");
}
}
void printTime(int h, int m){
if (h < 10) {
Serial.print('0');
}
Serial.print(h);
Serial.print(":");
if (m < 10) {
Serial.print('0');
}
Serial.print(m);
Serial.print('\t');
}