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
--- 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; - } - }*/ +} - - - - -} + +