
Problemi
Dependencies: mbed
MicRobot-Rev085.cpp@19:733cea5788a4, 2020-07-23 (annotated)
- Committer:
- francesco01
- Date:
- Thu Jul 23 10:19:54 2020 +0000
- Revision:
- 19:733cea5788a4
- Parent:
- 18:4b1d35d5f4fd
Problemi
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pinofal | 18:4b1d35d5f4fd | 1 | // pilotaggio carrello tramite BLE. |
pinofal | 18:4b1d35d5f4fd | 2 | // testato su L476RG e F401RE |
pinofal | 18:4b1d35d5f4fd | 3 | |
pinofal | 18:4b1d35d5f4fd | 4 | #include "mbed.h" |
pinofal | 18:4b1d35d5f4fd | 5 | #include<stdlib.h> |
pinofal | 18:4b1d35d5f4fd | 6 | |
pinofal | 18:4b1d35d5f4fd | 7 | // dimensione massima del pacchetto ricevuto su seriale |
pinofal | 18:4b1d35d5f4fd | 8 | #define PACKETDIM 8 |
pinofal | 18:4b1d35d5f4fd | 9 | |
pinofal | 18:4b1d35d5f4fd | 10 | |
pinofal | 18:4b1d35d5f4fd | 11 | // Definizione periferica USB seriale del PC |
pinofal | 18:4b1d35d5f4fd | 12 | Serial pc(USBTX, USBRX, 921600); // seriale di comunicazione con il PC. Associati a PA_11 e PA_12 |
pinofal | 18:4b1d35d5f4fd | 13 | |
pinofal | 18:4b1d35d5f4fd | 14 | // Definizione periferica seriale del Modulo BLE ELETT114A |
pinofal | 18:4b1d35d5f4fd | 15 | Serial myBLE(PA_9, PA_10, 9600); //Tx, Rx, bps // F401 |
pinofal | 18:4b1d35d5f4fd | 16 | //Serial myBLE(PG_7, PG_8, 9600); //Tx, Rx, bps // L496 |
pinofal | 18:4b1d35d5f4fd | 17 | |
pinofal | 18:4b1d35d5f4fd | 18 | // Input di Reset per il Modulo BLE HC-05 |
pinofal | 18:4b1d35d5f4fd | 19 | DigitalOut BleRst(PA_8); |
pinofal | 18:4b1d35d5f4fd | 20 | |
pinofal | 18:4b1d35d5f4fd | 21 | // User Button, LED |
pinofal | 18:4b1d35d5f4fd | 22 | DigitalIn myButton(USER_BUTTON); // pulsante Blu sulla scheda. Associato a PC_13 |
pinofal | 18:4b1d35d5f4fd | 23 | DigitalOut myLed(LED2); // LED verde sulla scheda. Associato a PA_5 |
pinofal | 18:4b1d35d5f4fd | 24 | |
pinofal | 18:4b1d35d5f4fd | 25 | |
pinofal | 18:4b1d35d5f4fd | 26 | //carattere di comando ricevuto dal BLE e relativo parametro |
pinofal | 18:4b1d35d5f4fd | 27 | volatile char cCommandBLE; // cambia nella routine di interrupt |
pinofal | 18:4b1d35d5f4fd | 28 | volatile char cParamBLE; // cambia nella routine di interrupt |
pinofal | 18:4b1d35d5f4fd | 29 | volatile int nParamBLE; // corrispondente valore numerico di cParamBLE |
pinofal | 18:4b1d35d5f4fd | 30 | |
pinofal | 18:4b1d35d5f4fd | 31 | // memorizza l'ultimo comando ricevuto e relativo parametro. Ci saranno delle azioni solo se il comando ricevuto o il parametro è cambiato rispetto al precedente |
pinofal | 18:4b1d35d5f4fd | 32 | char cOldCommandBLE; |
pinofal | 18:4b1d35d5f4fd | 33 | int nOldParamBLE; |
pinofal | 18:4b1d35d5f4fd | 34 | |
pinofal | 18:4b1d35d5f4fd | 35 | // indice per i cicli |
pinofal | 18:4b1d35d5f4fd | 36 | int nIndex; |
pinofal | 18:4b1d35d5f4fd | 37 | |
pinofal | 18:4b1d35d5f4fd | 38 | // esponente della base 10, per cui bisognerà moltiplicare i caratteri per trasformarli in numeri |
pinofal | 18:4b1d35d5f4fd | 39 | double fEsponente; |
pinofal | 18:4b1d35d5f4fd | 40 | |
pinofal | 18:4b1d35d5f4fd | 41 | // array per la ricezione dei messaggi da BLE |
pinofal | 18:4b1d35d5f4fd | 42 | volatile char caRxPacket[PACKETDIM]; |
pinofal | 18:4b1d35d5f4fd | 43 | // contatore di caratteri ricevuti daBLE |
pinofal | 18:4b1d35d5f4fd | 44 | volatile int nCharCount; |
pinofal | 18:4b1d35d5f4fd | 45 | |
pinofal | 18:4b1d35d5f4fd | 46 | // flag che indica se il sw è in Reset |
pinofal | 18:4b1d35d5f4fd | 47 | volatile bool bReset; |
pinofal | 18:4b1d35d5f4fd | 48 | |
pinofal | 18:4b1d35d5f4fd | 49 | /**************************************************************************************/ |
pinofal | 18:4b1d35d5f4fd | 50 | /* Routine di gestione Interrupt associata al fronte di salita del segnale di encoder */ |
pinofal | 18:4b1d35d5f4fd | 51 | /**************************************************************************************/ |
pinofal | 18:4b1d35d5f4fd | 52 | |
pinofal | 18:4b1d35d5f4fd | 53 | /**********************************************/ |
pinofal | 18:4b1d35d5f4fd | 54 | // IRQ associata a Rx da PC |
pinofal | 18:4b1d35d5f4fd | 55 | //**********************************************/ |
pinofal | 18:4b1d35d5f4fd | 56 | void pcRxInterrupt(void) |
pinofal | 18:4b1d35d5f4fd | 57 | { |
pinofal | 18:4b1d35d5f4fd | 58 | // array per la ricezione dei messaggi da seriale |
pinofal | 18:4b1d35d5f4fd | 59 | char cReadChar; |
pinofal | 18:4b1d35d5f4fd | 60 | |
pinofal | 18:4b1d35d5f4fd | 61 | // ricevi caratteri su seriale, se disponibili |
pinofal | 18:4b1d35d5f4fd | 62 | while((pc.readable())) |
pinofal | 18:4b1d35d5f4fd | 63 | { |
pinofal | 18:4b1d35d5f4fd | 64 | // acquisice stringa in input e relativa dimensione |
pinofal | 18:4b1d35d5f4fd | 65 | cReadChar = pc.getc(); // read character from PC |
pinofal | 18:4b1d35d5f4fd | 66 | //myBLE.putc(cReadChar); // Diagnostica: write char to BLE |
pinofal | 18:4b1d35d5f4fd | 67 | //pc.putc(cReadChar); // Diagnostica: write char to PC |
pinofal | 18:4b1d35d5f4fd | 68 | |
pinofal | 18:4b1d35d5f4fd | 69 | //pc.printf("W>: 0x%02x\n\r",cReadChar); // diagnostica |
francesco01 | 19:733cea5788a4 | 70 | /* if(cReadChar == '0') // se scrivo '0', invia questa stringa |
pinofal | 18:4b1d35d5f4fd | 71 | { |
pinofal | 18:4b1d35d5f4fd | 72 | // DIAGNOSTICA: |
pinofal | 18:4b1d35d5f4fd | 73 | // Invia Stringa di comando al Robot |
pinofal | 18:4b1d35d5f4fd | 74 | myBLE.printf("\r\n> Prova di Trasmissione \r\n"); |
francesco01 | 19:733cea5788a4 | 75 | }*/ |
pinofal | 18:4b1d35d5f4fd | 76 | } |
pinofal | 18:4b1d35d5f4fd | 77 | } |
pinofal | 18:4b1d35d5f4fd | 78 | |
pinofal | 18:4b1d35d5f4fd | 79 | //**********************************************/ |
pinofal | 18:4b1d35d5f4fd | 80 | // IRQ associata a Rx da BLE |
pinofal | 18:4b1d35d5f4fd | 81 | //**********************************************/ |
pinofal | 18:4b1d35d5f4fd | 82 | void BLERxInterrupt(void) |
pinofal | 18:4b1d35d5f4fd | 83 | { |
pinofal | 18:4b1d35d5f4fd | 84 | |
pinofal | 18:4b1d35d5f4fd | 85 | // carattere ricevuto da BLE |
pinofal | 18:4b1d35d5f4fd | 86 | char cReadChar; |
pinofal | 18:4b1d35d5f4fd | 87 | |
pinofal | 18:4b1d35d5f4fd | 88 | while((myBLE.readable())) |
pinofal | 18:4b1d35d5f4fd | 89 | { |
pinofal | 18:4b1d35d5f4fd | 90 | // acquisice stringa in input e memorizza in array |
pinofal | 18:4b1d35d5f4fd | 91 | cReadChar = myBLE.getc(); // Read character |
pinofal | 18:4b1d35d5f4fd | 92 | //caRxPacket[nCharCount]=cReadChar; |
pinofal | 18:4b1d35d5f4fd | 93 | //nCharCount++; |
francesco01 | 19:733cea5788a4 | 94 | // pc.printf("%c", cReadChar); // diagnostica |
pinofal | 18:4b1d35d5f4fd | 95 | |
pinofal | 18:4b1d35d5f4fd | 96 | // acquisisce il carattere di start comando o coordinate da APP |
pinofal | 18:4b1d35d5f4fd | 97 | if(cReadChar=='(') |
pinofal | 18:4b1d35d5f4fd | 98 | { |
pinofal | 18:4b1d35d5f4fd | 99 | // acquisisce il primo carattere di comando o di coordinate |
pinofal | 18:4b1d35d5f4fd | 100 | cReadChar = myBLE.getc(); // Read character |
francesco01 | 19:733cea5788a4 | 101 | // pc.printf("%c", cReadChar); // diagnostica |
pinofal | 18:4b1d35d5f4fd | 102 | |
pinofal | 18:4b1d35d5f4fd | 103 | // +++++++++++++++++ INIZIO gestione Comando da Button +++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 104 | // Ho ricevuto il comando da un Button se il primo carattere è una lettera maiuscola tra A e T |
pinofal | 18:4b1d35d5f4fd | 105 | if((cReadChar > 0x40) && (cReadChar < 0x55)) // caratteri alfabetici da 'A' a 'T' |
pinofal | 18:4b1d35d5f4fd | 106 | { |
pinofal | 18:4b1d35d5f4fd | 107 | // memorizza come comando il carattere appena letto |
pinofal | 18:4b1d35d5f4fd | 108 | cCommandBLE = cReadChar; |
pinofal | 18:4b1d35d5f4fd | 109 | // legge e memorizza come paramentro il successivo carattere |
pinofal | 18:4b1d35d5f4fd | 110 | cReadChar = myBLE.getc(); // legge parametro |
francesco01 | 19:733cea5788a4 | 111 | // pc.printf("%c", cReadChar); // diagnostica |
pinofal | 18:4b1d35d5f4fd | 112 | nParamBLE = cReadChar-0x30; |
pinofal | 18:4b1d35d5f4fd | 113 | cReadChar = myBLE.getc(); // legge la ')' di chiusura comando |
francesco01 | 19:733cea5788a4 | 114 | //pc.printf("%c", cReadChar); // diagnostica |
pinofal | 18:4b1d35d5f4fd | 115 | |
pinofal | 18:4b1d35d5f4fd | 116 | // visualizza comando e parametro inviato da BLE |
francesco01 | 19:733cea5788a4 | 117 | // pc.printf("> %c%d \r\n\r",cCommandBLE, nParamBLE); // diagnostica |
francesco01 | 19:733cea5788a4 | 118 | if(cReadChar==')') |
francesco01 | 19:733cea5788a4 | 119 | { |
francesco01 | 19:733cea5788a4 | 120 | //pc.printf("(fX , fY) = (%.1f , %.1f) \r\n", fX, fY); // diagnostica |
francesco01 | 19:733cea5788a4 | 121 | } |
francesco01 | 19:733cea5788a4 | 122 | else // dopo la Y e i numeri, mi attendo parentesi chiusa ) |
francesco01 | 19:733cea5788a4 | 123 | { |
francesco01 | 19:733cea5788a4 | 124 | pc.printf("> Errore = %c invece di ) \r\n\n", cReadChar); // diagnostica |
francesco01 | 19:733cea5788a4 | 125 | } |
pinofal | 18:4b1d35d5f4fd | 126 | } |
pinofal | 18:4b1d35d5f4fd | 127 | // +++++++++++++++++ FINE gestione Comando da Button +++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 128 | } // if(cReadChar == '(') |
francesco01 | 19:733cea5788a4 | 129 | }// chiude il while |
pinofal | 18:4b1d35d5f4fd | 130 | } |
pinofal | 18:4b1d35d5f4fd | 131 | |
francesco01 | 19:733cea5788a4 | 132 | |
francesco01 | 19:733cea5788a4 | 133 | |
francesco01 | 19:733cea5788a4 | 134 | |
pinofal | 18:4b1d35d5f4fd | 135 | /*********************************************************************************************************************************************/ |
pinofal | 18:4b1d35d5f4fd | 136 | /* ogni DELTAT secondi scatta questo ticker. */ |
pinofal | 18:4b1d35d5f4fd | 137 | /* Tra due Tick viene contato il numero di mpulsi impulsi di encoder ricevuti con degli interrupt e contentuo nella variabile nCountRiseEdge */ |
pinofal | 18:4b1d35d5f4fd | 138 | /*********************************************************************************************************************************************/ |
pinofal | 18:4b1d35d5f4fd | 139 | |
pinofal | 18:4b1d35d5f4fd | 140 | /**********/ |
pinofal | 18:4b1d35d5f4fd | 141 | /* MAIN */ |
pinofal | 18:4b1d35d5f4fd | 142 | /**********/ |
pinofal | 18:4b1d35d5f4fd | 143 | int main() |
francesco01 | 19:733cea5788a4 | 144 | { |
pinofal | 18:4b1d35d5f4fd | 145 | // messaggio di benvenuto |
francesco01 | 19:733cea5788a4 | 146 | pc.printf("\r\n************ CLM ****************** \r\n"); |
francesco01 | 19:733cea5788a4 | 147 | pc.printf("*** Campanella Amaldi ***\r\n"); |
francesco01 | 19:733cea5788a4 | 148 | myBLE.printf("***W Campanella Amaldi ***\r\n"); |
pinofal | 18:4b1d35d5f4fd | 149 | |
pinofal | 18:4b1d35d5f4fd | 150 | // inizializza variabili da BLE |
pinofal | 18:4b1d35d5f4fd | 151 | cCommandBLE = 0; // inizialmente nessun comando da BLE |
pinofal | 18:4b1d35d5f4fd | 152 | cOldCommandBLE = 0; // inizialmente nessun comando da BLE |
pinofal | 18:4b1d35d5f4fd | 153 | cParamBLE = 0; // inizialmente nessun parametro da BLE |
pinofal | 18:4b1d35d5f4fd | 154 | nParamBLE=0; // inizialmente nessun parametro da BLE |
pinofal | 18:4b1d35d5f4fd | 155 | nOldParamBLE=0; // inizialmente nessun parametro da BLE |
pinofal | 18:4b1d35d5f4fd | 156 | bReset = false; //bReset = true/false quando riceve un comando (R1)/(R0) dalla APP |
pinofal | 18:4b1d35d5f4fd | 157 | |
pinofal | 18:4b1d35d5f4fd | 158 | // inizializza array di caratteri ricevuti |
pinofal | 18:4b1d35d5f4fd | 159 | for(nIndex=0; nIndex < PACKETDIM; nIndex++) |
pinofal | 18:4b1d35d5f4fd | 160 | {caRxPacket[nIndex]=0;} |
francesco01 | 19:733cea5788a4 | 161 | nCharCount=0; |
pinofal | 18:4b1d35d5f4fd | 162 | |
pinofal | 18:4b1d35d5f4fd | 163 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 164 | //++++++++++++++ INIZIO Ciclo Principale +++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 165 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 166 | |
pinofal | 18:4b1d35d5f4fd | 167 | while(true) |
pinofal | 18:4b1d35d5f4fd | 168 | { |
pinofal | 18:4b1d35d5f4fd | 169 | |
pinofal | 18:4b1d35d5f4fd | 170 | //++++++++++++++++++++++++++ INIZIO Interpreta Comandi da Pulsanti della APP ++++++++++++++++++++++++++++++++++++++++++++ |
francesco01 | 19:733cea5788a4 | 171 | |
pinofal | 18:4b1d35d5f4fd | 172 | if((cCommandBLE != cOldCommandBLE) || (nParamBLE != nOldParamBLE)) |
pinofal | 18:4b1d35d5f4fd | 173 | { |
pinofal | 18:4b1d35d5f4fd | 174 | switch (cCommandBLE) |
pinofal | 18:4b1d35d5f4fd | 175 | { |
francesco01 | 19:733cea5788a4 | 176 | case 'A': // entrata |
francesco01 | 19:733cea5788a4 | 177 | { |
francesco01 | 19:733cea5788a4 | 178 | if(nParamBLE==1) |
francesco01 | 19:733cea5788a4 | 179 | { |
francesco01 | 19:733cea5788a4 | 180 | myBLE.printf("Entrate\n\r"); |
francesco01 | 19:733cea5788a4 | 181 | } |
francesco01 | 19:733cea5788a4 | 182 | else |
francesco01 | 19:733cea5788a4 | 183 | { |
francesco01 | 19:733cea5788a4 | 184 | } |
pinofal | 18:4b1d35d5f4fd | 185 | } break; |
francesco01 | 19:733cea5788a4 | 186 | case 'B': // Cambio |
pinofal | 18:4b1d35d5f4fd | 187 | { |
francesco01 | 19:733cea5788a4 | 188 | if(nParamBLE==1) |
francesco01 | 19:733cea5788a4 | 189 | { |
francesco01 | 19:733cea5788a4 | 190 | pc.printf("Cambio\n\r"); |
francesco01 | 19:733cea5788a4 | 191 | } |
francesco01 | 19:733cea5788a4 | 192 | else |
francesco01 | 19:733cea5788a4 | 193 | { |
francesco01 | 19:733cea5788a4 | 194 | } |
pinofal | 18:4b1d35d5f4fd | 195 | } break; |
francesco01 | 19:733cea5788a4 | 196 | case 'C': // Uscita |
pinofal | 18:4b1d35d5f4fd | 197 | { |
pinofal | 18:4b1d35d5f4fd | 198 | if(nParamBLE==1) |
pinofal | 18:4b1d35d5f4fd | 199 | { |
francesco01 | 19:733cea5788a4 | 200 | pc.printf("Uscite\n\r"); |
pinofal | 18:4b1d35d5f4fd | 201 | } |
pinofal | 18:4b1d35d5f4fd | 202 | else |
pinofal | 18:4b1d35d5f4fd | 203 | { |
pinofal | 18:4b1d35d5f4fd | 204 | } |
pinofal | 18:4b1d35d5f4fd | 205 | } break; |
pinofal | 18:4b1d35d5f4fd | 206 | |
pinofal | 18:4b1d35d5f4fd | 207 | default: break; |
pinofal | 18:4b1d35d5f4fd | 208 | } |
pinofal | 18:4b1d35d5f4fd | 209 | //pc.printf("Comando = %c, Parametro = %d \r\n", cCommandBLE, nParamBLE); // diagnostica |
pinofal | 18:4b1d35d5f4fd | 210 | cOldCommandBLE = cCommandBLE; |
pinofal | 18:4b1d35d5f4fd | 211 | nOldParamBLE = nParamBLE; |
pinofal | 18:4b1d35d5f4fd | 212 | } |
pinofal | 18:4b1d35d5f4fd | 213 | |
pinofal | 18:4b1d35d5f4fd | 214 | //++++++++++++++++++++++++++++++++++++++++++++ FINE Interpreta Comandi da Pulsanti della APP ++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 215 | } //while (true) Ciclo principale |
pinofal | 18:4b1d35d5f4fd | 216 | |
pinofal | 18:4b1d35d5f4fd | 217 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 218 | //++++++++++++++ FINE Ciclo Principale +++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 219 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 220 | |
pinofal | 18:4b1d35d5f4fd | 221 | } // main() |