Angelo Carrieri / Mbed 2 deprecated ATCommands

Dependencies:   mbed

Revision:
1:7f5f80b47892
Parent:
0:3eda4839be5c
Child:
2:52b0e1971195
--- a/main.cpp	Mon Apr 23 14:11:40 2018 +0000
+++ b/main.cpp	Fri May 04 15:23:13 2018 +0000
@@ -7,9 +7,9 @@
 #include "ATCmdParser.h"
 #include "UARTSerial.h"
 
-// Diumensione massima del vettore TxB e del vettore RxB
-#define TxBDIM 20
-#define RxBDIM 20
+// Dimensione massima dei vettori MRxB e ARxB
+#define MRxBDIM 400
+#define ARxBDIM 400
 
 // Numero dei byte da inviare allo SLAVE per l'accensione del led
 #define NumByte 16
@@ -17,83 +17,375 @@
 // Configurazione della porta seriale del computer
 Serial pc(USBTX, USBRX);     
 
-DigitalOut led(LED1);
+DigitalOut led(LED2);
 
-// Configurazione della porta UART
-// UARTSerial UART(PA_2,PA_3,9600);
-
-UARTSerial serial = UARTSerial(PA_2, PA_3);
+// Configurazione della porta seriale UART
+UARTSerial serial = UARTSerial(PA_9, PA_10);
 ATCmdParser at = ATCmdParser(&serial, "\r\n");
 
-char buffer[100];
-
-char TxB[TxBDIM];
-char RxB[RxBDIM];
-char x[10];
+// Configurazione dei parametri della SPI
+SPI myspi(PA_7, PA_6, PA_5, NC);
+     
+char MRxB[MRxBDIM];
+char ARxB[ARxBDIM];
+char c;
 
 // Vettore che conterrà i byte da trasmettere al led
-// uint8_t VettoreLED[NumByte];
+uint8_t VettoreLED[NumByte];
     
 int i=0;
 int j=0;
 
+int E=0;
+int R=0;
+int ER=0;
+int ERR=0;
+
+int finelis=0;
+int stoplis=0;
+
+/*
 int TxSIZE;
-int RxSIZE;
+int MRxBSIZE;
+int ARxBSIZE; */
 
 volatile char input;
