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

Dependents:   DISCO-F746NG_rtos_test MbedTableControl

Committer:
Electrotiger
Date:
Thu Jun 09 18:25:31 2016 +0000
Revision:
6:5ba0038a7a9a
Parent:
3:ee17212e838e
Child:
8:14bf9b541f9a
Fixed error with merging branches (I should have deleted the other branch.)

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 2:7e0453895727 11 HC06Bluetooth::HC06Bluetooth(PinName TX, PinName RX, std::string deviceName, void (*callbackFunc) (const char* readString))
Electrotiger 6:5ba0038a7a9a 12 : btSerialObj(TX, RX), callbackFunc (callbackFunc) {
Electrotiger 0:3ab5e47dde1e 13 // The default baud rate is 9600. Overwrite it to 230400.
Electrotiger 6:5ba0038a7a9a 14 btSerialObj.puts("AT+BAUD9");
Electrotiger 6:5ba0038a7a9a 15 btSerialObj.baud(230400);
Electrotiger 0:3ab5e47dde1e 16 // Set the name of the device.
Electrotiger 6:5ba0038a7a9a 17 btSerialObj.puts(("AT+NAME" + deviceName).c_str());
Electrotiger 0:3ab5e47dde1e 18 // Set the interrupt to be called when a byte is received.
Electrotiger 3:ee17212e838e 19 if (callbackFunc != NULL) {
Electrotiger 6:5ba0038a7a9a 20 btSerialObj.attach(this, &HC06Bluetooth::receiveByteISR);
Electrotiger 3:ee17212e838e 21 }
Electrotiger 0:3ab5e47dde1e 22 }
Electrotiger 0:3ab5e47dde1e 23
Electrotiger 0:3ab5e47dde1e 24 HC06Bluetooth::~HC06Bluetooth() {
Electrotiger 0:3ab5e47dde1e 25 // TODO Auto-generated destructor stub
Electrotiger 0:3ab5e47dde1e 26 }
Electrotiger 0:3ab5e47dde1e 27
Electrotiger 6:5ba0038a7a9a 28 void HC06Bluetooth::print(const char* buffer) {
Electrotiger 6:5ba0038a7a9a 29 btSerialObj.puts(buffer);
Electrotiger 6:5ba0038a7a9a 30 }
Electrotiger 6:5ba0038a7a9a 31
Electrotiger 0:3ab5e47dde1e 32 void HC06Bluetooth::receiveByteISR() {
Electrotiger 6:5ba0038a7a9a 33 while(btSerialObj.readable()) {
Electrotiger 1:026034717620 34 // Get the character from the input.
Electrotiger 6:5ba0038a7a9a 35 char receivedChar = btSerialObj.getc();
Electrotiger 1:026034717620 36 // If the character is a newline, then a full command has been read.
Electrotiger 1:026034717620 37 if (receivedChar == '\n') {
Electrotiger 1:026034717620 38 // Terminate the buffer with a null character, since that is what strings end with.
Electrotiger 1:026034717620 39 receivedChar = '\0';
Electrotiger 1:026034717620 40 dataReceivedBuffer[dataReceivedBufferPos] = receivedChar;
Electrotiger 1:026034717620 41 // Copy data from the buffer to a copy.
Electrotiger 1:026034717620 42 std::copy(dataReceivedBuffer, dataReceivedBuffer + dataReceivedBufferPos, dataReceivedBufferCopy);
Electrotiger 1:026034717620 43 // Reset the buffer position.
Electrotiger 1:026034717620 44 dataReceivedBufferPos = 0;
Electrotiger 1:026034717620 45 // Call the callback function.
Electrotiger 1:026034717620 46 callbackFunc((const char*)dataReceivedBuffer);
Electrotiger 1:026034717620 47 }
Electrotiger 1:026034717620 48 // Otherwise, just place it in the buffer and move on.
Electrotiger 1:026034717620 49 else {
Electrotiger 6:5ba0038a7a9a 50 dataReceivedBuffer[dataReceivedBufferPos] = btSerialObj.getc();
Electrotiger 1:026034717620 51 dataReceivedBufferPos++;
Electrotiger 1:026034717620 52 }
Electrotiger 1:026034717620 53 }
Electrotiger 2:7e0453895727 54 }
Electrotiger 0:3ab5e47dde1e 55