Pull request for i.a. sensor buffer template
Dependencies: BLE_API MPU6050 mbed nRF51822
Diff: main.cpp
- Revision:
- 2:bf1a19d489eb
- Parent:
- 1:b529e733ab71
- Child:
- 3:7875f062a4ea
--- a/main.cpp Fri Sep 14 19:47:25 2018 +0000 +++ b/main.cpp Fri Sep 14 20:06:28 2018 +0000 @@ -9,6 +9,8 @@ #include "BLE.h" #include "DFUService.h" #include "UARTService.h" +#include "BatteryService.h" +#include "DeviceInformationService.h" #define LOG(...) { pc.printf(__VA_ARGS__); } @@ -30,6 +32,14 @@ /* Starting sampling rate. */ #define DEFAULT_MPU_HZ (100) + +#define MANUFACTURER "ALTEN" +#define MODELNUMBER "IoT BLE (PM)" +#define SERIALNUMBER "serialnumber" +#define HARDWAREREVISION "demo1" +#define FIRMWAREREVISION "1.0" +#define SOFTWAREREVISION "1.0" + DigitalOut blue(LED_BLUE); DigitalOut green(LED_GREEN); DigitalOut red(LED_RED); @@ -45,6 +55,10 @@ BLEDevice ble; UARTService *uartServicePtr; +// variables to monitor the battery voltage +float batteryVoltage = 100.0f; +bool batteryVoltageChanged = false; + volatile bool bleIsConnected = false; volatile uint8_t tick_event = 0; volatile uint8_t motion_event = 0; @@ -81,6 +95,17 @@ green = !green; } +// timer callback function to measure the ADC battery level +void batteryMonitorCallback(void) +{ + float sample; + + sample = battery.read(); + /* cannot use (uart.)printf() in a ISR like this. */ + batteryVoltage = sample; + batteryVoltageChanged = true; +} + void detect(void) { LOG("Button pressed\n"); @@ -160,6 +185,9 @@ Ticker ticker; ticker.attach(tick, 3); + + Ticker batteryMonitorTicker; + batteryMonitorTicker.attach(batteryMonitorCallback, 60.0f); button.fall(detect); @@ -196,6 +224,8 @@ UARTService uartService(ble); uartServicePtr = &uartService; //uartService.retargetStdout(); + BatteryService battery(ble); + DeviceInformationService deviceInfo(ble, MANUFACTURER, MODELNUMBER, SERIALNUMBER, HARDWAREREVISION, FIRMWAREREVISION, SOFTWAREREVISION); ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ ble.gap().startAdvertising(); @@ -261,6 +291,13 @@ motion_event = 0; } else { ble.waitForEvent(); + + // update battery level after the level is measured + if (batteryVoltageChanged == true) { + LOG("VBat: %4.3f, ADC: %4.3f, Vadc: %4.3f\n", batteryVoltage*2.0f, batteryVoltage, batteryVoltage*3.3f); + battery.updateBatteryLevel((uint8_t)(batteryVoltage*100.0f)); // input is 0-1.0 of 3.3V -> *100 = percentage of 3.3V + batteryVoltageChanged = false; + } } } }