-volatile bool bStop;
+
+// Funzione per l'emissione di luce verde tramite l'interfaccia SPI
+void LedGREEN();
+
+// Funzione per l'emissione di luce rossa tramite l'interfaccia SPI
+void LedRED();
+
+// Funzione per lo spegnimento del led tramite l'interfaccia SPI
+void LedOFF();
+
+// Funzione per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta al comando digitato
+void GestERR1();
+
+// Funzione per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta alla sequenza prestabilita di comandi
+void GestERR2();
 
 
 int main()
 {
+    
+    // Configurazione del baud rate per la comunicazione col computer
     pc.baud(9600);
-
-
+    
+    // Configurazione dei parametri per l'interfaccia SPI
+    myspi.format(16, 0);
+    myspi.frequency(3333333.3);
+    
+    printf("\r\n");
+    printf("            PROGRAMMA PER L'INVIO DI COMANDI AT SU PORTA SERIALE\r\n");
+    printf("______________________________________________________________________________\r\n");
+    printf("\r\n");
+    printf("  ---------------------------------------------------------------\r\n");
+    printf(" | Premere 'm' per inserire un comando AT                        |\r\n");
+    printf(" | Premere 'a' per inviare la sequenza automatica di comandi AT  |\r\n");
+    printf(" | Premere 'e' per uscire dal programma                          |\r\n");
+    printf("  ---------------------------------------------------------------\r\n");
+    printf("______________________________________________________________________________\r\n");
+    printf("\r\n");
 
-while(1)
-{
-    if ((at.send("AT") && at.recv("OK"))==1)
+    while(1)
     {
-        printf("Rilevato");
-        led=1;
-    }
-}   
-  /*  at.send("AT\r\n");
+     
+        // Reset vettore MRxB
+        for(i=0;i<MRxBDIM;i++)
+        {
+            MRxB[i]='\0';
+        }
+    
+        // Reset vettore ARxB
+        for(j=0;j<ARxBDIM;j++)
+        {
+            ARxB[i]='\0';
+        }
+        
+        
 
-    if (at.recv("OK")==true) 
-    {
-        printf("Rilevato");
-    }
+        input=pc.getc();
+    
+        if((input=='m')||(input=='M'))
+        {
+            
+            
+            printf("Inserire il comando:  ");
+            
+            while(1)
+            { 
+                char c = pc.getc();
+                pc.putc(c);
+                at.write(&c,1);
     
-    else
+                if(c=='\r') {goto esc;}
+            }
+        
+            esc:
+            
+            printf("\r\n\r\nRisposta:\r\n");
+ 
+            at.read(MRxB, MRxBDIM);
+        
+            for(i=0;i<MRxBDIM;i++)
+            {
+                pc.printf("%c",MRxB[i]);
+            }
+            
+            printf("______________________________________________________________________________\r\n");
+            printf("\r\n");
+            
+            GestERR1();
+            
+        } // End if
+         
+        if ((input=='a')||(input=='A'))
         {
-        at.read(buffer,2);  
-        printf("\r\nRisposta:%c",*buffer);
-        }*/
+            printf("...invio della sequenza automatica di comandi..."); 
+            printf("\r\n");      
+            at.send("AT");
+            at.send("AT+CREG?");
+     
+            printf("\r\nRisposta:\r\n");
+ 
+            at.read(ARxB, ARxBDIM);
+        
+            for(i=0;i<ARxBDIM;i++)
+            {
+                pc.printf("%c",ARxB[i]);
+            }
+        
+            printf("______________________________________________________________________________\r\n");
+            printf("\r\n");
+        
+            GestERR2();
+        
+         } // End if
+         
+         if ((input=='e')||(input=='E'))
+         {
+             printf("Il programma e' stato chiuso\n\r\n\r");
+             LedOFF();
+             led=0;
+             exit(0);
+         }
 
+     
+    } // End while
 
+}    
 
