![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
v3.0
Diff: main.cpp
- Revision:
- 0:c9055116ebbd
diff -r 000000000000 -r c9055116ebbd main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jun 06 06:09:22 2018 +0000 @@ -0,0 +1,208 @@ +#include "mbed.h" +#include "MODSERIAL.h" +#include "MACROS.h" +#include <string> + +char position[16]={"45.1234,1.12345"}; +char reponse_gsm[256]; +int element=0; + +Serial pc(USBTX,USBRX); +MODSERIAL gsm(p9,p10); + +DigitalOut pwrkey(p21); +DigitalOut emerg_off(p22); +DigitalIn status(p11); + +void reception(); +void clear_pc(void); +void clear_buffer(void); +void power_on(); +void init_gsm(); +void data_gsm(); + +int main() { + + for (int i=0;i<20;i++) reponse_gsm[i]=0; //initialisation tableau réponse + + gsm.baud(115200); + pc.baud(115200); + + clear_buffer(); + pc.printf("Le buffer serie est vide\r\n"); + wait(2); + clear_pc(); + pc.printf("Le buffer pc est vide\r\n"); + + init_gsm(); + clear_buffer(); + while(1){ + + reception(); + wait(5); + } + +} + + +void init_gsm(){ + + power_on(); + wait(2); + + pc.printf("=======================\r\n"); + pc.printf("Configuration du module\r\n"); + pc.printf("=======================\r\n"); + + gsm.printf("AT\r"); + wait(0.3); + pc.printf("AT\r\n"); + data_gsm(); + gsm.printf("AT+CPIN=1234\r"); // je rentre le code pin + wait(5); + pc.printf("AT+CPIN=1234\r\n"); + data_gsm(); + gsm.printf("ATE0\r"); // pas d'echo vers le DTE pour les l'envoi des commandes + wait(0.3); + gsm.printf("AT+CMGF=1\r"); // je passe en mode texte + wait(0.3); + gsm.printf("AT+CNMI=2,1,0,0,0\r"); + wait(0.3); + gsm.printf("AT+CMGD=1,4\r"); + wait(0.3); + } + +void data_gsm(){ + for(int i=0;i<255;i++) reponse_gsm[i]=0; + element=0; + while(gsm.readable()){ + reponse_gsm[element]=gsm.getc(); + element++; + } + for(int i=0; i<element; i++)pc.printf("%c",reponse_gsm[i]); + pc.printf("\n\r"); + +} + +void power_on(){ + pwrkey=1; + wait(3); + while(status==0); + wait(1); + pwrkey=0; + pc.printf("\n | Module connected | \r\n"); +} + +void clear_buffer(){ + char char1; + while(gsm.readable()){ + char1 = gsm.getc(); + } + return; + } + +void clear_pc(){ + char char1; + while(pc.readable()){ + char1 = pc.getc(); + pc.printf("Le buffer pc est vide\r\n"); + } + return; + } + +void reception(){ + int notification =0 ; + int nouveau_message = 0 ; + char sms[256]; + char sms_brut[256]; + char num_mem[3]; + int longueur_msg1=0; + int longueur_msg2=0; + char numero[12]; + + pc.printf("Reception !\r\n"); + + // attente notification + while(gsm.readable()){ + sms[longueur_msg1] = gsm.getc(); + pc.printf("%c ",sms[longueur_msg1]); + longueur_msg1++; + nouveau_message = 1 ; + } + sms[longueur_msg1] = '\0'; + + notification = 0 ; + if (nouveau_message == 1) + { + pc.printf("Nouveau message : %s \r\n", sms); + + if (strncmp(sms,"\r\n+CMTI",7)==0) + {notification = 1 ; + pc.printf("Nouvelle notification ! \r\n"); + } + else + {notification = 0 ; + pc.printf("Pas de notification ! \r\n"); + } + nouveau_message = 0 ; + // si notification + if (notification == 1) + { + num_mem[0]=sms[14]; + num_mem[1]=sms[15]; + num_mem[2]='\0'; + pc.printf("Notification recue : %s, longueur_msg= %d \r\n", sms, longueur_msg1); + pc.printf("Numero memoire : %s \r\n", num_mem ); + // lecture memoire sms + notification = 0 ; + + pc.printf("AT+CMGR=%s",num_mem ); + gsm.printf("AT+CMGR=%s\r",num_mem ); + wait(1); + + + + longueur_msg2 = 0 ; + while(gsm.readable()){ + sms[longueur_msg2] = gsm.getc(); + pc.printf("%c ",sms[longueur_msg2]); + longueur_msg2++; + } + sms[longueur_msg2] = '\0'; + pc.printf("sms recu : %s, longueur_msg= %d \r\n", sms, longueur_msg2); + // suppression en tete + numero[0]=sms[23]; + numero[1]=sms[24]; + numero[2]=sms[25]; + numero[3]=sms[26]; + numero[4]=sms[27]; + numero[5]=sms[28]; + numero[6]=sms[29]; + numero[7]=sms[30]; + numero[8]=sms[31]; + numero[9]=sms[32]; + numero[10]=sms[33]; + numero[11]=sms[34]; + numero[12]='\0'; + pc.printf("Le numero du message : %s \r\n", numero); + for (int i=0;i<100;i++) + { + sms_brut[i]= sms[66+i]; + } + // affichage message brut + pc.printf("sms brut : %s", sms_brut); + + if (strncmp(sms_brut,"POS?",4)==0) + { pc.printf("Demande de position !"); + + pc.printf("AT+CMGS=\"%s\"\r",numero); + gsm.printf("AT+CMGS=\"%s\"\r",numero); + gsm.printf("%s",position); + gsm.putc(0x1A); + pc.printf("SMS position parti !"); + clear_buffer(); + pc.printf("buffer vide !"); + } + } + } +} \ No newline at end of file