Problemi

Dependencies:   mbed

Committer:
francesco01
Date:
Thu Jul 23 10:19:54 2020 +0000
Revision:
19:733cea5788a4
Parent:
18:4b1d35d5f4fd
Problemi

Who changed what in which revision?

UserRevisionLine numberNew 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()