Bonjour à tous,
J'ai trouvé pas mal de ressources sur ce forum à ce sujet mais rien qui réponde directement à la question que je me pose.
Je voudrais savoir s'il est possible (facilement) d'intégrer des valeurs (int ou float) dans un libellé texte qu'on passe en entrée d'une fonction. Y a t'il une ruse de coyote ou doit-on systématiquement jongler avec le sprintf ?
Je vous pose le contexte. J'ai deux cartes, une méga (centrale) et une uno+W5500 (connecter), les deux discutent en UART.
En temps normal, le connecter envoi périodiquement un octet de ping à la centrale pour signaler qu'il est toujours vivant, et la centrale lui envoi une trame toute les 5 minutes contenant les données des différents capteurs qui sont branchés dessus. Lorsque le connecter reçoit la trame, il exécute une requête GET sur un serveur que j'ai en ligne sur le net qui va stocker les valeurs dans une DB.
Je suis en train d'ajouter une fonctionnalité d'alerte, c'est à dire que si l'une des valeurs de température (par exemple) lue par la centrale dépasse un seuil prédéfini, la centrale doit envoyer une trame spécifique au connecter qui contient un message d'alerte. Le serveur Web recevant cette alerte, envoi immédiatement un email contenant le message. Pour signaler au connecter qu'il va recevoir une alerte et non une mesure, je fais précéder la trame par un octet valant 17.
Dans le code de ma centrale:
sensor_value[INDEX_TEMP_SYSTEM] = bme.readTemperature();
if (sensor_value[INDEX_TEMP_SYSTEM] >= thresold_high_system) {
sendAlert2Connecter("Surchauffe système","Une surchauffe du systeme a été détectée !");
}
Contenu de la fonction sendAlert2Connecter et déclaration du alert_connecter:
DynamicJsonDocument alert_connecter(300); // Preparation du JSON pour communication serie
void sendAlert2Connecter(char* type, char* message) {
if (connecter_connected){
Serial.println("[UART2] Envoi d'une alerte immédiate...");
ledUART(0,2,false,HIGH);
Serial2.write(17); // Octet d'identification
idleTime(300);
alert_connecter.clear();
/* Trame de communication Centrale -> Connecter */
alert_connecter["emitter_key"] = EMITTER_KEY;
alert_connecter["type"] = type;
alert_connecter["message"] = message;
serializeJson(alert_connecter, Serial2);
serializeJson(alert_connecter, Serial);
Serial.println("");
sayBip(440,100);
idleTime(100);
sayBip(440,100);
ledUART(0,2,false,LOW);
}
}
Donc dans mon exemple, quelle serait la méthode la plus simple pour intégrer directement le contenu de sensor_value[INDEX_TEMP_SYSTEM]
dans mon message à l'appel de la fonction sendAlert2Connecter
?
(genre sendAlert2Connecter("Surchauffe système","Une surchauffe du systeme a été détectée ${sensor_value[INDEX_TEMP_SYSTEM]}°C !")
Je sais pas si je suis bien clair... dites moi si vous comprenez pas ce que je veux dire