#include //Librairie utilisée pour communiquer avec le shield GSM/GPRS // Initialisation du module GSM/GPRS // Initialisation du port série 7 et 8 pour communiquer avec le shield GPRS SoftwareSerial mySerial(7, 8); // Mémoire tampon de type string pour les messages du shield GPRS String msg = String(""); // Est mis à 1 quand le prochain message du shield GPRS contiendra le contenu du SMS int SmsContentFlag = 0; //******************************************************* // VARIABLES A MODIFIER AVEC SES DONNEES PERSOS //******************************************************* // Code PIN de la carte SIM qui s'insère dans le shield GSM : A remplacer ! String SIM_PIN_CODE = String( "5005" ); //************************************************** // FONCTION PRINCIPALE SETUP D'INITIALISATION //************************************************** void setup() { Serial.begin(19200); mySerial.begin(19200); delay(100); mySerial.println("ATZ"); mySerial.println("AT"); // Envoi d'une commande pour configuration du debit automatique delay(1000); mySerial.println("AT+IPR=19200"); // Mise en mémoire du débit delay(1000); mySerial.print("AT+CPIN="); // Envoi du code PIN retourne ERREUR si il est déjà présent (ce qui n'est pas grave...) mySerial.println( SIM_PIN_CODE ); delay(1000); mySerial.println("AT+CNMI=2,2,0,0,0"); mySerial.println("AT+CMGF=1"); // GSM en mode texte } //************************************************************************************************************** //FONCTION PRINCIPALE LOOP QUI S'EXECUTE EN BOUCLE (COEUR DU PROGRAMME) ATTEND LES INFORMATIONS DU SHIELD GSM //************************************************************************************************************** void loop() { char SerialInByte; if(Serial.available()) { mySerial.print((unsigned char)Serial.read()); } else if(mySerial.available()) { char SerialInByte; SerialInByte = (unsigned char)mySerial.read(); // Si le message se termine par un alors traiter le message if( SerialInByte == 13 ) { // Stocke le caractère dans le buffer de message ProcessGprsMsg(); } if( SerialInByte == 10 ){ } else { // Stocke le caractère dans la mémoire tampon réservé au message msg += String(SerialInByte); } } } // FONCTION QUI EXECUTE UNE COMMANDE VERS LA VERA SUR LA BASE DU CONTENU D'UN SMS //******************************************************************************************** // FONCTION QUI DEMANDE AU SHIELD GPRS D'UTILISER LE MODE TEXT POUR LES MESSAGES //******************************************************************************************* void GprsTextModeSMS() { mySerial.println( "AT+CMGF=1" ); } // FONCTION QUI LIT LA POSITION DU SMS //******************************************* void GprsReadSmsStore( String SmsStorePos ) { mySerial.print( "AT+CMGR=" ); mySerial.println( SmsStorePos ); } // FONCTION QUI EFFACE LE CONTENU DE LA MEMOIRE TAMPON DES MESSAGES DU GPRS SHIELD //********************************************************************************************* void ClearGprsMsg() { msg = ""; } //*************************************************************************************** // FONCTION QUI INTERPRETE LES MESSAGES DU SHIELD GPRS ET AGIT EN CONSEQUENCE //*************************************************************************************** void ProcessGprsMsg() { // Message non sollicité quand un SMS arrive // Lecture du stockage SMS via l'UART (résultat de la requete GprsReadSmsStore) if( msg.indexOf( "+CMT:" ) >= 0 ) { // Le prochain message contiendra le contenu du SMS SmsContentFlag = 1; // Les ligne suivantes sont essentielle pour ne pas effacer le flag! ClearGprsMsg(); return; } // le message +CMGR précédent indiquait que le message suivant du Shield GPRS contient le corps du SMS if( SmsContentFlag == 1 ) { String latitude = msg.substring(0,10); String longitude = msg.substring(11,21); Serial.print(100); Serial.println(latitude); delay(500); Serial.print(10000); Serial.println(longitude); } ClearGprsMsg(); // Toujours mettre le flag à 0 SmsContentFlag = 0; }