Bonjour à tous,
J’ai un code qui va sauver des valeur dans une structure
typedef struct Value {
char *varName;
char *ctext;
float varValue;
} Value;
Dans mon contructuer, j’ai aussi aussi et il utlise Malloc et j’aime pas trop…
#define MAX_VALUE 9
val = (Value *)malloc(MAX_VALUES*sizeof(Value));
Dans mon code, il fait appel à cette fonction, pui la dernière envoie les données au serveur distant
fona.ubidotsAdd("imei", 123, imei);
fona.ubidotsAdd("valid", 1);
fona.ubidotsAdd("latitude", latitude);
fona.ubidotsAdd("longitude", longitude);
fona.ubidotsAdd("battery", battery);
fona.ubidotsAdd("localisation",0, "GSM");
fona.ubidotsAdd("tower", 0, celltower0);
fona.ubidotsAdd("timestamp", 0, timestamp);
Serial.println(F("Sending to Ubidots"));
fona.ubidotsSendAll(TOKEN);
Ca fonctionne. Le tout est bien envoyé.
NB: A savoir quand ubidotsSendAll() return true, ‘currentValue’ prend la valeur de 0;
Mais voilà, quand mon code dans loop() recommence et il repasse par les fonctions
il plante dès qu’il rencontre la premiere
fona.ubidotsAdd("imei", 123, imei);
[...]
Voici le code de ubidotsAdd()
void Adafruit_FONA::ubidotsAdd(char *variable_id, float value, char *ctext1) {
Serial.print(F("Ubidots: "));
Serial.print(variable_id);
Serial.print(F(", ")); Serial.print(value);
Serial.print(F(", ")); Serial.println(ctext1);
(val+currentValue)->varName = variable_id;
(val+currentValue)->ctext = ctext1;
(val+currentValue)->varValue = value;
currentValue++;
if (currentValue > MAX_VALUES) {
currentValue = MAX_VALUES;
}
}
NB: A savoir quand ubidotsSendAll() return true, ‘currentValue’ prend la valeur de 0;
Je ne sais pourquoi, mais je pense que les valeur enregistré dans ‘val’ ne sont pas effacée et il doit avoir un problème de saturation.
En fait, je vous dis honnetement, ce code n’est pas le mien et je l’ai repris et je ne comprends pas trop (val+currentValue) . Je ne connais pas trop les Structure (Struct)
Je pense qu’il vous manque des infos pour m’aider, alors n’hésitez pas demande ce qu’il vous manque.
Je me demande aussi comment faire autrement pour que à chaque fois que Adafruit_FONA::ubidotsAdd() est appelé, il garde les données dans une stuct jusqu’à ce qu’elles ont été traité et peuvent être détruite…
Est-ce que Malloc est indispensable?
¨Voili, voilà… :o