
Problemi
Dependencies: mbed
MicRobot-Rev085.cpp
00001 // pilotaggio carrello tramite BLE. 00002 // testato su L476RG e F401RE 00003 00004 #include "mbed.h" 00005 #include<stdlib.h> 00006 00007 // dimensione massima del pacchetto ricevuto su seriale 00008 #define PACKETDIM 8 00009 00010 00011 // Definizione periferica USB seriale del PC 00012 Serial pc(USBTX, USBRX, 921600); // seriale di comunicazione con il PC. Associati a PA_11 e PA_12 00013 00014 // Definizione periferica seriale del Modulo BLE ELETT114A 00015 Serial myBLE(PA_9, PA_10, 9600); //Tx, Rx, bps // F401 00016 //Serial myBLE(PG_7, PG_8, 9600); //Tx, Rx, bps // L496 00017 00018 // Input di Reset per il Modulo BLE HC-05 00019 DigitalOut BleRst(PA_8); 00020 00021 // User Button, LED 00022 DigitalIn myButton(USER_BUTTON); // pulsante Blu sulla scheda. Associato a PC_13 00023 DigitalOut myLed(LED2); // LED verde sulla scheda. Associato a PA_5 00024 00025 00026 //carattere di comando ricevuto dal BLE e relativo parametro 00027 volatile char cCommandBLE; // cambia nella routine di interrupt 00028 volatile char cParamBLE; // cambia nella routine di interrupt 00029 volatile int nParamBLE; // corrispondente valore numerico di cParamBLE 00030 00031 // memorizza l'ultimo comando ricevuto e relativo parametro. Ci saranno delle azioni solo se il comando ricevuto o il parametro è cambiato rispetto al precedente 00032 char cOldCommandBLE; 00033 int nOldParamBLE; 00034 00035 // indice per i cicli 00036 int nIndex; 00037 00038 // esponente della base 10, per cui bisognerà moltiplicare i caratteri per trasformarli in numeri 00039 double fEsponente; 00040 00041 // array per la ricezione dei messaggi da BLE 00042 volatile char caRxPacket[PACKETDIM]; 00043 // contatore di caratteri ricevuti daBLE 00044 volatile int nCharCount; 00045 00046 // flag che indica se il sw è in Reset 00047 volatile bool bReset; 00048 00049 /**************************************************************************************/ 00050 /* Routine di gestione Interrupt associata al fronte di salita del segnale di encoder */ 00051 /**************************************************************************************/ 00052 00053 /**********************************************/ 00054 // IRQ associata a Rx da PC 00055 //**********************************************/ 00056 void pcRxInterrupt(void) 00057 { 00058 // array per la ricezione dei messaggi da seriale 00059 char cReadChar; 00060 00061 // ricevi caratteri su seriale, se disponibili 00062 while((pc.readable())) 00063 { 00064 // acquisice stringa in input e relativa dimensione 00065 cReadChar = pc.getc(); // read character from PC 00066 //myBLE.putc(cReadChar); // Diagnostica: write char to BLE 00067 //pc.putc(cReadChar); // Diagnostica: write char to PC 00068 00069 //pc.printf("W>: 0x%02x\n\r",cReadChar); // diagnostica 00070 /* if(cReadChar == '0') // se scrivo '0', invia questa stringa 00071 { 00072 // DIAGNOSTICA: 00073 // Invia Stringa di comando al Robot 00074 myBLE.printf("\r\n> Prova di Trasmissione \r\n"); 00075 }*/ 00076 } 00077 } 00078 00079 //**********************************************/ 00080 // IRQ associata a Rx da BLE 00081 //**********************************************/ 00082 void BLERxInterrupt(void) 00083 { 00084 00085 // carattere ricevuto da BLE 00086 char cReadChar; 00087 00088 while((myBLE.readable())) 00089 { 00090 // acquisice stringa in input e memorizza in array 00091 cReadChar = myBLE.getc(); // Read character 00092 //caRxPacket[nCharCount]=cReadChar; 00093 //nCharCount++; 00094 // pc.printf("%c", cReadChar); // diagnostica 00095 00096 // acquisisce il carattere di start comando o coordinate da APP 00097 if(cReadChar=='(') 00098 { 00099 // acquisisce il primo carattere di comando o di coordinate 00100 cReadChar = myBLE.getc(); // Read character 00101 // pc.printf("%c", cReadChar); // diagnostica 00102 00103 // +++++++++++++++++ INIZIO gestione Comando da Button +++++++++++++++++ 00104 // Ho ricevuto il comando da un Button se il primo carattere è una lettera maiuscola tra A e T 00105 if((cReadChar > 0x40) && (cReadChar < 0x55)) // caratteri alfabetici da 'A' a 'T' 00106 { 00107 // memorizza come comando il carattere appena letto 00108 cCommandBLE = cReadChar; 00109 // legge e memorizza come paramentro il successivo carattere 00110 cReadChar = myBLE.getc(); // legge parametro 00111 // pc.printf("%c", cReadChar); // diagnostica 00112 nParamBLE = cReadChar-0x30; 00113 cReadChar = myBLE.getc(); // legge la ')' di chiusura comando 00114 //pc.printf("%c", cReadChar); // diagnostica 00115 00116 // visualizza comando e parametro inviato da BLE 00117 // pc.printf("> %c%d \r\n\r",cCommandBLE, nParamBLE); // diagnostica 00118 if(cReadChar==')') 00119 { 00120 //pc.printf("(fX , fY) = (%.1f , %.1f) \r\n", fX, fY); // diagnostica 00121 } 00122 else // dopo la Y e i numeri, mi attendo parentesi chiusa ) 00123 { 00124 pc.printf("> Errore = %c invece di ) \r\n\n", cReadChar); // diagnostica 00125 } 00126 } 00127 // +++++++++++++++++ FINE gestione Comando da Button +++++++++++++++++ 00128 } // if(cReadChar == '(') 00129 }// chiude il while 00130 } 00131 00132 00133 00134 00135 /*********************************************************************************************************************************************/ 00136 /* ogni DELTAT secondi scatta questo ticker. */ 00137 /* Tra due Tick viene contato il numero di mpulsi impulsi di encoder ricevuti con degli interrupt e contentuo nella variabile nCountRiseEdge */ 00138 /*********************************************************************************************************************************************/ 00139 00140 /**********/ 00141 /* MAIN */ 00142 /**********/ 00143 int main() 00144 { 00145 // messaggio di benvenuto 00146 pc.printf("\r\n************ CLM ****************** \r\n"); 00147 pc.printf("*** Campanella Amaldi ***\r\n"); 00148 myBLE.printf("***W Campanella Amaldi ***\r\n"); 00149 00150 // inizializza variabili da BLE 00151 cCommandBLE = 0; // inizialmente nessun comando da BLE 00152 cOldCommandBLE = 0; // inizialmente nessun comando da BLE 00153 cParamBLE = 0; // inizialmente nessun parametro da BLE 00154 nParamBLE=0; // inizialmente nessun parametro da BLE 00155 nOldParamBLE=0; // inizialmente nessun parametro da BLE 00156 bReset = false; //bReset = true/false quando riceve un comando (R1)/(R0) dalla APP 00157 00158 // inizializza array di caratteri ricevuti 00159 for(nIndex=0; nIndex < PACKETDIM; nIndex++) 00160 {caRxPacket[nIndex]=0;} 00161 nCharCount=0; 00162 00163 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00164 //++++++++++++++ INIZIO Ciclo Principale +++++++++++++++++++ 00165 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00166 00167 while(true) 00168 { 00169 00170 //++++++++++++++++++++++++++ INIZIO Interpreta Comandi da Pulsanti della APP ++++++++++++++++++++++++++++++++++++++++++++ 00171 00172 if((cCommandBLE != cOldCommandBLE) || (nParamBLE != nOldParamBLE)) 00173 { 00174 switch (cCommandBLE) 00175 { 00176 case 'A': // entrata 00177 { 00178 if(nParamBLE==1) 00179 { 00180 myBLE.printf("Entrate\n\r"); 00181 } 00182 else 00183 { 00184 } 00185 } break; 00186 case 'B': // Cambio 00187 { 00188 if(nParamBLE==1) 00189 { 00190 pc.printf("Cambio\n\r"); 00191 } 00192 else 00193 { 00194 } 00195 } break; 00196 case 'C': // Uscita 00197 { 00198 if(nParamBLE==1) 00199 { 00200 pc.printf("Uscite\n\r"); 00201 } 00202 else 00203 { 00204 } 00205 } break; 00206 00207 default: break; 00208 } 00209 //pc.printf("Comando = %c, Parametro = %d \r\n", cCommandBLE, nParamBLE); // diagnostica 00210 cOldCommandBLE = cCommandBLE; 00211 nOldParamBLE = nParamBLE; 00212 } 00213 00214 //++++++++++++++++++++++++++++++++++++++++++++ FINE Interpreta Comandi da Pulsanti della APP ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00215 } //while (true) Ciclo principale 00216 00217 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00218 //++++++++++++++ FINE Ciclo Principale +++++++++++++++++++ 00219 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00220 00221 } // main()
Generated on Sat Jul 16 2022 01:38:17 by
