Bonjour @ninouid,
Ton problème tu peux le résoudre de cette façon, je t'ai fait un programme qui à partir de l'heure et des minutes que tu entres manuellement dans le moniteur série va te lancer une horloge à partir de ces deux paramètres :
enum {HEURES, MINUTES, HORLOGE} etatCourant;
uint8_t heures;
uint8_t minutes;
uint8_t secondes;
const byte tailleTab = 2;
char tabHeureMinute[tailleTab + 1]; // +1 car on doit avoir un caractère de fin de chaîne AZT en C : '\0'
unsigned long tempsPrecedant = 0;
const unsigned long interval = 1000;
void setup() {
Serial.begin(115200);
etatCourant = HEURES;
Serial.println("Veuillez saisir les heures : ");
}
void loop() {
switch (etatCourant) {
case HEURES:
if (traiterHeureMinute()) {
heures = atoi(tabHeureMinute);
Serial.println("Veuillez saisir les minutes : ");
etatCourant = MINUTES;
}
break;
case MINUTES:
if (traiterHeureMinute()) {
minutes = atoi(tabHeureMinute);
etatCourant = HORLOGE;
}
break;
case HORLOGE:
unsigned long tempsCourant = millis();
if (tempsCourant - tempsPrecedant >= interval) {
tempsPrecedant = tempsCourant;
secondes++;
if (secondes >= 60) {
secondes = 0;
minutes++;
if (minutes >= 60) {
minutes = 0;
heures++;
if (heures >= 24) {
heures = 0;
}
}
}
Serial.print(heures) ; Serial.print(" heure(s) ") ;
Serial.print(minutes) ; Serial.print(" minutes(s) ");
Serial.print(secondes) ; Serial.println(" seconde(s) ");
}
}
}
bool traiterHeureMinute () {
static byte index = 0;
int c = Serial.read();
if (c != -1) { // on a reçu un caractère
if (c == '\n') {
tabHeureMinute[index] = '\0'; // on termine la c-string
Serial.println(tabHeureMinute);
index = 0; // on se remet au début pour la prochaine fois
return true;
} else {
if ((c != '\r') && (index < tailleTab))
tabHeureMinute[index++] = (char) c; // on stocke le caractère et on passe à la case suivante
}
}
return false;
}
Bon c'est une approche mais il y en a d'autres ...
Il faut que tu sois en mesure de déterminer le moment où les variables heures et minutes ont été saisies et validées dans le moniteur série. Ensuite tu les traites (je t'explique au plus simple) ![]()
Voilà maintenant il faut aussi que tu travailles l'apprentissage du C C++ (dans la liste des tutos de @pandaroux007 tu trouveras ton bonheur).
Essaye de comprendre la fonction
bool traiterHeureMinute ()
Il faut que tu lises le tuto de @J-M-L : Ecouter le Port Série ou un keypad (applicable à 1 flux de données asynchrone )
J'ai fait ce programme hier mais tu n'avais pas mis en ligne le logigramme succinct de ton programme. il faudra que tu fasses des adaptations.
Je n'aime pas trop les String, je préfère les chaines AZT plus économes en mémoire mais si tu travailles sur un ESP32 par exemple ça peut le faire.
Bonne journée.
PS : je retourne à mes études ...
Ce programme est largement inspiré d'une des manières de coder de @J-M-L