prova bt
Dependencies: mbed
Prova_bl.cpp
- Committer:
- maristella
- Date:
- 2020-07-02
- Revision:
- 0:245b8c83ca71
File content as of revision 0:245b8c83ca71:
#include "mbed.h" #include<stdlib.h> #define PACKETDIM 8 // Definizione periferica USB seriale del PC Serial pc(USBTX, USBRX, 921600); // seriale di comunicazione con il PC. Associati a PA_11 e PA_12 // Definizione periferica seriale del Modulo BLE ELETT114A Serial myBLE(PA_9, PA_10, 9600); //Tx, Rx, bps // F401 DigitalOut myLed(LED2); // LED verde sulla scheda. Associato a PA_5 //carattere di comando ricevuto dal BLE e relativo parametro volatile char cCommandBLE; // cambia nella routine di interrupt volatile char cParamBLE; // cambia nella routine di interrupt volatile int nParamBLE; // corrispondente valore numerico di cParamBLE // memorizza l'ultimo comando ricevuto e relativo parametro. Ci saranno delle azioni solo se il comando ricevuto o il parametro è cambiato rispetto al precedente char cOldCommandBLE; int nOldParamBLE; // array per la ricezione dei messaggi da BLE volatile char caRxPacket[PACKETDIM]; // contatore di caratteri ricevuti daBLE volatile int nCharCount; /**********************************************/ // IRQ associata a Rx da PC //**********************************************/ void pcRxInterrupt(void) { // array per la ricezione dei messaggi da seriale char cReadChar; // ricevi caratteri su seriale, se disponibili while((pc.readable())) { // acquisice stringa in input e relativa dimensione cReadChar = pc.getc(); // read character from PC //myBLE.putc(cReadChar); // Diagnostica: write char to BLE //pc.putc(cReadChar); // Diagnostica: write char to PC //pc.printf("W>: 0x%02x\n\r",cReadChar); // diagnostica if(cReadChar == '0') // se scrivo '0', invia questa stringa { // DIAGNOSTICA: // Invia Stringa di comando al Robot myBLE.printf("\r\n> Prova di Trasmissione \r\n"); } } } //**********************************************/ // IRQ associata a Rx da BLE //**********************************************/ void BLERxInterrupt(void) { // carattere ricevuto da BLE char cReadChar; // indice per l'array di caratteri ricevuti int nCharIndex; // variabile ausiliaria int nAux; // flag che diventa true quando viene rilevata una incongruenza dei valori di Ro e Teta, presumibilmente dovuta a errori di comunicazione bool bIncongruenza; while((myBLE.readable())) { // acquisice stringa in input e memorizza in array cReadChar = myBLE.getc(); // Read character caRxPacket[nCharCount]=cReadChar; nCharCount++; //pc.printf("%c", cReadChar); // diagnostica // inizializza flag di incongruenza bIncongruenza = false; if(cReadChar==')') { //pc.printf("\r\n"); // diagnostica // +++++++++++++++++ INIZIO gestione Comando da Button +++++++++++++++++ // Ho ricevuto il comando da un Button se il carattere numero 1, è una lettera maiuscola if((caRxPacket[1] > 0x40) && (caRxPacket[1] < 0x5B)) // caratteri alfabetici { cCommandBLE = caRxPacket[1]; // legge e memorizza il primo carattere nParamBLE = caRxPacket[2]-0x30; myLed=1; // visualizza comando e parametro inviato da BLE //pc.printf("> %c%d \r\n\r",cCommandBLE, nParamBLE); // diagnostica } // +++++++++++++++++ FINE gestione Comando da Button +++++++++++++++++ } // if(cReadChar == ')') } } /**********/ /* MAIN */ /**********/ int main() { myLed = 0; while(true) { if((cCommandBLE != cOldCommandBLE) || (nParamBLE != nOldParamBLE)) { switch (cCommandBLE) { case 'T': // accendi/spegni LED su scheda { myLed = 1; } break; default: break; } //pc.printf("Comando = %c, Parametro = %d \r\n", cCommandBLE, nParamBLE); // diagnostica cOldCommandBLE = cCommandBLE; nOldParamBLE = nParamBLE; } } }