sensory_array
/
mbed_bluetooth_slave
bluetooth working in slave mode to external device
robotLibrary.cpp
- Committer:
- rkk
- Date:
- 2015-03-26
- Revision:
- 1:e1d94aace7c4
- Parent:
- 0:e005e19869fc
File content as of revision 1:e1d94aace7c4:
#include "robotLibrary.h" USBSerial console1; // tx, rx Serial bt(p9,p10); // tx, rx char bluetoothData[50]; bool bluetoothConnected; bool validBluetoothData; // Read data from the bluetooth // Stores data in the bluetoothData array // Messages must end in the null termination character ('\0') // Will return true if a complete bluetooth message has been received (and thus if the data in bluetoothData is valid) // This method DOES NOT BLOCK // it will read as long as data is available and then stop, whether or not the message is complete // at the next call, it will continue reading and adding to the array until '\0' is received // Thus, this method is meant to be called once per loop bool getBluetoothData() { if(validBluetoothData) // reset array { for(int i = 0; i < 50; i++) bluetoothData[i] = '\0'; validBluetoothData = false; } if(!bluetoothAvailable()) return false; int index = length(bluetoothData); while(bluetoothAvailable() && !validBluetoothData) { bluetoothData[index++] = getBluetoothChar(); validBluetoothData = (bluetoothData[index-1] == '\0'); } if(validBluetoothData) { // If it is a heartbeat, respond to it now if(equals(bluetoothData, "?")) { sendBluetoothData("?"); bluetoothData[0] = '\0'; validBluetoothData = false; return false; } robotPrintDebug("Got BT data <"); robotPrintDebug(bluetoothData); robotPrintlnDebug(">\0"); } return validBluetoothData; } // This method is similar to the above method, except that this version DOES BLOCK // It will keep trying to read until a complete message has been receieved or a timeout is reached // Returns true if a valid message was received //bool getBluetoothData() //{ // bluetoothData[0] = '\0'; // if(!bluetoothAvailable()) // return false; // int timeout = 50; // int index = 0; // bool terminated = false; // unsigned long start = millis(); // while(!terminated && millis() - start < timeout) // { // while(!bluetoothAvailable() && millis() - start < timeout); // bluetoothData[index++] = getBluetoothChar(); // start = millis(); // terminated = (bluetoothData[index-1] == '\0'); // } // if(index > 0 && bluetoothData[index-1] != '\0') // bluetoothData[index] = '\0'; // // If it is a heartbeat, respond to it now // if(equals(bluetoothData, "?")) // { // sendBluetoothData("?"); // bluetoothData[0] = '\0'; // return false; // } // robotPrintDebug("Got BT data <"); robotPrintDebug(bluetoothData); robotPrintlnDebug(">"); // return true; //} // Returns the value of bluetoothConnected // This variable must be set somewhere, probably in processBluetoothData bool isBluetoothConnected() { return bluetoothConnected; } // Read bluetooth data and then process it void processBluetoothData() { if(!getBluetoothData()) return; // DO SOMETHING WITH bluetoothData HERE // If it is a valid message, set bluetoothConnected = true bluetoothConnected = true; } char* returnBluetoothData(){ return bluetoothData; } bool isBluetoothDataValid() { return validBluetoothData; } void robotLoop() { //robotPrintlnDebug(); processBluetoothData(); } void robotSetup() { bt.baud(9600); //sendBluetoothData("AT+NAME"); //sendBluetoothData("myRobotBT"); bluetoothConnected = false; validBluetoothData = false; bluetoothData[0] = '\0'; } void sendBluetoothData(const char* data) { robotPrintDebug("Sending BT data <"); robotPrintDebug(data); robotPrintlnDebug(">"); int index = 0; for(; index < length(data); index++) { sendBluetoothChar(data[index]); wait_ms(5); } if(data[index-1] != '\0') sendBluetoothChar('\0'); robotPrintDebug("Sent BT data <"); robotPrintDebug(data); robotPrintlnDebug(">"); }