Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API BMP180 mbed nRF51822
Fork of BLE_GATT_Example by
Revision 23:8cccf9ededdb, committed 2016-01-03
- Comitter:
- Kemix
- Date:
- Sun Jan 03 12:38:52 2016 +0000
- Parent:
- 22:406127954d1f
- Commit message:
- End
Changed in this revision
| BMP180.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 406127954d1f -r 8cccf9ededdb BMP180.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BMP180.lib Sun Jan 03 12:38:52 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/kenjiArai/code/BMP180/#20e0c6b19c24
diff -r 406127954d1f -r 8cccf9ededdb main.cpp
--- a/main.cpp Mon Nov 09 17:08:47 2015 +0000
+++ b/main.cpp Sun Jan 03 12:38:52 2016 +0000
@@ -1,25 +1,47 @@
#include "mbed.h"
+#include "BMP180.h"
#include "ble/BLE.h"
-DigitalOut led(LED1, 1);
+BMP180 baro(D14, D15);
+uint8_t* bufTemp;
+uint8_t* bufPress;
+uint8_t* bufHum;
+float tmpTemp=0.0;
+float tmpPress=0.0;
+float tmpHum = 0.0;
+
+Ticker updateValue;
+bool flagCapt = true;
+AnalogIn Pot(A0);
+
uint16_t customServiceUUID = 0xA000;
-uint16_t readCharUUID = 0xA001;
-uint16_t writeCharUUID = 0xA002;
+uint16_t TempCharUUID = 0xA001;
+uint16_t PressCharUUID = 0xA002;
+uint16_t HumCharUUID = 0xA003;
-const static char DEVICE_NAME[] = "ChangeMe!!"; // change this
+const static char DEVICE_NAME[] = "Capteur"; // change this
static const uint16_t uuid16_list[] = {0xFFFF}; //Custom UUID, FFFF is reserved for development
/* Set Up custom Characteristics */
-static uint8_t readValue[10] = {0};
-ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readValue)> readChar(readCharUUID, readValue);
+static uint8_t TempValue[4] = {0};
+ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(TempValue)> TempChar(TempCharUUID, TempValue);
-static uint8_t writeValue[10] = {0};
-WriteOnlyArrayGattCharacteristic<uint8_t, sizeof(writeValue)> writeChar(writeCharUUID, writeValue);
+static uint8_t PressValue[4] = {0};
+ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(PressValue)> PressChar(PressCharUUID, PressValue);
+
+static uint8_t HumValue[4] = {0};
+ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(HumValue)> HumChar(HumCharUUID, HumValue);
/* Set up custom service */
-GattCharacteristic *characteristics[] = {&readChar, &writeChar};
+GattCharacteristic *characteristics[] = {&TempChar, &PressChar, &HumChar};
GattService customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
+/*
+ * Callback when the redbearlab has to update its values
+*/
+void callbackUpdate() {
+ flagCapt = true;
+}
/*
* Restart advertising when phone app disconnects
@@ -30,30 +52,6 @@
}
/*
- * Handle writes to writeCharacteristic
-*/
-void writeCharCallback(const GattWriteCallbackParams *params)
-{
- /* Check to see what characteristic was written, by handle */
- if(params->handle == writeChar.getValueHandle()) {
- /* toggle LED if only 1 byte is written */
- if(params->len == 1) {
- led = params->data[0];
- (params->data[0] == 0x00) ? printf("led on\n\r") : printf("led off\n\r"); // print led toggle
- }
- /* Print the data if more than 1 byte is written */
- else {
- printf("Data received: length = %d, data = 0x",params->len);
- for(int x=0; x < params->len; x++) {
- printf("%x", params->data[x]);
- }
- printf("\n\r");
- }
- /* Update the readChar with the value of writeChar */
- BLE::Instance(BLE::DEFAULT_INSTANCE).gattServer().write(readChar.getValueHandle(), params->data, params->len);
- }
-}
-/*
* Initialization callback
*/
void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
@@ -66,7 +64,6 @@
}
ble.gap().onDisconnection(disconnectionCallback);
- ble.gattServer().onDataWritten(writeCharCallback);
/* Setup advertising */
ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT
@@ -87,6 +84,8 @@
*/
int main(void)
{
+ updateValue.attach_us(&callbackUpdate,100000);
+
/* initialize stuff */
printf("\n\r********* Starting Main Loop *********\n\r");
@@ -97,8 +96,29 @@
* BLE object is used in the main loop below. */
while (ble.hasInitialized() == false) { /* spin loop */ }
- /* Infinite loop waiting for BLE interrupt events */
+ /* Infinite loop waiting for BLE*/
while (true) {
- ble.waitForEvent(); /* Save power */
+ /* Check if update needed*/
+ if(flagCapt == true){
+ flagCapt = false;
+
+ /* Get the new values*/
+ baro.normalize();
+ tmpTemp = baro.read_temperature();
+ tmpPress = baro.read_pressure();
+ tmpHum = Pot;
+
+ /* Convert float into arrays of 4 uint8_t*/
+ bufTemp = reinterpret_cast<uint8_t*>(&tmpTemp);
+ bufPress = reinterpret_cast<uint8_t*>(&tmpPress);
+ bufHum = reinterpret_cast<uint8_t*>(&tmpHum);
+
+ /* Update values into GattCharacteristic*/
+ ble.updateCharacteristicValue(TempChar.getValueAttribute().getHandle(), bufTemp, 4);
+ ble.updateCharacteristicValue(PressChar.getValueAttribute().getHandle(), bufPress, 4);
+ ble.updateCharacteristicValue(HumChar.getValueAttribute().getHandle(), bufHum, 4);
+ }else{
+ ble.waitForEvent(); /* Save power */
+ }
}
}
\ No newline at end of file
