BlueTooth HC-05 module running on a ST-Nucleo-F303K8

Dependents:   Nucleo_interf_bluetooth

Work version with the "BT Bot Control" app for Android. Running on a NuCleo-F303K8 and a HC-05 bluetooth module.

Committer:
Kio_Liex
Date:
Thu Feb 04 20:18:06 2016 +0000
Revision:
0:e0c6e95761d2
BlueTooth HC-05 module running on a ST-Nucleo-F303K8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kio_Liex 0:e0c6e95761d2 1 #include "mbed.h"
Kio_Liex 0:e0c6e95761d2 2 #include "HC05.h"
Kio_Liex 0:e0c6e95761d2 3
Kio_Liex 0:e0c6e95761d2 4 HC05::HC05(PinName tx, PinName rx): myBT(tx, rx)
Kio_Liex 0:e0c6e95761d2 5 {
Kio_Liex 0:e0c6e95761d2 6 myBT.baud(9600);
Kio_Liex 0:e0c6e95761d2 7
Kio_Liex 0:e0c6e95761d2 8 index = 0;
Kio_Liex 0:e0c6e95761d2 9
Kio_Liex 0:e0c6e95761d2 10 started = false;
Kio_Liex 0:e0c6e95761d2 11 ended = false;
Kio_Liex 0:e0c6e95761d2 12 }
Kio_Liex 0:e0c6e95761d2 13
Kio_Liex 0:e0c6e95761d2 14 void HC05::getValue(int16_t* x, int16_t* y, int16_t* c)
Kio_Liex 0:e0c6e95761d2 15 {
Kio_Liex 0:e0c6e95761d2 16 if(!myBT.readable())
Kio_Liex 0:e0c6e95761d2 17 {
Kio_Liex 0:e0c6e95761d2 18 *x = 0;
Kio_Liex 0:e0c6e95761d2 19 *y = 0;
Kio_Liex 0:e0c6e95761d2 20 *c = 0;
Kio_Liex 0:e0c6e95761d2 21 }
Kio_Liex 0:e0c6e95761d2 22 while(myBT.readable())
Kio_Liex 0:e0c6e95761d2 23 {
Kio_Liex 0:e0c6e95761d2 24 btChar = myBT.getc();
Kio_Liex 0:e0c6e95761d2 25
Kio_Liex 0:e0c6e95761d2 26 if(btChar == SOP)
Kio_Liex 0:e0c6e95761d2 27 {
Kio_Liex 0:e0c6e95761d2 28 index = 0;
Kio_Liex 0:e0c6e95761d2 29 btData[index] = '\0';
Kio_Liex 0:e0c6e95761d2 30 started = true;
Kio_Liex 0:e0c6e95761d2 31 ended = false;
Kio_Liex 0:e0c6e95761d2 32 }
Kio_Liex 0:e0c6e95761d2 33 else if(btChar == EOP)
Kio_Liex 0:e0c6e95761d2 34 {
Kio_Liex 0:e0c6e95761d2 35 ended = true;
Kio_Liex 0:e0c6e95761d2 36 break;
Kio_Liex 0:e0c6e95761d2 37 }
Kio_Liex 0:e0c6e95761d2 38 else
Kio_Liex 0:e0c6e95761d2 39 {
Kio_Liex 0:e0c6e95761d2 40 if(index < 19)
Kio_Liex 0:e0c6e95761d2 41 {
Kio_Liex 0:e0c6e95761d2 42 btData[index] = btChar;
Kio_Liex 0:e0c6e95761d2 43 index++;
Kio_Liex 0:e0c6e95761d2 44 btData[index] = '\0';
Kio_Liex 0:e0c6e95761d2 45 }
Kio_Liex 0:e0c6e95761d2 46 }
Kio_Liex 0:e0c6e95761d2 47 }
Kio_Liex 0:e0c6e95761d2 48
Kio_Liex 0:e0c6e95761d2 49 if(started && ended)
Kio_Liex 0:e0c6e95761d2 50 {
Kio_Liex 0:e0c6e95761d2 51 char *name = strtok(btData, "=");
Kio_Liex 0:e0c6e95761d2 52
Kio_Liex 0:e0c6e95761d2 53 while(name)
Kio_Liex 0:e0c6e95761d2 54 {
Kio_Liex 0:e0c6e95761d2 55 char *valToken = strtok(NULL, ",");
Kio_Liex 0:e0c6e95761d2 56 if(valToken)
Kio_Liex 0:e0c6e95761d2 57 {
Kio_Liex 0:e0c6e95761d2 58 int val = atoi(valToken);
Kio_Liex 0:e0c6e95761d2 59
Kio_Liex 0:e0c6e95761d2 60 if(strcmp(name, "X") == 0)
Kio_Liex 0:e0c6e95761d2 61 {
Kio_Liex 0:e0c6e95761d2 62 *x = val;
Kio_Liex 0:e0c6e95761d2 63 }
Kio_Liex 0:e0c6e95761d2 64 else if(strcmp(name, "Y") == 0)
Kio_Liex 0:e0c6e95761d2 65 {
Kio_Liex 0:e0c6e95761d2 66 *y = val;
Kio_Liex 0:e0c6e95761d2 67 }
Kio_Liex 0:e0c6e95761d2 68 else if(strcmp(name, "C") == 0)
Kio_Liex 0:e0c6e95761d2 69 {
Kio_Liex 0:e0c6e95761d2 70 *c = val;
Kio_Liex 0:e0c6e95761d2 71 }
Kio_Liex 0:e0c6e95761d2 72 }
Kio_Liex 0:e0c6e95761d2 73 name = strtok(NULL, "=");
Kio_Liex 0:e0c6e95761d2 74 }
Kio_Liex 0:e0c6e95761d2 75
Kio_Liex 0:e0c6e95761d2 76 // Reset for the next packet
Kio_Liex 0:e0c6e95761d2 77 started = false;
Kio_Liex 0:e0c6e95761d2 78 ended = false;
Kio_Liex 0:e0c6e95761d2 79 index = 0;
Kio_Liex 0:e0c6e95761d2 80 btData[index] = '\0';
Kio_Liex 0:e0c6e95761d2 81 }
Kio_Liex 0:e0c6e95761d2 82 }