// Différent test sur les pointeurs
#define DEBUG 1
int *p_value = 0;
struct kStep *p_step;
struct kTimer *p_timer;
struct kTimer {
int now;
int start;
int duration;
bool isRunning;
bool isFinished;
};
struct kStep {
char name[20];
int duration;
bool isComplete;
int params[10];
};
struct kStep myStep[]{
{"Premier", 0, false, {0, 1, 2}},
{"Second", 2, false, {5000, 0}},
{"Troize", 2, false, {0, 0}}
};
struct kTimer myTimer = {millis(), millis(), 2000, false, false};
int sizeMyStep = sizeof(myStep)/sizeof(kStep);
void reinit(struct kStep *myStep){
for(int i = 0; i < sizeMyStep; i++){
p_step[i].isComplete = false;
}
}
void displayArray(struct kStep *myStep){
if (DEBUG){
for(int i = 0; i < sizeMyStep; i++){
Serial.print(p_step[i].name);
Serial.print("=>");
Serial.print(p_step[i].isComplete);
Serial.print("\n");
}
Serial.print("\n");
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
p_step = &myStep[0];
p_timer = &myTimer;
displayArray(p_step);
};
bool isFinished(struct kTimer *myTimer){
myTimer->now = millis();
if (myTimer->now - myTimer->start > myTimer->duration){
return true;
}
return false;
}
void initTimer(struct kTimer *myTimer){
myTimer->isRunning = true;
myTimer->now = millis();
myTimer->start = millis();
}
void loop() {
// // Set artificially "true" everywhere
// for(int i = 0; i < sizeMyStep; i++){
// p_step[i].isComplete = true;
// }
// displayArray(p_step);
// reinit(p_step);
// displayArray(p_step);
// // ... and then re init the array
// Si le timer n'est pas en route, on init
if (!p_timer->isRunning){
initTimer(p_timer);
}
if (isFinished(p_timer)){
// Si le timer est fini, on le reinit
Serial.print("Timer Fini !");
initTimer(p_timer);
}
}