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.
main.cpp
- Committer:
- angelocarrieri
- Date:
- 2018-05-09
- Revision:
- 2:52b0e1971195
- Parent:
- 1:7f5f80b47892
- Child:
- 3:1df7773ae017
File content as of revision 2:52b0e1971195:
#include "mbed.h" #include "string.h" #include "stdio.h" #include "stdlib.h" #include "Serial.h" #include "ATCmdParser.h" #include "UARTSerial.h" // Dimensione massima dei vettori MRxB e ARxB #define MRxBDIM 400 #define ARxBDIM 400 // Numero di byte da inviare per l'accensione del led tramite l'interfaccia SPI #define NumByte 16 // Configurazione della porta seriale del computer Serial pc(USBTX, USBRX); // Dichiarazione per il 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 SPI myspi(PA_7, PA_6, PA_5, NC); // Vettore che conterrà i byte ricevuti in risposta al comando AT inviato char MRxB[MRxBDIM]; // 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 uint8_t Vled[NumByte]; // Dichiarazione del parametro temporale t Timer t; // Dichiarazioni delle variabili locali char c; int i=0; int j=0; int E=0; int R=0; int ER=0; int ERR=0; int endlis=0; volatile char input; // 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 ERR1(); // Funzione per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta alla sequenza prestabilita di comandi void ERR2(); int main() { // FILE *flis; // 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 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"); /* flis=fopen("lista.txt","r"); if((flis=fopen("lista.txt","r"))==NULL) { printf("Impossibile aprire il file"); } while(!feof(flis)) { fgets(vett,1,flis); i++; printf("%c",vett[i]); }*/ 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'; } 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); if(c=='\r') { t.start(); goto esc; } } esc: printf("\r\n\r\nRisposta:\r\n"); at.read(MRxB, MRxBDIM); t.stop(); 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"); ERR1(); } // End if if ((input=='a')||(input=='A')) { printf("...invio automatico della sequenza di comandi..."); printf("\r\n"); at.send("AT"); at.send("AT+CREG?"); t.start(); printf("\r\nRisposta:\r\n"); at.read(ARxB, ARxBDIM); t.stop(); for(i=0;i<ARxBDIM;i++) { pc.printf("%c",ARxB[i]); } pc.printf("\n\rTempo trascorso dall'invio della sequenza di comandi: %f secondi\n\r", t.read()); t.reset(); printf("______________________________________________________________________________\r\n"); printf("\r\n"); ERR2(); } // End if if ((input=='e')||(input=='E')) { printf("Il programma e' stato chiuso\n\r\n\r"); LedOFF(); exit(0); } } // End while } void ERR1() { endlis=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 jump1;} if(E==0) { if ((MRxB[i])=='E') { endlis++; E=1; goto jump1; } } if(ER==0) { if(E==1) { if((MRxB[i])=='R') { endlis++; R=1; ER=1; goto jump1; } else { E=0; endlis=0; goto jump1; } } } if(R==1) { if((MRxB[i])=='R') { endlis++; ERR=1; goto jump1; } else { endlis=0; E=0; R=0; ER=0; } } } // End if(ERR==0) jump1: led=1; } // End ciclo for if(endlis==3) { LedRED(); } else { LedGREEN(); } } void ERR2() { endlis=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 jump2;} if(E==0) { if ((ARxB[i])=='E') { endlis++; E=1; goto jump2; } } if(ER==0) { if(E==1) { if((ARxB[i])=='R') { endlis++; R=1; ER=1; goto jump2; } else { E=0; endlis=0; goto jump2; } } } if(R==1) { if((ARxB[i])=='R') { endlis++; ERR=1; goto jump2; } else { endlis=0; E=0; R=0; ER=0; } } } // End if(ERR==0) jump2: led=1; } // End ciclo for if(endlis==3) { LedRED(); } else { LedGREEN(); } } void LedGREEN() { // Cicli per la configurazione del vettore Vled for(i = 0; i <= 3; i++) Vled[i]=204; for(i = 4; i <= 7; i++) Vled[i]=136; for(i = 8; i <= 11; i++) Vled[i]=136; for(i = 12; i <= NumByte-1; i++) Vled[i]=136; // Ciclo per l'invio dei frame al led for(j = 0; j < NumByte; j++) myspi.write(Vled[j]); } void LedRED() { // Cicli per la configurazione del vettore Vled for(i = 0; i <= 3; i++) Vled[i]=136; for(i = 4; i <= 7; i++) Vled[i]=204; for(i = 8; i <= 11; i++) Vled[i]=136; for(i = 12; i <= NumByte-1; i++) Vled[i]=136; // Ciclo per l'invio dei frame al led for(j = 0; j < NumByte; j++) myspi.write(Vled[j]); } void LedOFF() { // Cicli per la configurazione del vettore Vled for(i = 0; i <= 3; i++) Vled[i]=136; for(i = 4; i <= 7; i++) Vled[i]=136; for(i = 8; i <= 11; i++) Vled[i]=136; for(i = 12; i <= NumByte-1; i++) Vled[i]=136; // Ciclo per l'invio dei frame al led for(j = 0; j < NumByte; j++) myspi.write(Vled[j]); }