Bonjour,
J’utilise un module GSM A6 avec la carte arduino mega.
Pour assurer la communication avec le module GSM A6 j’ai utilisé le Sérial1, et le Serial avec le PC.
Après réalisation du programme et consultation de divers forums, je suis parvenu à réaliser un programme qui extrait le texte des SMS reçus, et de les transférer dans une variable de type String. Cette variable sera par la suite transférée vers le PC via la communication série.
Après plusieurs essais, j’ai remarqué que le programme affiche correctement le texte du premier SMS reçu (Exemple SMS : @CDITEXT! Avec @ : Position de début et ! : Position de fin)
Le problème que j’ai remarqué, c’est que le premier SMS est réceptionné correctement, mais lorsque j’envoie un deuxième ou un troisième SMS de mon téléphone vers le numéro du module GSM, l’arduino retourne le texte du premier SMS. Et ceci est parfait statique et parfois aléatoire.
J’ai essayé de mettre les variables à zéro, mais c’est le même problème.
S’il vous plaît est-ce que quelqu'un peut m’aider à diagnostiquer et à résoudre ce bug de programme ?
String message = ""; // message reçu du module GMS
int start = 0; //Position caractére Start
int endsend = 0; // Position caractére fin
String code_alarme = ""; //Code alarme après traitement
int index = 0;
int i=0;
String recu_1,recu_2,recu_3;
int longeur=0;
String transfert;
void setup() {
// initialize both serial ports:
Serial.begin(9600);
Serial1.begin(9600); // Serial 1 Tx_18 , RX_19
delay(5000);
Serial1.println("AT"); // Lancement module GMS
delay(100);
Serial1.println("AT+CMGF=1"); // Lancement mode SMS
delay(100);
// Set module to send SMS data to serial out upon receipt
Serial1.println("AT+CNMI=2,2,0,0,0"); // En attente reception
delay(100);
}
void loop() {
// read from port 1, send to port 0:
if (Serial1.available()) {
message = Serial1.readString(); // Lire communication série avec module GSM
longeur=message.length(); // Lire longeur reçu
message.setCharAt(longeur-1,'\t'); // elimination dérnière ligne
message.trim(); // elimination des espace
transfert=message.substring(60,longeur); //Trasfert message dans variable transfert
Serial.println(transfert);
index=transfert.indexOf("@"); // Détection début SMS
Serial.println(index);
transfert=transfert.substring(index); //Extraire text à partir de début SMS
Serial.println(transfert);
delay(50);
if (index >= 0)
{
start = transfert.indexOf("@"); // Position Début
endsend = transfert.indexOf("!"); // Position fin
code_alarme = transfert.substring(start, endsend); // Copie position début jusqu'à fin (Attention ! non copier)
Serial.println(code_alarme);// Envoie via RS232 to PC le code de l'alarme
delay(50);
}
start = 0; // Reset position
endsend = 0; // Reset position
}
message ="";
}