Driver for the JY-MCU v1.06 HC-06 Bluetooth module.

Dependents:   DISCO-F746NG_rtos_test MbedTableControl

Committer:
Electrotiger
Date:
Thu Jun 16 23:24:08 2016 +0000
Revision:
8:14bf9b541f9a
Parent:
6:5ba0038a7a9a
Child:
9:3e23f3f615f2
Now tested. ; ; TODO: Ensure the setup function works when attempting to deal with different baud rates.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Electrotiger 0:3ab5e47dde1e 1 /*
Electrotiger 0:3ab5e47dde1e 2 * HC06Bluetooth.cpp
Electrotiger 0:3ab5e47dde1e 3 *
Electrotiger 0:3ab5e47dde1e 4 * Created on: Jun 4, 2016
Electrotiger 0:3ab5e47dde1e 5 * Author: Developer
Electrotiger 0:3ab5e47dde1e 6 */
Electrotiger 0:3ab5e47dde1e 7
Electrotiger 0:3ab5e47dde1e 8 #include <HC06Bluetooth.hpp>
Electrotiger 1:026034717620 9 #include <algorithm>
Electrotiger 0:3ab5e47dde1e 10
Electrotiger 8:14bf9b541f9a 11
Electrotiger 8:14bf9b541f9a 12
Electrotiger 8:14bf9b541f9a 13 HC06Bluetooth::HC06Bluetooth(PinName TX, PinName RX, void (*lineCallbackFunc) (const char* readString), void (*charCallbackFunc) (char readChar))
Electrotiger 8:14bf9b541f9a 14 : btSerialObj(TX, RX), lineCallbackFunc(lineCallbackFunc), charCallbackFunc(charCallbackFunc) {
Electrotiger 8:14bf9b541f9a 15 btSerialObj.baud(115200);
Electrotiger 8:14bf9b541f9a 16
Electrotiger 8:14bf9b541f9a 17 // Set the interrupt to be called when a byte is received.
Electrotiger 8:14bf9b541f9a 18 if ((lineCallbackFunc != NULL) || (charCallbackFunc != NULL)) {
Electrotiger 8:14bf9b541f9a 19 btSerialObj.attach(this, &HC06Bluetooth::receiveByteISR);
Electrotiger 8:14bf9b541f9a 20 }
Electrotiger 8:14bf9b541f9a 21 }
Electrotiger 8:14bf9b541f9a 22
Electrotiger 8:14bf9b541f9a 23 void HC06Bluetooth::runSetup(std::string deviceName, std::string PIN) {
Electrotiger 8:14bf9b541f9a 24 // TODO: Sweep through a list of Baud rates until we find one that works!
Electrotiger 8:14bf9b541f9a 25 int numCharsReceived = 0;
Electrotiger 8:14bf9b541f9a 26 // The default baud rate is 9600. Overwrite it to 115200.
Electrotiger 8:14bf9b541f9a 27 btSerialObj.puts("AT+BAUD8");
Electrotiger 8:14bf9b541f9a 28 btSerialObj.baud(115200);
Electrotiger 8:14bf9b541f9a 29 // Wait for the 8 character reply "OK115200"
Electrotiger 8:14bf9b541f9a 30 for(numCharsReceived = 0 ; numCharsReceived < 8; numCharsReceived++) {
Electrotiger 8:14bf9b541f9a 31 while(!btSerialObj.readable());
Electrotiger 8:14bf9b541f9a 32 btSerialObj.getc();
Electrotiger 8:14bf9b541f9a 33 }
Electrotiger 8:14bf9b541f9a 34
Electrotiger 0:3ab5e47dde1e 35 // Set the name of the device.
Electrotiger 8:14bf9b541f9a 36 btSerialObj.puts(("AT+NAME" + deviceName.substr(0,20)).c_str());
Electrotiger 8:14bf9b541f9a 37 // Wait for the 6 character reply "OKname"
Electrotiger 8:14bf9b541f9a 38 for(numCharsReceived = 0 ; numCharsReceived < 6; numCharsReceived++) {
Electrotiger 8:14bf9b541f9a 39 while(!btSerialObj.readable());
Electrotiger 8:14bf9b541f9a 40 btSerialObj.getc();
Electrotiger 8:14bf9b541f9a 41 }
Electrotiger 8:14bf9b541f9a 42
Electrotiger 8:14bf9b541f9a 43 //Set the password of the device.
Electrotiger 8:14bf9b541f9a 44 btSerialObj.puts(("AT+PIN" + PIN.substr(0, 4)).c_str());
Electrotiger 8:14bf9b541f9a 45 // Wait for the 8 character reply "OKsetpin"
Electrotiger 8:14bf9b541f9a 46 for(numCharsReceived = 0 ; numCharsReceived < 8; numCharsReceived++) {
Electrotiger 8:14bf9b541f9a 47 while(!btSerialObj.readable());
Electrotiger 8:14bf9b541f9a 48 btSerialObj.getc();
Electrotiger 3:ee17212e838e 49 }
Electrotiger 0:3ab5e47dde1e 50 }
Electrotiger 0:3ab5e47dde1e 51
Electrotiger 0:3ab5e47dde1e 52 HC06Bluetooth::~HC06Bluetooth() {
Electrotiger 0:3ab5e47dde1e 53 // TODO Auto-generated destructor stub
Electrotiger 0:3ab5e47dde1e 54 }
Electrotiger 0:3ab5e47dde1e 55
Electrotiger 6:5ba0038a7a9a 56 void HC06Bluetooth::print(const char* buffer) {
Electrotiger 6:5ba0038a7a9a 57 btSerialObj.puts(buffer);
Electrotiger 6:5ba0038a7a9a 58 }
Electrotiger 6:5ba0038a7a9a 59
Electrotiger 8:14bf9b541f9a 60 void HC06Bluetooth::print(char c) {
Electrotiger 8:14bf9b541f9a 61 btSerialObj.putc(c);
Electrotiger 8:14bf9b541f9a 62 }
Electrotiger 8:14bf9b541f9a 63
Electrotiger 0:3ab5e47dde1e 64 void HC06Bluetooth::receiveByteISR() {
Electrotiger 6:5ba0038a7a9a 65 while(btSerialObj.readable()) {
Electrotiger 1:026034717620 66 // Get the character from the input.
Electrotiger 6:5ba0038a7a9a 67 char receivedChar = btSerialObj.getc();
Electrotiger 8:14bf9b541f9a 68
Electrotiger 8:14bf9b541f9a 69 // Call the character callback function if it is not null.
Electrotiger 8:14bf9b541f9a 70 if (charCallbackFunc != NULL) {
Electrotiger 8:14bf9b541f9a 71 charCallbackFunc(receivedChar);
Electrotiger 8:14bf9b541f9a 72 }
Electrotiger 8:14bf9b541f9a 73
Electrotiger 8:14bf9b541f9a 74 // If the character is a newline or carriage return, then call the line callback function.
Electrotiger 8:14bf9b541f9a 75 if ((receivedChar == '\n') || (receivedChar == '\r')) {
Electrotiger 1:026034717620 76 // Terminate the buffer with a null character, since that is what strings end with.
Electrotiger 1:026034717620 77 receivedChar = '\0';
Electrotiger 1:026034717620 78 dataReceivedBuffer[dataReceivedBufferPos] = receivedChar;
Electrotiger 1:026034717620 79 // Copy data from the buffer to a copy.
Electrotiger 1:026034717620 80 std::copy(dataReceivedBuffer, dataReceivedBuffer + dataReceivedBufferPos, dataReceivedBufferCopy);
Electrotiger 1:026034717620 81 // Reset the buffer position.
Electrotiger 1:026034717620 82 dataReceivedBufferPos = 0;
Electrotiger 1:026034717620 83 // Call the callback function.
Electrotiger 8:14bf9b541f9a 84 if (lineCallbackFunc != NULL) {
Electrotiger 8:14bf9b541f9a 85 lineCallbackFunc((const char*)dataReceivedBuffer);
Electrotiger 8:14bf9b541f9a 86 }
Electrotiger 1:026034717620 87 }
Electrotiger 1:026034717620 88 // Otherwise, just place it in the buffer and move on.
Electrotiger 1:026034717620 89 else {
Electrotiger 8:14bf9b541f9a 90 dataReceivedBuffer[dataReceivedBufferPos] = receivedChar;
Electrotiger 1:026034717620 91 dataReceivedBufferPos++;
Electrotiger 1:026034717620 92 }
Electrotiger 1:026034717620 93 }
Electrotiger 2:7e0453895727 94 }
Electrotiger 0:3ab5e47dde1e 95