Campanella Problemi Risolti

Dependencies:   mbed

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?

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