Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 1:7f5f80b47892
- Parent:
- 0:3eda4839be5c
- Child:
- 2:52b0e1971195
diff -r 3eda4839be5c -r 7f5f80b47892 main.cpp
--- 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;
- }
- }*/
+}
-
-
-
-
-}
+
+