enum {
WARTEN,
ARBEITEN
} Task_Type;
enum {
SUB1,
SUB2
} SubTask_Type;
typedef struct {
int ActTask;
int ActDuration;
int NextTask;
int NextDuration;
long Starttime;
long Worktime;
} Task_Struct;
Task_Struct task;
boolean TimeToChange(){
return (millis()-task.Starttime >= task.ActDuration);
}
void SetNewTaskWithTime(int NextTask, long TaskDuration){
task.NextTask = NextTask;
task.NextDuration = TaskDuration;
}
void PrintActTask(){
String sTask = "UNKNOWN";
switch (task.ActTask){
case WARTEN : sTask = "WARTEN";
break;
case ARBEITEN : sTask = "ARBEITEN";
break;
}
Serial.println("Change to "+sTask);
}
void ChangeTask(){
task.ActTask = task.NextTask;
PrintActTask();
task.ActDuration = task.NextDuration;
task.NextTask = WARTEN;
task.NextDuration = 5000;
task.Starttime = millis();
task.Worktime = task.Starttime;
}
boolean TimeToWork(long wTime){
if (millis()-task.Worktime >= wTime){
task.Worktime = millis();
return true;
} else return false;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Test");
SetNewTaskWithTime(WARTEN, 3000);
ChangeTask();
SetNewTaskWithTime(ARBEITEN, 3100);
}
void HandleTasks(){
switch (task.ActTask) {
case WARTEN : if(TimeToChange()) {
ChangeTask();
SetNewTaskWithTime(WARTEN, 3000);
};
break;
case ARBEITEN : if(TimeToWork(1000)) Serial.println("Work");
if(TimeToChange()) {
ChangeTask();
SetNewTaskWithTime(ARBEITEN, 3100);
};
break;
default : break;
}
}
void loop() {
HandleTasks();
// put your main code here, to run repeatedly:
}