se
Dependencies: SDFileSystem circular_buffer MPU6050 SoftSerial
source/main.cpp@0:a4de55cab4e2, 2017-01-10 (annotated)
- Committer:
- OsmanKameric
- Date:
- Tue Jan 10 08:10:29 2017 +0000
- Revision:
- 0:a4de55cab4e2
- Child:
- 1:2cc1c9a45be7
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
OsmanKameric | 0:a4de55cab4e2 | 1 | #include <events/mbed_events.h> |
OsmanKameric | 0:a4de55cab4e2 | 2 | #include <mbed.h> |
OsmanKameric | 0:a4de55cab4e2 | 3 | #include "ble/BLE.h" |
OsmanKameric | 0:a4de55cab4e2 | 4 | #include "ble/Gap.h" |
OsmanKameric | 0:a4de55cab4e2 | 5 | #include "ble/services/BatteryService.h" |
OsmanKameric | 0:a4de55cab4e2 | 6 | #include "MPU6050.h" |
OsmanKameric | 0:a4de55cab4e2 | 7 | #include "MPUService.h" |
OsmanKameric | 0:a4de55cab4e2 | 8 | |
OsmanKameric | 0:a4de55cab4e2 | 9 | DigitalOut alivenessLED(LED1, 0); |
OsmanKameric | 0:a4de55cab4e2 | 10 | DigitalOut actuatedLED(LED2, 0); |
OsmanKameric | 0:a4de55cab4e2 | 11 | Serial pc(p6, p8); |
OsmanKameric | 0:a4de55cab4e2 | 12 | MPU6050 mpu6050; |
OsmanKameric | 0:a4de55cab4e2 | 13 | static MPUService *mpuServicePtr; |
OsmanKameric | 0:a4de55cab4e2 | 14 | static float x =0.0; |
OsmanKameric | 0:a4de55cab4e2 | 15 | const static char DEVICE_NAME[] = "MPU"; |
OsmanKameric | 0:a4de55cab4e2 | 16 | static const uint16_t uuid16_list[] = {MPUService::MPU_SERVICE_UUID}; |
OsmanKameric | 0:a4de55cab4e2 | 17 | static EventQueue eventQueue(/* event count */ 10 * /* event size */ 32); |
OsmanKameric | 0:a4de55cab4e2 | 18 | //InterruptIn button(BUTTON1); |
OsmanKameric | 0:a4de55cab4e2 | 19 | |
OsmanKameric | 0:a4de55cab4e2 | 20 | void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) |
OsmanKameric | 0:a4de55cab4e2 | 21 | { |
OsmanKameric | 0:a4de55cab4e2 | 22 | BLE& ble = BLE::Instance(); |
OsmanKameric | 0:a4de55cab4e2 | 23 | eventQueue.call(Callback<void()>(&ble, &BLE::processEvents)); |
OsmanKameric | 0:a4de55cab4e2 | 24 | } |
OsmanKameric | 0:a4de55cab4e2 | 25 | |
OsmanKameric | 0:a4de55cab4e2 | 26 | void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
OsmanKameric | 0:a4de55cab4e2 | 27 | { |
OsmanKameric | 0:a4de55cab4e2 | 28 | (void) params; |
OsmanKameric | 0:a4de55cab4e2 | 29 | BLE::Instance().gap().startAdvertising(); |
OsmanKameric | 0:a4de55cab4e2 | 30 | } |
OsmanKameric | 0:a4de55cab4e2 | 31 | void onBleInitError(BLE &ble, ble_error_t error) |
OsmanKameric | 0:a4de55cab4e2 | 32 | { |
OsmanKameric | 0:a4de55cab4e2 | 33 | /* Initialization error handling should go here */ |
OsmanKameric | 0:a4de55cab4e2 | 34 | } |
OsmanKameric | 0:a4de55cab4e2 | 35 | void updateSensorValue() { |
OsmanKameric | 0:a4de55cab4e2 | 36 | x=x+0.1; |
OsmanKameric | 0:a4de55cab4e2 | 37 | alivenessLED = !alivenessLED; |
OsmanKameric | 0:a4de55cab4e2 | 38 | mpuServicePtr->updateSensorValue(x); |
OsmanKameric | 0:a4de55cab4e2 | 39 | } |
OsmanKameric | 0:a4de55cab4e2 | 40 | void periodicCallback(void) |
OsmanKameric | 0:a4de55cab4e2 | 41 | { |
OsmanKameric | 0:a4de55cab4e2 | 42 | if (BLE::Instance().getGapState().connected) { |
OsmanKameric | 0:a4de55cab4e2 | 43 | eventQueue.call(updateSensorValue); |
OsmanKameric | 0:a4de55cab4e2 | 44 | } |
OsmanKameric | 0:a4de55cab4e2 | 45 | } |
OsmanKameric | 0:a4de55cab4e2 | 46 | void bleInitComplete(BLE::InitializationCompleteCallbackContext* params) |
OsmanKameric | 0:a4de55cab4e2 | 47 | { |
OsmanKameric | 0:a4de55cab4e2 | 48 | BLE& ble = params->ble; |
OsmanKameric | 0:a4de55cab4e2 | 49 | ble_error_t error = params->error; |
OsmanKameric | 0:a4de55cab4e2 | 50 | |
OsmanKameric | 0:a4de55cab4e2 | 51 | if (error != BLE_ERROR_NONE) { |
OsmanKameric | 0:a4de55cab4e2 | 52 | /* In case of error, forward the error handling to onBleInitError */ |
OsmanKameric | 0:a4de55cab4e2 | 53 | onBleInitError(ble, error); |
OsmanKameric | 0:a4de55cab4e2 | 54 | return; |
OsmanKameric | 0:a4de55cab4e2 | 55 | } |
OsmanKameric | 0:a4de55cab4e2 | 56 | |
OsmanKameric | 0:a4de55cab4e2 | 57 | /* Ensure that it is the default instance of BLE */ |
OsmanKameric | 0:a4de55cab4e2 | 58 | if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { |
OsmanKameric | 0:a4de55cab4e2 | 59 | return; |
OsmanKameric | 0:a4de55cab4e2 | 60 | } |
OsmanKameric | 0:a4de55cab4e2 | 61 | ble.gap().onDisconnection(disconnectionCallback); |
OsmanKameric | 0:a4de55cab4e2 | 62 | mpuServicePtr = new MPUService(ble, x); |
OsmanKameric | 0:a4de55cab4e2 | 63 | |
OsmanKameric | 0:a4de55cab4e2 | 64 | /* setup advertising */ |
OsmanKameric | 0:a4de55cab4e2 | 65 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
OsmanKameric | 0:a4de55cab4e2 | 66 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t*)uuid16_list, sizeof(uuid16_list)); |
OsmanKameric | 0:a4de55cab4e2 | 67 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t*)DEVICE_NAME, sizeof(DEVICE_NAME)); |
OsmanKameric | 0:a4de55cab4e2 | 68 | ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
OsmanKameric | 0:a4de55cab4e2 | 69 | ble.gap().setAdvertisingInterval(1000); /* 1000ms. */ |
OsmanKameric | 0:a4de55cab4e2 | 70 | ble.gap().startAdvertising(); |
OsmanKameric | 0:a4de55cab4e2 | 71 | |
OsmanKameric | 0:a4de55cab4e2 | 72 | |
OsmanKameric | 0:a4de55cab4e2 | 73 | } |
OsmanKameric | 0:a4de55cab4e2 | 74 | int main() |
OsmanKameric | 0:a4de55cab4e2 | 75 | { |
OsmanKameric | 0:a4de55cab4e2 | 76 | eventQueue.call_every(500, periodicCallback); |
OsmanKameric | 0:a4de55cab4e2 | 77 | BLE& ble = BLE::Instance(); |
OsmanKameric | 0:a4de55cab4e2 | 78 | ble.onEventsToProcess(scheduleBleEventsProcessing); |
OsmanKameric | 0:a4de55cab4e2 | 79 | ble.init(bleInitComplete); |
OsmanKameric | 0:a4de55cab4e2 | 80 | eventQueue.dispatch_forever(); |
OsmanKameric | 0:a4de55cab4e2 | 81 | return 0; |
OsmanKameric | 0:a4de55cab4e2 | 82 | } |