Programme GSM M95 v2.0

Dependencies:   mbed

Fork of mbed_m95 by TeamLegrand

Revision:
1:be115e3a98ae
Parent:
0:a2a2c45b4247
Child:
2:f3d64c53f369
diff -r a2a2c45b4247 -r be115e3a98ae main.cpp
--- a/main.cpp	Sun Mar 04 13:58:07 2018 +0000
+++ b/main.cpp	Sun Mar 11 20:55:56 2018 +0000
@@ -6,8 +6,9 @@
  void power_on();   // to turn on le modem gsm
  void led1_blink(); // to blink led1
  void reset();      // to reset gsm modem
- void init_gsm();   // to init gsm modem 
- 
+ void init_gsm();   // to init gsm modem
+ void data_gsm();    //to receive a reply from gsm
+  
  DigitalOut led1(LED1);
  DigitalOut led2(LED2);
  DigitalOut led3(LED3);
@@ -21,15 +22,18 @@
 Serial pc(USBTX, USBRX); // creation objet -> stream serial USB
 Serial gsm(p9,p10); // creation objet -> stream serial uart p9 et p10
 
-char numero_destinataire[20]={"06XXXXXXXX"};;
+char numero_destinataire[20]={"xxxxxxxxxx"};;
 char message_transmis[100]={"Hello world ! Lycee Cabanis Brive SN2 !"};
-char code_pin[5]={"1234"};
-char reponse_gsm[20];
+char code_pin[5]={"0000"};
+char reponse_gsm[256];
 int element=0;  //indice pour tableau
+int octet=0;
 
 int main() 
  {
+    //gsm.attach(&callback_rx);
     //gsm.baud(9600);  // vitesse uart gsm 9600 bauds
+    //gsm.format(8,Serial::None,1); //Serial frame format
     for (int i=0;i<20;i++) reponse_gsm[i]=0; // initialisation tableau réponses
     
     pc.printf("Lycee cabanis - Brive-la-Gaillarde - date : 20180304");
@@ -55,13 +59,11 @@
             pc.printf("%s",message_transmis);
             pc.putc(0x1A); // envoi ctrl+Z
             pc.printf("\n\r>");
-            wait(30);   // l'envoi du message SMS prends en 120 s maximum
+                                
+            wait(15);   // l'envoi du message SMS prends en 120 s maximum
             
-            /*while (gsm.readable()){
-            reponse_gsm[element]=gsm.getc();
-            element++;
-            }
-            pc.printf("Reponse modem gsm = s%\r",reponse_gsm); // monitoring*/
+            for (int i=0;i<20;i++) reponse_gsm[i]=0; // initialisation tableau réponses
+            //reply_gsm();  // réponse du gsm
             
             pc.printf("Appuyez sur ''bp_enter'' pour envoi SMS");
             pc.printf("\n\r>");
@@ -70,21 +72,30 @@
 }
        
 // to turn on_off le modem gsm m95
-void power_on_off(){
+void power_on(){
     pwrkey=1;   // création impulsion turn on sur ligne pwrkey
-    wait(1);
-    //pwrkey=1;
-    // attente de l'état turn on sur la ligne status
-    while(status==0)led1_blink(); 
+    wait(3);
+    
+    while(status==0);   // attente démarrage modem m95
+    led1_blink();
+    led1=1; 
     pwrkey=0;
     }
     
+void power_off(){
+    pwrkey=1;   // création impulsion turn on sur ligne pwrkey
+    wait(0.8);
+    pwrkey=0;
+    while(status==1);
+    led1=0; 
+    }
+    
 // to turn on_off le modem gsm m95
 void reset(){
     emerg_off=1;  // création impulsion turn on sur ligne emerg_off
-    wait(0.1);
+    wait(0.7);
     emerg_off=0;
-    wait(3);
+    wait(12);
     }
 
 // to blink led1    
@@ -98,34 +109,125 @@
             wait(0.250);
         }
     }
