Encore une question de caractères et de pointeurs
Bonjour à à tous
Je stocke des messages d'évènements dans un tableau de pointeurs:
Code:
1 2 3 4 5 6 7
| char *notif[NB_NOTIF] = {" Perte du secteur", //0
" Le groupe n'a pas démarré", //1
" Le groupe a démarré", //2
" Le secteur est rétabli", //3
" Secteur absent, groupe non opérationnel" //4
" Le groupe n'est pas opérationnel", //5
" Nombre d'echecs max atteint; nouvel essai dans delai REESSAI"}; //6 |
Lorsqu' un ou plusieurs évènements se produisent, je souhaite ajouter devant le message, l'heure pour obtenir par exemple:
Citation:
16:34:15 Perte du secteur;
16:34:45 Le groupe a démarré;
Pour cela, lorsque l'évènement se produit, je passe à TRUE un drapeau valNotif[NB_NOTIF] puis j'obtiens l'heure correctement formatée que je charge dans un tableau d'heures hNotif[NB_Notif] ainsi:
Code:
1 2 3 4 5
| char buf[11];
valNotif[0]=true; //Perte du secteur
lectureHeure();
sprintf(buf," %02d:%02d:%02d ",hr,mn,sd);
hNotif[0]=buf; |
Puis, lorsque le moment est adéquat, je devrais pouvoir constituer un message affichant tous les évènements avec l'heure à laquelle il s'est produit:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| //************************préparation du message de notification***************
void notifAEnvoyer(){
String msg="";
for(i=0;i<NB_NOTIF;i++){
if(valNotif[i]){
msg += hNotif[i];
msg += notif[i];
msg += ";";
valNotif[i]=false;
}
}
envoiNotif(msg); |
Ma question: comment déclarer le tableau qui va recevoir les heures ?
Je sais que je pourrais utiliser un tableau de String pour hNotif, mais je souhaiterais le faire plus C++.
Peut-on se passer du String?
Merci edgarjacobs pour cette solution en effet beaucoup plus élégante que la mienne.
Une question concernant la partie affichage
Citation:
printf("%02d:%02d:%02d %s\n", notif[i].hh, notif[i].mm, notif[i].ss, notif_msg[notif[i].reason]);
Quelle est la syntaxe pour envoyer ce résultat vers ma routine d'envoi de notifications:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| //***********************Envoi notifications****************************************************
bool envoiNotif(const String &message) { // Push Envoyer un message
uint32_t broadcastingTime = millis();
String messagebody = R"({"type": "note", "title": "Control secteur", "body": ")" + message + R"("})";
sClient.setInsecure(); // en http
while(!sClient.connect(HOST, 443)) {
if(millis()-broadcastingTime > TIMEOUT){
Serial.println("La connexion a echoue !");
return false;
}
}
//Serial.println("Push emis");
//****Envoi message****
sClient.printf("POST /v2/pushes HTTP/1.1\r\nHost: %s\r\nAuthorization: Bearer %s\r\nContent-Type: application/json\r\nContent-Length: %d\r\n\r\n%s\r\n"\
, HOST, CLE, messagebody.length(), messagebody.c_str());
broadcastingTime = millis();
while(!sClient.available()){
delay(1); //nécessaire au fonctionnement
if (millis()-broadcastingTime > TIMEOUT) {
Serial.print("Client Timeout");
sClient.stop();
return false;
}
}
while (sClient.available()) { //Réception d'une réponse
//Serial.printf("Reponse en: %4ld ms\n", millis() - broadcastingTime);
String line = sClient.readStringUntil('\n');
if (line.startsWith("HTTP/1.1 200")) {
sClient.stop();
lcd.clear();
return true;
}
}
return false;
} |
Est-ce que je peux tenter:
Code:
1 2 3 4
|
char buf[80];
sprintf(buf,"%02d:%02d:%02d %s\n", notif[i].hh, notif[i].mm, notif[i].ss, notif_msg[notif[i].reason]);
if(envoiNotif(buf)){ ..... } |
Après la mise en place de cette solution, au moment de constituer la notification complète de tous les évènements, je m'aperçois que je suis revenu à mon dilemme d'origine: comment regrouper tous les évènement pour les transmettre à la routine d'envoi des notifications?
Je viens de trouver une solution qui fonctionne:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| //************************préparation du message de notification***************
void notifAEnvoyer(){
String msg="";
char buffer[80];
if(nbr_notif){
for(i=0;i<nbr_notif;i++){
sprintf(buffer,"%02d:%02d:%02d %s; ", notif[i].heure, notif[i].minute, notif[i].seconde, notif_msg[notif[i].raison]);
msg+= buffer;
}
}
nbr_notif=0;
//Serial.println(msg);
envoiNotif(msg);
} |
Peut-être y-a-t'il une solution plus élégante?
En fait, peut-on se passer d'un String (sans jeu de mots)?