Pull request for i.a. sensor buffer template

Dependencies:   BLE_API MPU6050 mbed nRF51822

Committer:
JustinAtAlten
Date:
Thu Nov 15 15:20:46 2018 +0000
Revision:
11:8c38e284e9f7
Parent:
10:eed92ffd0bba
Added readme.txt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pietermaljaars 0:7c12d0922052 1 #include "mbed.h"
JustinAtAlten 10:eed92ffd0bba 2 #include "mbed_mem_trace.h"
pietermaljaars 0:7c12d0922052 3 #include "nrf51.h"
pietermaljaars 0:7c12d0922052 4 #include "nrf51_bitfields.h"
pietermaljaars 3:7875f062a4ea 5 #include "MPU6050.h"
pietermaljaars 0:7c12d0922052 6
pietermaljaars 0:7c12d0922052 7 #include "BLE.h"
pietermaljaars 0:7c12d0922052 8 #include "DFUService.h"
pietermaljaars 0:7c12d0922052 9 #include "UARTService.h"
pietermaljaars 2:bf1a19d489eb 10 #include "BatteryService.h"
pietermaljaars 2:bf1a19d489eb 11 #include "DeviceInformationService.h"
pietermaljaars 5:614164945894 12 #include "TemperatureService.h"
Pieter Maljaars 7:d92f1383bd81 13 #include "AccelerationService.h"
pietermaljaars 0:7c12d0922052 14
JustinAtAlten 10:eed92ffd0bba 15 #include "ReadIntervals.h"
JustinAtAlten 10:eed92ffd0bba 16 #include "Util.h"
JustinAtAlten 10:eed92ffd0bba 17 #include "IO.h"
JustinAtAlten 10:eed92ffd0bba 18 #include "MeasurementBufferTemplate.h"
pietermaljaars 0:7c12d0922052 19
JustinAtAlten 10:eed92ffd0bba 20 //https://os.mbed.com/handbook/SDFileSystem
JustinAtAlten 10:eed92ffd0bba 21 // http://os.mbed.com/users/mbed_official/code/SDFileSystem/
JustinAtAlten 10:eed92ffd0bba 22 // needs: https://os.mbed.com/teams/mbed-official/code/FATFileSystem/pull-request/4
JustinAtAlten 10:eed92ffd0bba 23 // #include "SDFileSystem.h"
JustinAtAlten 10:eed92ffd0bba 24 //https://os.mbed.com/cookbook/SD-Card-File-System
pietermaljaars 0:7c12d0922052 25
pietermaljaars 0:7c12d0922052 26
JustinAtAlten 10:eed92ffd0bba 27 ///////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 28 // DEFINES //
JustinAtAlten 10:eed92ffd0bba 29 ///////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 30
JustinAtAlten 10:eed92ffd0bba 31 // Starting sampling rate.
pietermaljaars 0:7c12d0922052 32 #define DEFAULT_MPU_HZ (100)
pietermaljaars 0:7c12d0922052 33
JustinAtAlten 10:eed92ffd0bba 34 // --- Device Information --- //
pietermaljaars 4:aea4ff8e52ef 35 #define MANUFACTURER "PM @ ALTEN"
pietermaljaars 4:aea4ff8e52ef 36 #define MODELNUMBER "IoT BLE"
pietermaljaars 4:aea4ff8e52ef 37 #define SERIALNUMBER "123456"
pietermaljaars 4:aea4ff8e52ef 38 #define HARDWAREREVISION "Seeed demo IoT"
pietermaljaars 2:bf1a19d489eb 39 #define FIRMWAREREVISION "1.0"
pietermaljaars 2:bf1a19d489eb 40 #define SOFTWAREREVISION "1.0"
pietermaljaars 2:bf1a19d489eb 41
JustinAtAlten 10:eed92ffd0bba 42 /////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 43 // CONSTANTS //
JustinAtAlten 10:eed92ffd0bba 44 /////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 45
JustinAtAlten 10:eed92ffd0bba 46 // --- UUIDs --- //
JustinAtAlten 10:eed92ffd0bba 47 const char acceleration128bitUUIDlist[] = { 0x53, 0xF8, 0x0E, 0x12, 0xAD, 0xBB, 0xF1, 0x38, 0xAC, 0x07, 0xD2, 0x3D, 0xF0, 0xE2, 0x34, 0x5D };
JustinAtAlten 10:eed92ffd0bba 48 const UUID uuidTempBulkService("11111111-1000-2222-3333-444455556666");
JustinAtAlten 10:eed92ffd0bba 49 const UUID uuidTempBulkCharRead("11111111-1001-2222-3333-444455556666");
pietermaljaars 0:7c12d0922052 50
JustinAtAlten 10:eed92ffd0bba 51 // --- Temperature Buffer Data --- //
JustinAtAlten 10:eed92ffd0bba 52 const unsigned int TemperatureBufferSize = 100;
JustinAtAlten 10:eed92ffd0bba 53 const unsigned int TemperatureBulkUpdateSize = 6;
JustinAtAlten 10:eed92ffd0bba 54 // https://devzone.nordicsemi.com/f/nordic-q-a/519/reading-a-subset-of-data-on-a-ble-server
JustinAtAlten 10:eed92ffd0bba 55 // characteristic data max 512 bytes
JustinAtAlten 10:eed92ffd0bba 56 // https://github.com/pieterm/bledemo#step-8-add-callback-function-on-data-written-event
JustinAtAlten 10:eed92ffd0bba 57 // GattWriteCallbackParams
JustinAtAlten 10:eed92ffd0bba 58
pietermaljaars 0:7c12d0922052 59
JustinAtAlten 10:eed92ffd0bba 60 /////////////////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 61 // FUNCTION DECLARATIONS //
JustinAtAlten 10:eed92ffd0bba 62 /////////////////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 63
JustinAtAlten 10:eed92ffd0bba 64 uint16_t readTemperature();
pietermaljaars 0:7c12d0922052 65
JustinAtAlten 10:eed92ffd0bba 66 ////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 67 // TYPEDEFS //
JustinAtAlten 10:eed92ffd0bba 68 ////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 69
JustinAtAlten 10:eed92ffd0bba 70 typedef MeasurementBufferTemplate<uint16_t, TemperatureBufferSize, TemperatureBulkUpdateSize, ReadIntervals::TemperatureSensorPeriod, readTemperature> TemperatureBuffer;
pietermaljaars 0:7c12d0922052 71
JustinAtAlten 10:eed92ffd0bba 72 /////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 73 // VARIABLES //
JustinAtAlten 10:eed92ffd0bba 74 /////////////////////////////////////////
pietermaljaars 0:7c12d0922052 75
JustinAtAlten 10:eed92ffd0bba 76 // --- Buffers --- //
JustinAtAlten 10:eed92ffd0bba 77 TemperatureBuffer temperatureBuffer;
JustinAtAlten 10:eed92ffd0bba 78 TemperatureBuffer::BulkUpdate tempUpdate;
pietermaljaars 3:7875f062a4ea 79
JustinAtAlten 10:eed92ffd0bba 80 // --- Timing --- //
JustinAtAlten 10:eed92ffd0bba 81 Ticker ticker;
JustinAtAlten 10:eed92ffd0bba 82
JustinAtAlten 10:eed92ffd0bba 83 // --- BLE --- //
JustinAtAlten 10:eed92ffd0bba 84 GattCharacteristic * tempBulkUpdateCharacteristic;
pietermaljaars 2:bf1a19d489eb 85
JustinAtAlten 10:eed92ffd0bba 86 // --- Flags --- //
JustinAtAlten 10:eed92ffd0bba 87 volatile bool batteryVoltageChanged = false;
JustinAtAlten 10:eed92ffd0bba 88 volatile bool tempUpdateFlag = false;
JustinAtAlten 10:eed92ffd0bba 89 volatile bool startMeasure = false;
JustinAtAlten 10:eed92ffd0bba 90
JustinAtAlten 10:eed92ffd0bba 91 /////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 92 // FUNCTIONS //
JustinAtAlten 10:eed92ffd0bba 93 /////////////////////////////////////////
JustinAtAlten 10:eed92ffd0bba 94
pietermaljaars 3:7875f062a4ea 95
JustinAtAlten 10:eed92ffd0bba 96 uint16_t readTemperature(){
JustinAtAlten 10:eed92ffd0bba 97 //read temperature (raw)
JustinAtAlten 10:eed92ffd0bba 98 int16_t tempRaw = mpu.getTempRaw();
JustinAtAlten 10:eed92ffd0bba 99 // convert into 0.1 degrees Celsius
JustinAtAlten 10:eed92ffd0bba 100 tempRaw *= 10;
JustinAtAlten 10:eed92ffd0bba 101 tempRaw += 5210;
JustinAtAlten 10:eed92ffd0bba 102 tempRaw /= 340;
JustinAtAlten 10:eed92ffd0bba 103 tempRaw += 350;
pietermaljaars 0:7c12d0922052 104
JustinAtAlten 10:eed92ffd0bba 105 return tempRaw;
JustinAtAlten 10:eed92ffd0bba 106 }
Pieter Maljaars 8:d1f5c8801d59 107
pietermaljaars 0:7c12d0922052 108
pietermaljaars 0:7c12d0922052 109 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
pietermaljaars 0:7c12d0922052 110 {
JustinAtAlten 10:eed92ffd0bba 111 LOG("Connected!\n");
JustinAtAlten 10:eed92ffd0bba 112 // bleIsConnected = true;
pietermaljaars 0:7c12d0922052 113 }
pietermaljaars 0:7c12d0922052 114
pietermaljaars 0:7c12d0922052 115 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *cbParams)
pietermaljaars 0:7c12d0922052 116 {
JustinAtAlten 10:eed92ffd0bba 117 LOG("Disconnected!\n");
JustinAtAlten 10:eed92ffd0bba 118 LOG("Restarting the advertising process\n");
JustinAtAlten 10:eed92ffd0bba 119 BLE & ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
JustinAtAlten 10:eed92ffd0bba 120 ble.gap().startAdvertising();
JustinAtAlten 10:eed92ffd0bba 121 // bleIsConnected = false;
pietermaljaars 0:7c12d0922052 122 }
pietermaljaars 0:7c12d0922052 123
pietermaljaars 0:7c12d0922052 124 void tick(void)
pietermaljaars 0:7c12d0922052 125 {
JustinAtAlten 10:eed92ffd0bba 126 static int tickerSleepTime=0;
JustinAtAlten 10:eed92ffd0bba 127 blue = !blue;
JustinAtAlten 10:eed92ffd0bba 128
JustinAtAlten 10:eed92ffd0bba 129 //update time
JustinAtAlten 10:eed92ffd0bba 130 ReadIntervals::updateTimeLeft(tickerSleepTime);
JustinAtAlten 10:eed92ffd0bba 131
JustinAtAlten 10:eed92ffd0bba 132 //perform actions
JustinAtAlten 10:eed92ffd0bba 133 if(ReadIntervals::temperatureSensorPeriodPassed()){
JustinAtAlten 10:eed92ffd0bba 134 green = !green;
JustinAtAlten 10:eed92ffd0bba 135 startMeasure = true; // notify the main-loop to start measuring the MPU6050
JustinAtAlten 10:eed92ffd0bba 136 }
JustinAtAlten 10:eed92ffd0bba 137 if(ReadIntervals::batteryMonitorPeriodPassed()){
JustinAtAlten 10:eed92ffd0bba 138 red = !red;
JustinAtAlten 10:eed92ffd0bba 139 batteryVoltageChanged = true;
JustinAtAlten 10:eed92ffd0bba 140 }
JustinAtAlten 10:eed92ffd0bba 141
JustinAtAlten 10:eed92ffd0bba 142 //prep next ticker-sleep
JustinAtAlten 10:eed92ffd0bba 143 tickerSleepTime = ReadIntervals::getTickerSleepTime();
JustinAtAlten 10:eed92ffd0bba 144 ticker.attach(tick, tickerSleepTime);
pietermaljaars 0:7c12d0922052 145 }
pietermaljaars 0:7c12d0922052 146
JustinAtAlten 10:eed92ffd0bba 147 // void detect(void)
JustinAtAlten 10:eed92ffd0bba 148 // {
JustinAtAlten 10:eed92ffd0bba 149 // LOG("Button pressed\n");
JustinAtAlten 10:eed92ffd0bba 150 // blue = !blue;
JustinAtAlten 10:eed92ffd0bba 151 // }
JustinAtAlten 10:eed92ffd0bba 152
JustinAtAlten 10:eed92ffd0bba 153 void setAdvertisingPayload(BLE & ble){
JustinAtAlten 10:eed92ffd0bba 154 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
JustinAtAlten 10:eed92ffd0bba 155 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
JustinAtAlten 10:eed92ffd0bba 156 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
JustinAtAlten 10:eed92ffd0bba 157 (const uint8_t *)acceleration128bitUUIDlist, sizeof(acceleration128bitUUIDlist));
pietermaljaars 2:bf1a19d489eb 158 }
pietermaljaars 2:bf1a19d489eb 159
JustinAtAlten 10:eed92ffd0bba 160 void setScanResponsePayload(BLE & ble){
JustinAtAlten 10:eed92ffd0bba 161 uint8_t name[] = "iot aabbccddeeff";
JustinAtAlten 10:eed92ffd0bba 162 Gap::AddressType_t addr_type;
JustinAtAlten 10:eed92ffd0bba 163 Gap::Address_t address;
JustinAtAlten 10:eed92ffd0bba 164 ble_error_t error = ble.gap().getAddress(&addr_type, address);
JustinAtAlten 10:eed92ffd0bba 165 if(error == BLE_ERROR_NONE){
JustinAtAlten 10:eed92ffd0bba 166 for(int i = 5; i >= 0; i--){
JustinAtAlten 10:eed92ffd0bba 167 char buffer[3];
JustinAtAlten 10:eed92ffd0bba 168 sprintf(buffer, "%02x", address[i]);
JustinAtAlten 10:eed92ffd0bba 169 name[4 + ((5-i)*2)] = buffer[0];
JustinAtAlten 10:eed92ffd0bba 170 name[4 + ((5-i)*2) + 1] = buffer[1];
JustinAtAlten 10:eed92ffd0bba 171 }
JustinAtAlten 10:eed92ffd0bba 172 }
JustinAtAlten 10:eed92ffd0bba 173
JustinAtAlten 10:eed92ffd0bba 174 ble.gap().accumulateScanResponse(GapAdvertisingData::COMPLETE_LOCAL_NAME,
JustinAtAlten 10:eed92ffd0bba 175 name, sizeof(name));
pietermaljaars 0:7c12d0922052 176 }
pietermaljaars 0:7c12d0922052 177
pietermaljaars 0:7c12d0922052 178
JustinAtAlten 10:eed92ffd0bba 179 void onDataWritten(const GattWriteCallbackParams * context)
JustinAtAlten 10:eed92ffd0bba 180 {
JustinAtAlten 10:eed92ffd0bba 181 if(context->handle == tempBulkUpdateCharacteristic->getValueHandle()){
JustinAtAlten 10:eed92ffd0bba 182 const time_t & newSelectedTime = *(time_t*)context->data;
JustinAtAlten 10:eed92ffd0bba 183 tempUpdate = temperatureBuffer.getBulkUpdate(newSelectedTime);
JustinAtAlten 10:eed92ffd0bba 184 tempUpdateFlag = true;
JustinAtAlten 10:eed92ffd0bba 185 }
JustinAtAlten 10:eed92ffd0bba 186 }
JustinAtAlten 10:eed92ffd0bba 187
pietermaljaars 0:7c12d0922052 188 int main(void)
pietermaljaars 0:7c12d0922052 189 {
JustinAtAlten 10:eed92ffd0bba 190 ///Start global timer
JustinAtAlten 10:eed92ffd0bba 191 AppTime::init();
JustinAtAlten 10:eed92ffd0bba 192
JustinAtAlten 10:eed92ffd0bba 193 ///Initialize led values
JustinAtAlten 10:eed92ffd0bba 194 blue = 0;
JustinAtAlten 10:eed92ffd0bba 195 green = 1;
JustinAtAlten 10:eed92ffd0bba 196 red = 1;
JustinAtAlten 10:eed92ffd0bba 197
JustinAtAlten 10:eed92ffd0bba 198 wait(1);
pietermaljaars 0:7c12d0922052 199
JustinAtAlten 10:eed92ffd0bba 200 #ifdef USE_SERIAL
JustinAtAlten 10:eed92ffd0bba 201 pc.baud(115200);
JustinAtAlten 10:eed92ffd0bba 202 #endif /* USE_SERIAL */
JustinAtAlten 10:eed92ffd0bba 203
JustinAtAlten 10:eed92ffd0bba 204 LOG("---- Seeed Tiny BLE ----\n");
JustinAtAlten 10:eed92ffd0bba 205
JustinAtAlten 10:eed92ffd0bba 206 ///Initialize MPU6050
JustinAtAlten 10:eed92ffd0bba 207 LOG("MPU6050 testConnection \n");
JustinAtAlten 10:eed92ffd0bba 208 bool mpu6050TestResult = mpu.testConnection();
JustinAtAlten 10:eed92ffd0bba 209 if(mpu6050TestResult) {
JustinAtAlten 10:eed92ffd0bba 210 LOG("MPU6050 test passed \n");
JustinAtAlten 10:eed92ffd0bba 211 } else {
JustinAtAlten 10:eed92ffd0bba 212 LOG("MPU6050 test failed \n");
JustinAtAlten 10:eed92ffd0bba 213 }
JustinAtAlten 10:eed92ffd0bba 214
JustinAtAlten 10:eed92ffd0bba 215 ///Initialize temperature buffer & update
JustinAtAlten 10:eed92ffd0bba 216 uint16_t temperature = temperatureBuffer.performMeasurement();
JustinAtAlten 10:eed92ffd0bba 217 tempUpdate = temperatureBuffer.getBulkUpdate(0);
pietermaljaars 0:7c12d0922052 218
JustinAtAlten 10:eed92ffd0bba 219 ///Initialize ticker
JustinAtAlten 10:eed92ffd0bba 220 ticker.attach(tick, ReadIntervals::TemperatureSensorPeriod);
JustinAtAlten 10:eed92ffd0bba 221
JustinAtAlten 10:eed92ffd0bba 222 // button.fall(detect);
JustinAtAlten 10:eed92ffd0bba 223
JustinAtAlten 10:eed92ffd0bba 224 ///Initialize BLE
JustinAtAlten 10:eed92ffd0bba 225 LOG("Initialising the nRF51822\n");
JustinAtAlten 10:eed92ffd0bba 226 BLE & ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
JustinAtAlten 10:eed92ffd0bba 227 ble.init();
JustinAtAlten 10:eed92ffd0bba 228 ble.gap().onDisconnection(disconnectionCallback);
JustinAtAlten 10:eed92ffd0bba 229 ble.gap().onConnection(connectionCallback);
pietermaljaars 0:7c12d0922052 230
JustinAtAlten 10:eed92ffd0bba 231 // -> Initialize BLE - custom services
JustinAtAlten 10:eed92ffd0bba 232 tempBulkUpdateCharacteristic = new GattCharacteristic(uuidTempBulkCharRead, NULL, 1, sizeof(tempUpdate),
JustinAtAlten 10:eed92ffd0bba 233 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE);
JustinAtAlten 10:eed92ffd0bba 234 GattService tempBulkService(uuidTempBulkService, &tempBulkUpdateCharacteristic, 1);
JustinAtAlten 10:eed92ffd0bba 235 ble.gattServer().addService(tempBulkService);
JustinAtAlten 10:eed92ffd0bba 236 ble.gattServer().onDataWritten(onDataWritten);
JustinAtAlten 10:eed92ffd0bba 237
JustinAtAlten 10:eed92ffd0bba 238 // -> Initialize BLE - advertising and scan payloads
JustinAtAlten 10:eed92ffd0bba 239 setAdvertisingPayload(ble);
JustinAtAlten 10:eed92ffd0bba 240 setScanResponsePayload(ble);
JustinAtAlten 10:eed92ffd0bba 241
JustinAtAlten 10:eed92ffd0bba 242 // -> Initialize BLE - generic services
JustinAtAlten 10:eed92ffd0bba 243 DFUService dfu(ble);
JustinAtAlten 10:eed92ffd0bba 244 UARTService uartService(ble);
JustinAtAlten 10:eed92ffd0bba 245 BatteryService batteryService(ble);
JustinAtAlten 10:eed92ffd0bba 246 DeviceInformationService deviceInfo(ble, MANUFACTURER, MODELNUMBER, SERIALNUMBER, HARDWAREREVISION, FIRMWAREREVISION, SOFTWAREREVISION);
JustinAtAlten 10:eed92ffd0bba 247 TemperatureService tempService(ble);
JustinAtAlten 10:eed92ffd0bba 248 AccelerationService accelerationService(ble);
JustinAtAlten 10:eed92ffd0bba 249
JustinAtAlten 10:eed92ffd0bba 250 // -> Initialize BLE - start advertising
JustinAtAlten 10:eed92ffd0bba 251 ble.gap().setAdvertisingInterval(160); // 100ms; in multiples of 0.625ms.
JustinAtAlten 10:eed92ffd0bba 252 ble.gap().startAdvertising();
JustinAtAlten 10:eed92ffd0bba 253
JustinAtAlten 10:eed92ffd0bba 254 tempService.updateTemperature(temperature);
JustinAtAlten 10:eed92ffd0bba 255
JustinAtAlten 10:eed92ffd0bba 256 while(true) {
JustinAtAlten 10:eed92ffd0bba 257 ble.waitForEvent();
JustinAtAlten 10:eed92ffd0bba 258
JustinAtAlten 10:eed92ffd0bba 259 // update battery level after the level is measured
JustinAtAlten 10:eed92ffd0bba 260 if(batteryVoltageChanged == true) {
JustinAtAlten 10:eed92ffd0bba 261 float batteryVoltage = battery.read();
JustinAtAlten 10:eed92ffd0bba 262 // LOG("VBat: %4.3f, ADC: %4.3f, Vadc: %4.3f\n", batteryVoltage*2.0f, batteryVoltage, batteryVoltage*3.3f);
JustinAtAlten 10:eed92ffd0bba 263 LOG("VBat: %s, ADC: %s, Vadc: %s\n", floatToCharArray(batteryVoltage*2.0f), floatToCharArray(batteryVoltage), floatToCharArray(batteryVoltage*3.3f));
JustinAtAlten 10:eed92ffd0bba 264 batteryService.updateBatteryLevel((uint8_t)(batteryVoltage*100.0f)); // input is 0-1.0 of 3.3V -> *100 = percentage of 3.3V
JustinAtAlten 10:eed92ffd0bba 265 batteryVoltageChanged = false;
JustinAtAlten 10:eed92ffd0bba 266 }
pietermaljaars 0:7c12d0922052 267
JustinAtAlten 10:eed92ffd0bba 268 if(startMeasure == true) {
JustinAtAlten 10:eed92ffd0bba 269 //uartService.write("test\n", 5);
JustinAtAlten 10:eed92ffd0bba 270 //float a[3];
JustinAtAlten 10:eed92ffd0bba 271 //mpu.getAccelero(a);
JustinAtAlten 10:eed92ffd0bba 272 //LOG("Acceleration %.2f;%.2f;%.2f\n", a[0], a[1], a[2]);
Pieter Maljaars 7:d92f1383bd81 273
JustinAtAlten 10:eed92ffd0bba 274 ///Acceleration
JustinAtAlten 10:eed92ffd0bba 275 //read accelerometer data
JustinAtAlten 10:eed92ffd0bba 276 int a[3];
JustinAtAlten 10:eed92ffd0bba 277 mpu.getAcceleroRaw(a);
JustinAtAlten 10:eed92ffd0bba 278 //convert to format accepted by accelerionService
JustinAtAlten 10:eed92ffd0bba 279 int16_t a_16[3];
JustinAtAlten 10:eed92ffd0bba 280 castArray(a, a_16, 3); //cannot simply cast 'a' to int16_t*, memory won't move accordingly
JustinAtAlten 10:eed92ffd0bba 281 // update BLE acceleration
JustinAtAlten 10:eed92ffd0bba 282 accelerationService.addAcceleration(a_16);
JustinAtAlten 10:eed92ffd0bba 283 LOG("Acceleration 0x%x;0x%x;0x%x\n", a[0], a[1], a[2]);
JustinAtAlten 10:eed92ffd0bba 284
JustinAtAlten 10:eed92ffd0bba 285 ///Temperature
JustinAtAlten 10:eed92ffd0bba 286 uint16_t temperature = temperatureBuffer.performMeasurement();
JustinAtAlten 10:eed92ffd0bba 287 tempService.updateTemperature(temperature);
JustinAtAlten 10:eed92ffd0bba 288
JustinAtAlten 10:eed92ffd0bba 289 ///Reset measure flag
JustinAtAlten 10:eed92ffd0bba 290 startMeasure = false;
JustinAtAlten 10:eed92ffd0bba 291 }
JustinAtAlten 10:eed92ffd0bba 292
JustinAtAlten 10:eed92ffd0bba 293 if(tempUpdateFlag){
JustinAtAlten 10:eed92ffd0bba 294 ble_error_t err = ble.gattServer().write(tempBulkUpdateCharacteristic->getValueHandle(), (const uint8_t*)&tempUpdate, sizeof(tempUpdate));
JustinAtAlten 10:eed92ffd0bba 295 LOG("err:[%d]\n", err);
JustinAtAlten 10:eed92ffd0bba 296 LOG("rT:[%d]\n", tempUpdate.requestedTime);
JustinAtAlten 10:eed92ffd0bba 297 LOG("iT:[%d]\n", tempUpdate.initialTime);
JustinAtAlten 10:eed92ffd0bba 298 LOG("nR:[%d]\n", tempUpdate.numberOfReadings);
JustinAtAlten 10:eed92ffd0bba 299 LOG("pT:[%s]\n", floatToCharArray(tempUpdate.sensorReadingInterval));
JustinAtAlten 10:eed92ffd0bba 300 // LOG("pT:[%f]\n", tempUpdate.sensorReadingInterval);
JustinAtAlten 10:eed92ffd0bba 301 for(unsigned int i=0; i < tempUpdate.numberOfReadings; i++){
JustinAtAlten 10:eed92ffd0bba 302 LOG("%#010x\n", tempUpdate.readings[i]);
JustinAtAlten 10:eed92ffd0bba 303 }
JustinAtAlten 10:eed92ffd0bba 304 tempUpdateFlag = false;
JustinAtAlten 10:eed92ffd0bba 305 }
JustinAtAlten 10:eed92ffd0bba 306 }
pietermaljaars 0:7c12d0922052 307 }
pietermaljaars 0:7c12d0922052 308
JustinAtAlten 10:eed92ffd0bba 309