-    // reset vettore in trasmissione
-   /* for(i=0;i<TxBDIM;i++)
-    {
-        TxB[i]='\0';
-    }
+void GestERR1()
+{
+            
+            finelis=0;
+            
+            E=0;
+            R=0;
+            ER=0;
+            ERR=0;
+            
+            // Ciclo per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta al comando digitato
+            for(i=0;i<MRxBDIM;i++)
+            {
+                if(ERR==0)
+                { 
+                    if((MRxB[i])==' ') {goto salto;}
+                
+                    if(E==0)
+                    { 
+                        if ((MRxB[i])=='E')
+                        {
+                            finelis++;
+                            E=1;
+                            goto salto;
+                        }
+                    }
+                    if(ER==0)
+                    {
+                        if(E==1)
+                        {
+                            if((MRxB[i])=='R') 
+                            {
+                                finelis++;
+                                R=1;
+                                ER=1;
+                                goto salto;
+                            }
+                            else
+                            {
+                                E=0;
+                                finelis=0;
+                                goto salto;
+                            }
+                        }
+                    }
+                    if(R==1)
+                    {
+                        if((MRxB[i])=='R')
+                        {
+                            finelis++;
+                            ERR=1;
+                            goto salto;
+                        }
+                        else
+                        {
+                            finelis=0;
+                            E=0;
+                            R=0;
+                            ER=0;
+                        }
+                    }
+                
+                } // End if(ERR==0)
+                     
+            salto: 
+            
+            led=1;
+                      
+            } // End ciclo for
+            
+            if(finelis==3) 
+            {
+                LedRED();
+            }
+            else
+            {
+                LedGREEN();
+            }
+
+}
+
+void GestERR2()
+{
+            
+            finelis=0;
+            
+            E=0;
+            R=0;
+            ER=0;
+            ERR=0;
+            
+            // Ciclo per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta alla sequenza prestabilita di comandi
+            for(i=0;i<ARxBDIM;i++)
+            {
+                if(ERR==0)
+                { 
+                    if((ARxB[i])==' ') {goto salto;}
+                
+                    if(E==0)
+                    { 
+                        if ((ARxB[i])=='E')
+                        {
+                            finelis++;
+                            E=1;
+                            goto salto;
+                        }
+                    }
+                    if(ER==0)
+                    {
+                        if(E==1)
+                        {
+                            if((ARxB[i])=='R') 
+                            {
+                                finelis++;
+                                R=1;
+                                ER=1;
+                                goto salto;
+                            }
+                            else
+                            {
+                                E=0;
+                                finelis=0;
+                                goto salto;
+                            }
+                        }
+                    }
+                    if(R==1)
+                    {
+                        if((ARxB[i])=='R')
+                        {
+                            finelis++;
+                            ERR=1;
+                            goto salto;
+                        }
+                        else
+                        {
+                            finelis=0;
+                            E=0;
+                            R=0;
+                            ER=0;
+                        }
+                    }
+                
+                } // End if(ERR==0)
+                     
+                salto:
+                
+                led=1;
+                              
+            } // End ciclo for
+            
+            if(finelis==3) 
+            {
+                LedRED();
+            }
+            else
+            {
+                LedGREEN();
+            }
+
+}
+
+void LedGREEN()
+{
+          
+          // Il primo led emette la luce verde         
+          for(i = 0; i <= 3; i++)      
+              VettoreLED[i]=204; 
+                 
+          for(i = 4; i <= 7; i++)     
+              VettoreLED[i]=136;      
+             
+          for(i = 8; i <= 11; i++)    
+              VettoreLED[i]=136; 
+                      
+          for(i = 12; i <= NumByte-1; i++)     
+              VettoreLED[i]=136; 
     
-    // reset vettore in ricezione
-    for(j=0;i<RxBDIM;j++)
-    {
-        RxB[i]='\0';
-    }*/
-    
+          // Ciclo per l'invio dei frame al primo led   
+          for(j = 0; j < NumByte; j++)  
+              myspi.write(VettoreLED[j]);      
+
+}
+
+void LedRED()
+{
+          // Il primo led emette la luce verde         
+          for(i = 0; i <= 3; i++)      
+              VettoreLED[i]=136; 
+                 
+          for(i = 4; i <= 7; i++)     
+              VettoreLED[i]=204;      
+             
+          for(i = 8; i <= 11; i++)    
+              VettoreLED[i]=136; 
+                      
+          for(i = 12; i <= NumByte-1; i++)     
+              VettoreLED[i]=136; 
     
-    /*
-    // Configurazione dei parametri della SPI
-    SPI myspi(PA_7, PA_6, PA_5, NC);
-    myspi.format(16, 0);
-    myspi.frequency(3333333.3);*/ 
-     
-    /* 
-    // Il primo led emette la luce verde         
+          // Ciclo per l'invio dei frame al primo led   
+          for(j = 0; j < NumByte; j++)  
+              myspi.write(VettoreLED[j]);      
+
+}
+
+void LedOFF()
+{
+          
+          // Il primo led emette la luce verde         
           for(i = 0; i <= 3; i++)      
               VettoreLED[i]=136; 
                  
@@ -106,27 +398,16 @@
           for(i = 12; i <= NumByte-1; i++)     
               VettoreLED[i]=136; 
     
-    // Ciclo per l'invio dei frame al primo led   
+          // Ciclo per l'invio dei frame al primo led   
           for(j = 0; j < NumByte; j++)  
-              myspi.write(VettoreLED[j]);      */
+              myspi.write(VettoreLED[j]);      
 
-      
-            /*if ((RxB[0]=='O') && (RxB[1]=='K'))
-            for(j = 0; j < RxBDIM; j++)
-            {
-                if (RxB[j]==NULL) 
-                {
-                    L=1;    
-                }
-            }*/
+}
 
-        
-        
-
-
-} 
     
     
+   
+