v3.0

Dependencies:   MODSERIAL mbed

Files at this revision

API Documentation at this revision

Comitter:
Quentin19
Date:
Wed Jun 06 06:09:22 2018 +0000
Commit message:
Progamme final GSM Quectel M95

Changed in this revision

MODSERIAL.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MODSERIAL.lib	Wed Jun 06 06:09:22 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/AjK/code/MODSERIAL/#ae0408ebdd68
--- /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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jun 06 06:09:22 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/5aab5a7997ee
\ No newline at end of file