Driver for the JY-MCU v1.06 HC-06 Bluetooth module.
Dependents: DISCO-F746NG_rtos_test MbedTableControl
Diff: HC06Bluetooth.cpp
- Revision:
- 12:5ba022adbbfb
- Parent:
- 11:aeb8c5c27111
- Child:
- 13:5768b18a1289
--- a/HC06Bluetooth.cpp Tue Aug 02 16:48:13 2016 +0000 +++ b/HC06Bluetooth.cpp Tue Aug 02 20:16:26 2016 +0000 @@ -11,16 +11,15 @@ /* Static methods used to help configure the Baudrate. */ // WARNING: DO NOT CHANGE THESE VALUES, AS THEY ARE USED TO INDEX INTO AN ARRAY FOR IMPLEMENTATION. -enum Baudrate {B1200, B2400, B4800, B9600, B19200, B38400, B57600, B115200, B230400, B460800, B921600, B1382400, END}; const char* BaudATString[] = {"AT+BAUD1", "AT+BAUD2", "AT+BAUD3", "AT+BAUD4", "AT+BAUD5", "AT+BAUD6", "AT+BAUD7", "AT+BAUD8", "AT+BAUD9", "AT+BAUDA", "AT+BAUDB", "AT+BAUDC"}; const int32_t BaudATReplyLength[] = {6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9}; //const char* BaudATReplyPattern[] = {"OK1200", "OK2400", "OK4800","OK9600","OK19200","OK38400","OK57600","OK115200","OK230400","OK460800","OK921600","OK1382400"}; const int32_t BaudValue[] = {1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400}; /* HC06 Bluetooth Class Implementation: */ -HC06Bluetooth::HC06Bluetooth(PinName TX, PinName RX, void (*lineCallbackFunc) (const char* readString, size_t strlen), void (*charCallbackFunc) (char readChar)) -: btSerialObj(TX, RX), lineCallbackFunc(lineCallbackFunc), charCallbackFunc(charCallbackFunc) { - btSerialObj.baud(115200); +HC06Bluetooth::HC06Bluetooth(PinName TX, PinName RX, Baudrate baudrate, void (*lineCallbackFunc) (const char* readString, size_t strlen), void (*charCallbackFunc) (char readChar)) +: btSerialObj(TX, RX), baudrate(baudrate), lineCallbackFunc(lineCallbackFunc), charCallbackFunc(charCallbackFunc) { + btSerialObj.baud(baudrate); // Set the interrupt to be called when a byte is received. if ((lineCallbackFunc != NULL) || (charCallbackFunc != NULL)) { @@ -33,11 +32,11 @@ // Detatch the interrupt. btSerialObj.attach(NULL); /* Sweep through a list of Baud rates until we find the one that the device has previously been set to. */ - bool baudFound = false; + volatile bool baudFound = false; Timer timeOut; timeOut.start(); // For every baud rate in the list: - for (int i = 0; (i < END) && (!baudFound); i++) { + for (volatile int i = 0; (i < END) && (!baudFound); i++) { // Set the communication baud rate to it. btSerialObj.baud(BaudValue[i]); // Send the test command "AT" to the device. @@ -56,29 +55,32 @@ btSerialObj.getc(); } //Overwrite the Baud rate to 115200. - btSerialObj.puts(BaudATString[B115200]); - btSerialObj.baud(BaudValue[B115200]); + btSerialObj.puts(BaudATString[baudrate]); + btSerialObj.baud(BaudValue[baudrate]); // Wait for the 8 character reply "OK115200" - for(numCharsReceived = 0 ; numCharsReceived < BaudATReplyLength[B115200]; numCharsReceived++) { + for(numCharsReceived = 0 ; numCharsReceived < BaudATReplyLength[baudrate]; numCharsReceived++) { //while(!btSerialObj.readable()); - btSerialObj.getc(); + //btSerialObj.getc(); } + wait_ms(1000); // Set the name of the device. btSerialObj.puts(("AT+NAME" + deviceName.substr(0,20)).c_str()); // Wait for the 6 character reply "OKname" for(numCharsReceived = 0 ; numCharsReceived < 6; numCharsReceived++) { - while(!btSerialObj.readable()); - btSerialObj.getc(); + //while(!btSerialObj.readable()); + //btSerialObj.getc(); } + wait_ms(1000); //Set the password of the device. btSerialObj.puts(("AT+PIN" + PIN.substr(0, 4)).c_str()); // Wait for the 8 character reply "OKsetpin" for(numCharsReceived = 0 ; numCharsReceived < 8; numCharsReceived++) { - while(!btSerialObj.readable()); - btSerialObj.getc(); + //while(!btSerialObj.readable()); + //btSerialObj.getc(); } + wait_ms(1000); // Reattach the interrupt. btSerialObj.attach(this, &HC06Bluetooth::receiveByteISR); }