Bonjour, je voudrais mettre dans deux variables H et M, heures et minutes envoyées à une horloge Arduino.
Pour l'instant je me contente de ce code qui fonctionne bien:
if (Serial.available() > 0)
{
int data = Serial.read();
switch (data)
{
case '1': { //si je reçois '1' j'ajoute 1 à la variable h (qui sont les heures)
h ++;
}
break;
case '2': { //si je reçois '2' j'ajoute 5 à la variable h
h = h + 5;
}
break;
case '3': { //si je reçois '3' j'ajoute 1 à la variable m (minutes)
m = m ++;
}
break;
Et ainsi de suite.
Pour ne pas passer par toutes ces manipulations, je voudrais envoyer les heures et les minutes réelles et les introduire dans les variables respectives.
J'ai déjà beaucoup cherché sur internet mais sans succès.
Merci à celui qui pourrait m'aider.
Si j'ai bien compris le problème, voici une fonction qui permet de récupérer l'heure depuis les caratères envoyés.
Tu dois envoyer l'heure au format HHhMM avec HH les heures bien sûr et MM les minutes
Exemple : 15h36
if (Serial.available())
{
String input = Serial.readStringUntil('\n'); // lit jusqu'à un retour à la ligne
lireHeureDepuisString(input);
// Debug : Affiche les valeurs pour vérifier
Serial.print("Heures : ");
Serial.println(h);
Serial.print("Minutes : ");
Serial.println(m);
}
A noter que les variables h et m doivent être accessible depuis la fonction lireHeureDepuisString() bien sûr. A toi de gérer le scope ou faire un passage par référence.
Je l'envoie avec un petit programme que j'ai réalisé avec app Inventor mais ça marche aussi avec Sera Bluetooth.
En fait il s'agit d'envoyer un seul chiffre à la fois et le code arduino sait ce qu'il doit faire en reçevant ces chiffres.
Voilà, j'ai trouvé un peu de temps pour l'essai. J'ai recopié tel quel le code en déclarant les variables en tête pour qu'elles soient toujours disponibles.
Quand j'envoie (12h20 par exemple), la réception est bonne mais dans le moniteur série les heures et les minutes sont toujours à zéro.
Ai-je commis une erreur ?
int m;
int h;
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available())
{
String input = Serial.readStringUntil('\n'); // lit jusqu'à un retour à la ligne
lireHeureDepuisString(input);
// Debug : Affiche les valeurs pour vérifier
Serial.print("Heures : ");
Serial.println(h);
Serial.print("Minutes : ");
Serial.println(m);
}
}
void lireHeureDepuisString(String timeStr)
{
int hIndex = timeStr.indexOf('h');
if (hIndex != -1 && hIndex >= 1 && hIndex <= 2 && timeStr.length() >= hIndex + 3)
{
String heureStr = timeStr.substring(0, hIndex);
String minuteStr = timeStr.substring(hIndex + 1);
h = heureStr.toInt();
m = minuteStr.toInt();
}
}
Je serais ravi de marquer que ce topic est résolu mais après avoir épluché touttes les actions possibles sur cette page je n'ai finalement pas trouvé comment le faire...
Je suis désolé d'encore revenir vers vous, c'est ma premiere fois