- 
- void init_gsm(){   
-    pc.printf("Patientez quelques instants : initialisation du modem gsm");
+ // Recevoir une réponse du gsm    
+/*void callback_rx() {
+    // Note: you need to actually read from the serial to clear the RX interrupt
+    reponse_gsm[octet++]=gsm.getc());
+    octet = octet++;
+}*/
+void data_gsm(){   
+    for (int i=0;i<255;i++) reponse_gsm[i]=0; // initialisation tableau réponses
+    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>");
-    pwrkey=0;
-    emerg_off=0;
-    power_on_off(); //modem on
-    gsm.printf("AT+CPIN=%s\r",code_pin); // stockage du PIN
-    wait(5);
-    
-    pc.printf("AT+CPIN=%s\r",code_pin); // monitoring
-    pc.printf("\n\r>");
-    /*while (gsm.readable()){
+    }
+
+void reset_buffer(){
+    while (gsm.readable()){
             reponse_gsm[element]=gsm.getc();
             element++;
             }
-    pc.printf("Reponse modem gsm = s%\r",reponse_gsm); // monitoring*/
-        
-    gsm.printf("AT+CMGF=1\r"); // sélection du format du message SMS
-    wait(0.3);
+        } 
+    
     
-    pc.printf("AT+CMGF=1\r"); // monitoring
+void init_gsm(){   
+    pc.printf("Patientez quelques instants : initialisation du modem gsm");
+    pc.printf("\n\r>");
+    wait(5);    //tempo pour établissement tension alim. modem
+    power_off(); // modem off
+    pc.printf("Appuyez sur ''bp enter'' pour demarrer le modem gsm");
     pc.printf("\n\r>");
-    /*while (gsm.readable()){
-            reponse_gsm[element]=gsm.getc();
-            element++;
-            }
-    pc.printf("Reponse modem gsm = s%\r",reponse_gsm); // monitoring
-    pc.printf("\n\r>");*/
+    while(bp_fire==0);
+    
+    /*led1=1;
+    pwrkey=1;
+    wait(5);
+    pwrkey=0;*/
+    //emerg_off=0;
+    //reset();    // modem off (shutdowm)
+    //wait(5);
+    power_on(); // modem on
+    
+    wait(10);
+    //reply_gsm(5);  // réponse du gsm;
+    //reply_gsm(11);  // réponse du gsm;
+    
+    gsm.printf("AT\r"); // report erreur gsm
+    data_gsm();
+    wait(1);
+    pc.printf("AT\r");
+    
+    gsm.printf("AT?\r");
+    pc.printf("AT?\r");
+    data_gsm();   
+    gsm.printf("ATE0\r"); // pas d'echo vers le DTE pour les l'envoi des commandes
+    wait(1);
+    gsm.printf("ATE0?\r"); // 
+    pc.printf("ATE0?\r"); // 
+    data_gsm();
+    
+    
+    
+         
+    
+    gsm.printf("AT+CSQ\r"); // vitesse transmission fixée (recommandé)
+    wait(1);
+    gsm.printf("AT+CSQ?\r"); // vitesse transmission fixée (recommandé)
+    pc.printf("AT+CSQ\r"); // vitesse transmission fixée (recommandé)
+    data_gsm();
+    
+    
+    gsm.printf("AT+CREG?\r"); // enregistrement du réseau
+    wait(1);
+    pc.printf("AT+CREG?\r"); // 
+    data_gsm();
+    
+    gsm.printf("AT+COPS?\r"); // enregistrement du réseau
+    wait(1);
+    pc.printf("AT+COPS?\r"); // 
+    data_gsm();
+           
+    gsm.printf("AT+IPR=9600\r"); // vitesse transmission fixée (recommandé)
+    wait(1);
+    gsm.printf("AT+IPR?\r"); // vitesse transmission fixée (recommandé)
+    pc.printf("AT+IPR?\r"); // vitesse transmission fixée (recommandé)
+    data_gsm();
+       
+    gsm.printf("AT&W\r"); // stokage vitesse
+    wait(1);
+    gsm.printf("AT&W?\r"); // stokage vitesse
+    pc.printf("AT&W?\r"); // stokage vitesse
+    data_gsm();
+    
+    gsm.printf("AT+CMGF=1\r"); // sélection du format du message SMS
+    wait(2);
+    gsm.printf("AT+CMGF?"); // sélection du format du message SMS
+    pc.printf("AT+CMGF?"); // sélection du format du message SMS
+    data_gsm();
+    
+    gsm.printf("AT+CMEE=2\r"); // report erreur gsm
+    wait(1);
+    gsm.printf("AT+CMEE?"); // report erreur gsm
+    pc.printf("AT+CMEE?"); // report erreur gsm
+    data_gsm();
+       
+    gsm.printf("AT+CPIN=%s\r",code_pin); // stockage du PIN
+    wait(6);
+    gsm.printf("AT+CPIN?"); // stockage du PIN
+    pc.printf("AT+CPIN?"); // stockage du PIN
+    data_gsm();
+    
+    
+    
+    gsm.printf("AT+CMGF=1\r"); // sélection du format du message SMS
+    wait(2);
+    gsm.printf("AT+CMGF?"); // sélection du format du message SMS
+    pc.printf("AT+CMGF?"); // sélection du format du message SMS
+    data_gsm();
+    
+    
     } 
-    
\ No newline at end of file