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:
- 3:1df7773ae017
- Parent:
- 2:52b0e1971195
- Child:
- 4:87ec8f45cafe
--- a/main.cpp Wed May 09 11:13:28 2018 +0000
+++ b/main.cpp Fri May 11 14:22:53 2018 +0000
@@ -6,24 +6,28 @@
#include "ATCmdParser.h"
#include "UARTSerial.h"
-// Dimensione massima dei vettori MRxB e ARxB
-#define MRxBDIM 400
-#define ARxBDIM 400
+//LocalFileSystem local("local");
+
+// Dimensione massima del vettore MRxB
+#define MRxBDIM 200
-// Numero di byte da inviare per l'accensione del led tramite l'interfaccia SPI
+// Dimensione massima del vettore ARxB
+#define ARxBDIM 200
+
+// Numero di byte da inviare per l'accensione del led tramite il protocollo SPI
#define NumByte 16
-// Configurazione della porta seriale del computer
+// Configurazione della porta seriale del PC
Serial pc(USBTX, USBRX);
-// Dichiarazione per il LED di diagnostica
+// Dichiarazione del LED di diagnostica
DigitalOut led(LED2);
// Configurazione della porta seriale UART
UARTSerial serial = UARTSerial(PA_9, PA_10);
ATCmdParser at = ATCmdParser(&serial, "\r\n");
-// Configurazione dei parametri della SPI
+// Configurazione dei parametri del protocollo SPI
SPI myspi(PA_7, PA_6, PA_5, NC);
// Vettore che conterrà i byte ricevuti in risposta al comando AT inviato
@@ -32,13 +36,13 @@
// Vettore che conterrà i byte ricevuti in risposta all'invio automatico della sequenza di comandi AT
char ARxB[ARxBDIM];
-// Vettore che conterrà i byte da trasmettere al led tramite l'interfaccia SPI
+// Vettore che conterrà i byte da trasmettere al led tramite il protocollo SPI
uint8_t Vled[NumByte];
// Dichiarazione del parametro temporale t
Timer t;
-// Dichiarazioni delle variabili locali
+// Variabili globali
char c;
int i=0;
int j=0;
@@ -46,16 +50,19 @@
int R=0;
int ER=0;
int ERR=0;
-int endlis=0;
+int end=0;
+
volatile char input;
-// Funzione per l'emissione di luce verde tramite l'interfaccia SPI
+//char vett[10];
+
+// Funzione per l'emissione di luce verde tramite il protocollo SPI
void LedGREEN();
-// Funzione per l'emissione di luce rossa tramite l'interfaccia SPI
+// Funzione per l'emissione di luce rossa tramite il protocollo SPI
void LedRED();
-// Funzione per lo spegnimento del led tramite l'interfaccia SPI
+// Funzione per lo spegnimento del led tramite il protocollo SPI
void LedOFF();
// Funzione per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta al comando digitato
@@ -64,34 +71,43 @@
// Funzione per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta alla sequenza prestabilita di comandi
void ERR2();
+// Funzione che legge la risposta del modem
+void ReadModem();
+
+// Funzione che esegue il reset dei vettori MRxB e ARxB
+void Vreset();
+
int main()
{
- // FILE *flis;
- // Configurazione del baud rate per la comunicazione col computer
+ //FILE *flis;
+
+ // Configurazione del baud rate per la comunicazione col PC
pc.baud(9600);
- // Configurazione dei parametri per l'interfaccia SPI
+ // Configurazione dei parametri del protocollo 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 il tasto 'm' per inserire un comando AT |\r\n");
- printf(" | Premere il tasto 'a' per l'invio automatico della sequenza di comandi AT |\r\n");
- printf(" | Premere il tasto 'e' per uscire dal programma |\r\n");
- printf(" ----------------------------------------------------------------------------\r\n");
- printf("________________________________________________________________________________\r\n");
- printf("\r\n");
+ pc.printf("\r\n");
+ pc.printf(" PROGRAMMA PER L'INVIO DI COMANDI AT SU PORTA SERIALE\r\n");
+ pc.printf("________________________________________________________________________________\r\n");
+ pc.printf("\r\n");
+ pc.printf(" ----------------------------------------------------------------------------\r\n");
+ pc.printf(" | Premere il tasto 'm' per inserire un comando |\r\n");
+ pc.printf(" | Premere il tasto 'a' per l'invio automatico della sequenza di comandi |\r\n");
+ pc.printf(" | Premere il tasto 't' per testare il tempo di risposta del modem |\r\n");
+ pc.printf(" | Premere il tasto 'r' per rinviare l'ultimo comando |\r\n");
+ pc.printf(" | Premere il tasto 'e' per uscire dal programma |\r\n");
+ pc.printf(" ----------------------------------------------------------------------------\r\n");
+ pc.printf("________________________________________________________________________________\r\n");
+ pc.printf("\r\n");
-/*
- flis=fopen("lista.txt","r");
- if((flis=fopen("lista.txt","r"))==NULL)
+ /**flis = fopen("/local/lista.txt", "r");
+ if((flis=fopen("/local/lista.txt","r"))==NULL)
{
printf("Impossibile aprire il file");
+ exit(0);
}
while(!feof(flis))
@@ -103,25 +119,16 @@
while(1)
{
-
- // Reset vettore MRxB
- for(i=0;i<MRxBDIM;i++)
- {
- MRxB[i]='\0';
- }
-
- // Reset vettore ARxB
- for(j=0;j<ARxBDIM;j++)
- {
- ARxB[j]='\0';
- }
+ Vreset();
input=pc.getc();
+
if((input=='m')||(input=='M'))
{
-
- printf("Inserire il comando: ");
+ LedOFF();
+
+ pc.printf("Inserire un comando: ");
while(1)
{
@@ -132,70 +139,139 @@
if(c=='\r')
{
- t.start();
- goto esc;
+ goto esc1;
}
}
- esc:
+ esc1:
- printf("\r\n\r\nRisposta:\r\n");
-
- at.read(MRxB, MRxBDIM);
-
- t.stop();
+ pc.printf("\r\n\r\nRisposta:\r\n");
+
+ at.read(MRxB, MRxBDIM);
for(i=0;i<MRxBDIM;i++)
- {
+ {
pc.printf("%c",MRxB[i]);
}
-
- pc.printf("\n\rTempo trascorso dall'invio del comando: %f secondi\n\r", t.read());
-
- t.reset();
- printf("______________________________________________________________________________\r\n");
- printf("\r\n");
+ pc.printf("________________________________________________________________________________\r\n");
+ pc.printf("\r\n");
ERR1();
+ Vreset();
+
} // End if
+
if ((input=='a')||(input=='A'))
{
- printf("...invio automatico della sequenza di comandi...");
- printf("\r\n");
-
+ LedOFF();
+
+ pc.printf("...invio automatico della sequenza di comandi...");
+ pc.printf("\r\n");
+
+ pc.printf("\r\nRisposta:\r\n\r\n");
+
at.send("AT");
- at.send("AT+CREG?");
-
- t.start();
+
+ ReadModem();
+
+ at.send("AT+CSQ=?");
+
+ ReadModem();
+
+ at.send("AT+CSQ");
+
+ ReadModem();
- printf("\r\nRisposta:\r\n");
-
- at.read(ARxB, ARxBDIM);
+ at.send("AT+CREG=?");
+
+ ReadModem();
- t.stop();
+ at.send("AT+GMI");
+
+ ReadModem();
+
+ pc.printf("________________________________________________________________________________\r\n");
+ pc.printf("\r\n");
- for(i=0;i<ARxBDIM;i++)
- {
- pc.printf("%c",ARxB[i]);
- }
+ } // End if
+
+ if ((input=='r')||(input=='R'))
+ {
+ LedOFF();
- pc.printf("\n\rTempo trascorso dall'invio della sequenza di comandi: %f secondi\n\r", t.read());
+ pc.printf("...rinvio dell'ultimo comando...");
+ pc.printf("\r\n");
- t.reset();
-
- printf("______________________________________________________________________________\r\n");
- printf("\r\n");
-
- ERR2();
+ pc.printf("\r\nRisposta:\r\n\r\n");
+
+ at.send("AT#/");
+
+ ReadModem();
+
+ pc.printf("________________________________________________________________________________\r\n");
+ pc.printf("\r\n");
} // End if
+
+ if ((input=='t')||(input=='T'))
+ {
+ LedOFF();
+
+ pc.printf("Inserire un comando per testare il tempo di risposta del modem: ");
+
+ while(1)
+ {
+ char c = pc.getc();
+ pc.putc(c);
+
+ at.write(&c,1);
+
+ if(c=='\r')
+ {
+ t.reset();
+ t.start();
+ goto esc2;
+ }
+ }
+
+ esc2:
+
+ printf("\r\n\r\n");
+
+ if (at.recv("AT")==true)
+ {
+ t.stop();
+ }
+
+ at.read(ARxB, ARxBDIM);
+
+ Vreset();
+
+ pc.printf("Tempo di risposta: %f secondi\r\n", t.read());
+
+ if (t.read()<1)
+ {
+ LedGREEN();
+ }
+ else
+ {
+ pc.printf("\r\nATTENZIONE: Tempo di risposta superiore ad 1 secondo\r\n");
+ LedRED();
+ }
+
+ pc.printf("________________________________________________________________________________\r\n");
+ pc.printf("\r\n");
+
+ } // End if
+
+
if ((input=='e')||(input=='E'))
{
- printf("Il programma e' stato chiuso\n\r\n\r");
+ pc.printf("Il programma e' stato chiuso\n\r\n\r");
LedOFF();
exit(0);
@@ -205,17 +281,35 @@
}
+void ReadModem()
+{
+
+ at.read(ARxB, ARxBDIM);
+
+ for(i=0;i<ARxBDIM;i++)
+ {
+ pc.printf("%c",ARxB[i]);
+ }
+
+ printf("\r\n");
+
+ ERR2();
+
+ Vreset();
+
+}
+
void ERR1()
{
- endlis=0;
+ end=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
+ // Ciclo per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta al comando inviato
for(i=0;i<MRxBDIM;i++)
{
if(ERR==0)
@@ -226,7 +320,7 @@
{
if ((MRxB[i])=='E')
{
- endlis++;
+ end++;
E=1;
goto jump1;
}
@@ -237,7 +331,7 @@
{
if((MRxB[i])=='R')
{
- endlis++;
+ end++;
R=1;
ER=1;
goto jump1;
@@ -245,7 +339,7 @@
else
{
E=0;
- endlis=0;
+ end=0;
goto jump1;
}
}
@@ -254,13 +348,13 @@
{
if((MRxB[i])=='R')
{
- endlis++;
+ end++;
ERR=1;
goto jump1;
}
else
{
- endlis=0;
+ end=0;
E=0;
R=0;
ER=0;
@@ -275,7 +369,7 @@
} // End ciclo for
- if(endlis==3)
+ if(end==3)
{
LedRED();
}
@@ -288,8 +382,8 @@
void ERR2()
{
-
- endlis=0;
+
+ end=0;
E=0;
R=0;
@@ -307,7 +401,7 @@
{
if ((ARxB[i])=='E')
{
- endlis++;
+ end++;
E=1;
goto jump2;
}
@@ -318,7 +412,7 @@
{
if((ARxB[i])=='R')
{
- endlis++;
+ end++;
R=1;
ER=1;
goto jump2;
@@ -326,7 +420,7 @@
else
{
E=0;
- endlis=0;
+ end=0;
goto jump2;
}
}
@@ -335,13 +429,13 @@
{
if((ARxB[i])=='R')
{
- endlis++;
+ end++;
ERR=1;
goto jump2;
}
else
{
- endlis=0;
+ end=0;
E=0;
R=0;
ER=0;
@@ -356,7 +450,7 @@
} // End ciclo for
- if(endlis==3)
+ if(end==3)
{
LedRED();
}
@@ -367,6 +461,23 @@
}
+void Vreset()
+{
+
+ // Reset del vettore MRxB
+ for(i=0;i<MRxBDIM;i++)
+ {
+ MRxB[i]='\0';
+ }
+
+ // Reset del vettore ARxB
+ for(j=0;j<ARxBDIM;j++)
+ {
+ ARxB[j]='\0';
+ }
+
+}
+
void LedGREEN()
{
@@ -433,13 +544,7 @@
}
-
-
-
-
-
-
-
+