Bonjour à tous,
J'aimerais simplement l'avis de vrais développeurs arduino sur le code suivant, car cela fait maintenant un bout de temps que je tourne en rond.
CE QUE JE SOUHAITE FAIRE
Mon programme reçoit des instructions par SMS. Or, lorsqu'il reçoit un SMS et qu'il traite le bout de code correspondant à l'instruction reçue, il est possible que d'autres instructions lui soient envoyées entre temps
D'après ce que je sais, les SMS en attente sont stockées dans la mémoire du modem du shield GSM mais je n'en suis pas sûr, je ne retrouve pas ma source.
J'aimerais que mon programme ignore ces instructions en attente, et donc, que les SMS reçus alors qu'il était déjà occupé à autre chose soient effacés.
C'est la fonction sms.flush()
qui me pose problème. Cette fonction se trouve dans la librairie GSM.h, qui est intégrée à l'IDE Arduino par défaut.
- Déjà première incompréhension : la page de référence affirme que flush() efface la mémoire du modem des "messages envoyés".
- Mais d'un autre côté, l'exemple de réception de SMS officiel (ReceiveSMS) utilise bel et bien
sms.flush()
pour vider la mémoire du modem de messages reçus... Ce qui me laisse penser que la fonction vide simplement le modem (mais encore une fois, je ne suis pas certain puisque dans mon cas ça ne fonctionne pas complètement ; j'avais posé la question en anglais avant d'apprendre l'existence du forum français, mais je crois que je n'ai pas vraiment compris la réponse).
CE QUE J'AI FAIT
Voici mon code :
void SuppressionSMS(){
int NbMessage = 0;
Serial.print(F("["));
do{
sms.flush();
NbMessage++;
} while (sms.available() > 0);
Serial.print(NbMessage);
Serial.print(F(" message(s)"));
Serial.println(F(" efface(s)]\n"));
}
La fonction SuppressionSMS
est appelée après la fin d'un envoi de message.
- Par exemple, l'arduino reçoit un SMS avec l'ordre d'allumer une LED
- Il effectue l'opération
- puis envoie un SMS indiquant que l'opération est effectuée, que la LED allumée
- C'est là que SupressionSMS est appelée
Avec la fonction do()
, j'espérais forcer l'arduino à effacer non seulement la première instruction reçue et le SMS de réponse envoyé, mais également toute instruction reçue entre temps.
Mais ce n'est pas le cas : si j'envoie 5 SMS avec des instructions, celles-ci sont traitées les unes après les autres, ce qui n'est pas ce que je veux. Y-a-t'il un souci dans mon utilisation de do()
?
Pourquoi est-ce que je veux effacer les instructions en attente ?
Parce que sinon, le programme plante souvent. Si ces mêmes instructions sont envoyées après que chacune d'entre elle ait reçue sa réponse de l'arduino, le programme ne plante pas.
Mais si j'envoie ces instructions les unes à la suite des autres sans me soucier de ce que le programme ait eu le temps de traiter celles déjà reçues ou pas, y a toujours un moment où ça coince.
Voilà pourquoi je cherche à éliminer les instructions reçues en attente de traitement.
LE MATOS
Arduino UNO + GSM Shield 2 (SIM Sosh)
Je vous remercie d'avance pour vos conseils...
Ps : si quelqu'un sait où je peux trouver les fichiers GSM.h et GSM.cpp dans mon Mac, ça m'aiderait pour aller voir ce qui s'y trame...