Bonjour,
Voilà, la bibliothèque est implémentée. Il s'agit d'un implémentation des tables d'ordonnancement.
J'explique la philosophie.
Il s'agit d'ordonnancer des actions dans le temps. À cet effet on définit une période qui a une durée avec un instant initial qui est l'instant de démarrage et un instant final qui est l'instant initial + la durée. Entre cet instant initial et cet instant final, on place des actions. Une action est l'appel d'une fonction que l'utilisateur fournit. La période peut ensuite être répétée entre 1 et 65535 fois ou bien infiniment.
La bibliothèque offre une classe ScheduleTable que l'on peut instancier pour créer ces périodes où des actions sont ordonnancées. Pour déclarer une ScheduleTable, on écrit par exemple :
ScheduleTable myTable(3, 200);
Le premier argument est le nombre d'actions que peut contenir la table, ici 3. Le 2e est sa durée, ici 200. Par défaut, il s'agit de millisecondes. On peut fournir un 3e argument qui donne la base de temps. Par exemple :
ScheduleTable myTable(3, 200, 100);
précise une base de temps de 100 ms. Par conséquent 200 représente 200 x 100 ms de durée. Toutes les durées relative à myTable seront exprimées en centaines de millisecondes.
Ensuite dans setup(), on place des actions à des dates relative par rapport au début de la période. Par exemple si sur notre période de 200 unités de temps on veut placer une action à 50, 60, 120, on écrira dans setup :
myTable.at(50, action1);
myTable.at(60, action2);
myTable.at(120, action3);
action1, action2 et action3 sont des fonctions définies comme suit :
void action1()
{
Serial.print(millis());
Serial.println(" : action 1");
}
void action2()
{
Serial.print(millis());
Serial.println(" : action 2");
}
void action3()
{
Serial.print(millis());
Serial.println(" : action 3");
}
Il faut ensuite lancer la table on peut faire ça dans setup pour que ça soit en route pour toute l'application :
myTable.start()
Ensuite, il n'y a pas de miracle, il faut appeler répétitivement la méthode update() dans loop pour que la schedule table fonctionne :
myTable.update()
On peut également stopper une schedule table :
myTable.stop();
Je poste la bibliothèque et du code exemple plus tard