enum EtatMouvement {AU_REPOS, DEPART, EN_MOUVEMENT};
struct Mouvement {
const char * nom;
EtatMouvement etat;
int positionActuelle;
int positionDepart;
int positionCible;
unsigned long debut;
unsigned long duree;
void allerA(int cible, unsigned long d) {
positionDepart = positionActuelle;
duree = d;
positionCible = cible;
etat = DEPART;
Serial.print(F("Réglage "));Serial.print(nom);
Serial.write('\t'); Serial.print(positionActuelle);
Serial.write('\t'); Serial.print(cible);
Serial.write('\t'); Serial.println(duree);
}
void tick() {
switch (etat) {
case AU_REPOS: break;
case DEPART: debut = millis(); etat = EN_MOUVEMENT; break;
case EN_MOUVEMENT:
int pos = map(millis() - debut, 0, duree, positionDepart, positionCible);
if (pos != positionActuelle) {
positionActuelle = pos;
Serial.print(nom); Serial.write('\t'); Serial.println(positionActuelle);
}
if (positionActuelle == positionCible) {
etat = AU_REPOS;
Serial.print(nom); Serial.println(F("\tA DESTINATION"));
}
}
}
};
Mouvement liste[] = {
{"TETE", AU_REPOS, 20},
{"JAMBE", AU_REPOS, 20},
{"BRAS", AU_REPOS, 20},
};
void setup() {
Serial.begin(115200);
liste[0].allerA(40, 10000);
liste[1].allerA(0, 10000);
liste[2].allerA(30, 10000);
Serial.println(F("C'EST PARTI"));
}
void loop() {
for (Mouvement &m : liste) m.tick();
}