Campanella Problemi Risolti
Dependencies: mbed
MicRobot-Rev085.cpp@20:04c0e20e1399, 2020-07-24 (annotated)
- Committer:
- pinofal
- Date:
- Fri Jul 24 19:30:32 2020 +0000
- Revision:
- 20:04c0e20e1399
- Parent:
- 19:733cea5788a4
Campanella Problemi Risolti
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 | 20:04c0e20e1399 | 53 | |
pinofal | 18:4b1d35d5f4fd | 54 | |
pinofal | 18:4b1d35d5f4fd | 55 | //**********************************************/ |
pinofal | 18:4b1d35d5f4fd | 56 | // IRQ associata a Rx da BLE |
pinofal | 18:4b1d35d5f4fd | 57 | //**********************************************/ |
pinofal | 18:4b1d35d5f4fd | 58 | void BLERxInterrupt(void) |
pinofal | 18:4b1d35d5f4fd | 59 | { |
pinofal | 18:4b1d35d5f4fd | 60 | |
pinofal | 18:4b1d35d5f4fd | 61 | // carattere ricevuto da BLE |
pinofal | 18:4b1d35d5f4fd | 62 | char cReadChar; |
pinofal | 18:4b1d35d5f4fd | 63 | |
pinofal | 20:04c0e20e1399 | 64 | while(myBLE.readable()) |
pinofal | 18:4b1d35d5f4fd | 65 | { |
pinofal | 18:4b1d35d5f4fd | 66 | // acquisice stringa in input e memorizza in array |
pinofal | 18:4b1d35d5f4fd | 67 | cReadChar = myBLE.getc(); // Read character |
pinofal | 18:4b1d35d5f4fd | 68 | //caRxPacket[nCharCount]=cReadChar; |
pinofal | 18:4b1d35d5f4fd | 69 | //nCharCount++; |
pinofal | 20:04c0e20e1399 | 70 | //pc.printf("%c", cReadChar); // diagnostica |
pinofal | 18:4b1d35d5f4fd | 71 | |
pinofal | 20:04c0e20e1399 | 72 | // +++++++++++++++++ INIZIO gestione Comando da Button +++++++++++++++++ |
pinofal | 20:04c0e20e1399 | 73 | // Ho ricevuto il comando da un Button se il primo carattere è una lettera maiuscola tra 'A' e 'Z' oppure tra 'a' e 'z' |
pinofal | 20:04c0e20e1399 | 74 | if(((cReadChar > 0x40) && (cReadChar < 0x5A)) || ((cReadChar > 0x61) && (cReadChar < 0x7A))) // caratteri alfabetici da 'A' a 'T' |
pinofal | 18:4b1d35d5f4fd | 75 | { |
pinofal | 20:04c0e20e1399 | 76 | // memorizza come comando il carattere appena letto |
pinofal | 20:04c0e20e1399 | 77 | cCommandBLE = cReadChar; |
pinofal | 20:04c0e20e1399 | 78 | } |
pinofal | 20:04c0e20e1399 | 79 | // +++++++++++++++++ FINE gestione Comando da Button +++++++++++++++++ |
pinofal | 20:04c0e20e1399 | 80 | } |
pinofal | 18:4b1d35d5f4fd | 81 | } |
pinofal | 18:4b1d35d5f4fd | 82 | |
francesco01 | 19:733cea5788a4 | 83 | |
francesco01 | 19:733cea5788a4 | 84 | |
francesco01 | 19:733cea5788a4 | 85 | |
pinofal | 18:4b1d35d5f4fd | 86 | /*********************************************************************************************************************************************/ |
pinofal | 18:4b1d35d5f4fd | 87 | /* ogni DELTAT secondi scatta questo ticker. */ |
pinofal | 18:4b1d35d5f4fd | 88 | /* Tra due Tick viene contato il numero di mpulsi impulsi di encoder ricevuti con degli interrupt e contentuo nella variabile nCountRiseEdge */ |
pinofal | 18:4b1d35d5f4fd | 89 | /*********************************************************************************************************************************************/ |
pinofal | 18:4b1d35d5f4fd | 90 | |
pinofal | 18:4b1d35d5f4fd | 91 | /**********/ |
pinofal | 18:4b1d35d5f4fd | 92 | /* MAIN */ |
pinofal | 18:4b1d35d5f4fd | 93 | /**********/ |
pinofal | 18:4b1d35d5f4fd | 94 | int main() |
francesco01 | 19:733cea5788a4 | 95 | { |
pinofal | 18:4b1d35d5f4fd | 96 | // messaggio di benvenuto |
francesco01 | 19:733cea5788a4 | 97 | pc.printf("\r\n************ CLM ****************** \r\n"); |
francesco01 | 19:733cea5788a4 | 98 | pc.printf("*** Campanella Amaldi ***\r\n"); |
francesco01 | 19:733cea5788a4 | 99 | myBLE.printf("***W Campanella Amaldi ***\r\n"); |
pinofal | 18:4b1d35d5f4fd | 100 | |
pinofal | 18:4b1d35d5f4fd | 101 | // inizializza variabili da BLE |
pinofal | 18:4b1d35d5f4fd | 102 | cCommandBLE = 0; // inizialmente nessun comando da BLE |
pinofal | 20:04c0e20e1399 | 103 | cOldCommandBLE = 0; // inizialmente nessun comando da BLE |
pinofal | 20:04c0e20e1399 | 104 | |
pinofal | 20:04c0e20e1399 | 105 | // Attiva la IRQ per la RX su seriale |
pinofal | 20:04c0e20e1399 | 106 | myBLE.attach(&BLERxInterrupt,Serial::RxIrq); // // entra in questa routine quando riceve un carattere dalla seriale del BLE |
pinofal | 20:04c0e20e1399 | 107 | |
pinofal | 18:4b1d35d5f4fd | 108 | |
pinofal | 18:4b1d35d5f4fd | 109 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 110 | //++++++++++++++ INIZIO Ciclo Principale +++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 111 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 112 | |
pinofal | 18:4b1d35d5f4fd | 113 | while(true) |
pinofal | 18:4b1d35d5f4fd | 114 | { |
pinofal | 18:4b1d35d5f4fd | 115 | |
pinofal | 18:4b1d35d5f4fd | 116 | //++++++++++++++++++++++++++ INIZIO Interpreta Comandi da Pulsanti della APP ++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 20:04c0e20e1399 | 117 | if(cCommandBLE != cOldCommandBLE) |
pinofal | 20:04c0e20e1399 | 118 | { |
pinofal | 18:4b1d35d5f4fd | 119 | switch (cCommandBLE) |
pinofal | 18:4b1d35d5f4fd | 120 | { |
pinofal | 20:04c0e20e1399 | 121 | case 'I': // entrata |
francesco01 | 19:733cea5788a4 | 122 | { |
pinofal | 20:04c0e20e1399 | 123 | pc.printf("Acceso Messaggio Entrata\n\r"); |
pinofal | 18:4b1d35d5f4fd | 124 | } break; |
pinofal | 20:04c0e20e1399 | 125 | case 'i': // entrata |
pinofal | 20:04c0e20e1399 | 126 | { |
pinofal | 20:04c0e20e1399 | 127 | pc.printf("Spento Messaggio Entrata\n\r"); |
pinofal | 20:04c0e20e1399 | 128 | } break; |
pinofal | 20:04c0e20e1399 | 129 | case 'R': // Cambio |
pinofal | 18:4b1d35d5f4fd | 130 | { |
pinofal | 20:04c0e20e1399 | 131 | pc.printf("Acceso Messaggio Cambio\n\r"); |
pinofal | 20:04c0e20e1399 | 132 | } break; |
pinofal | 20:04c0e20e1399 | 133 | case 'r': // Cambio |
pinofal | 20:04c0e20e1399 | 134 | { |
pinofal | 20:04c0e20e1399 | 135 | pc.printf("Spento Messaggio Cambio\n\r"); |
pinofal | 18:4b1d35d5f4fd | 136 | } break; |
pinofal | 20:04c0e20e1399 | 137 | |
pinofal | 20:04c0e20e1399 | 138 | case 'U': // Uscita |
pinofal | 18:4b1d35d5f4fd | 139 | { |
pinofal | 20:04c0e20e1399 | 140 | pc.printf("Acceso Messaggio Uscite\n\r"); |
pinofal | 20:04c0e20e1399 | 141 | } break; |
pinofal | 20:04c0e20e1399 | 142 | case 'u': // Uscita |
pinofal | 20:04c0e20e1399 | 143 | { |
pinofal | 20:04c0e20e1399 | 144 | pc.printf("Spento Messaggio Uscite\n\r"); |
pinofal | 18:4b1d35d5f4fd | 145 | } break; |
pinofal | 18:4b1d35d5f4fd | 146 | |
pinofal | 18:4b1d35d5f4fd | 147 | default: break; |
pinofal | 18:4b1d35d5f4fd | 148 | } |
pinofal | 20:04c0e20e1399 | 149 | // ricorda di aver già compiuto l'operazione e non la ripetere fino a ricezione nuovo comando |
pinofal | 18:4b1d35d5f4fd | 150 | cOldCommandBLE = cCommandBLE; |
pinofal | 18:4b1d35d5f4fd | 151 | } |
pinofal | 18:4b1d35d5f4fd | 152 | |
pinofal | 20:04c0e20e1399 | 153 | |
pinofal | 18:4b1d35d5f4fd | 154 | //++++++++++++++++++++++++++++++++++++++++++++ FINE Interpreta Comandi da Pulsanti della APP ++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 155 | } //while (true) Ciclo principale |
pinofal | 18:4b1d35d5f4fd | 156 | |
pinofal | 18:4b1d35d5f4fd | 157 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 158 | //++++++++++++++ FINE Ciclo Principale +++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 159 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
pinofal | 18:4b1d35d5f4fd | 160 | |
pinofal | 18:4b1d35d5f4fd | 161 | } // main() |