Basic output of force sensor data to serial, in form "value1/n"
Dependencies: mbed BLE_API nRF51822
main.cpp@3:d37edebcc9e6, 2014-11-17 (annotated)
- Committer:
- pgao
- Date:
- Mon Nov 17 04:55:34 2014 +0000
- Revision:
- 3:d37edebcc9e6
- Parent:
- 2:697726f1d35c
- Child:
- 5:19acba8bb777
ble implementation
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jstroud | 0:44196fc76b4f | 1 | #include "mbed.h" |
pgao | 3:d37edebcc9e6 | 2 | #include "BLEDevice.h" |
pgao | 3:d37edebcc9e6 | 3 | #include <string> |
pgao | 3:d37edebcc9e6 | 4 | #include "UARTService.h" |
jstroud | 0:44196fc76b4f | 5 | |
pgao | 3:d37edebcc9e6 | 6 | #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console; |
pgao | 3:d37edebcc9e6 | 7 | * it will have an impact on code-size and power consumption. */ |
jstroud | 0:44196fc76b4f | 8 | Serial pc(USBTX, USBRX); |
pgao | 3:d37edebcc9e6 | 9 | |
pgao | 3:d37edebcc9e6 | 10 | #if NEED_CONSOLE_OUTPUT |
pgao | 3:d37edebcc9e6 | 11 | #define DEBUG(...) { pc.printf(__VA_ARGS__); } |
pgao | 3:d37edebcc9e6 | 12 | #else |
pgao | 3:d37edebcc9e6 | 13 | #define DEBUG(...) /* nothing */ |
pgao | 3:d37edebcc9e6 | 14 | #endif /* #if NEED_CONSOLE_OUTPUT */ |
pgao | 3:d37edebcc9e6 | 15 | |
pgao | 3:d37edebcc9e6 | 16 | BLEDevice ble; |
pgao | 3:d37edebcc9e6 | 17 | DigitalOut led1(LED1); |
pgao | 3:d37edebcc9e6 | 18 | DigitalOut led2(LED2); |
pgao | 3:d37edebcc9e6 | 19 | |
pgao | 3:d37edebcc9e6 | 20 | DigitalOut powerSwitch(P0_0); |
pgao | 3:d37edebcc9e6 | 21 | |
jstroud | 1:d80d9ec38f57 | 22 | AnalogIn strut1Force(P0_1); |
jstroud | 1:d80d9ec38f57 | 23 | AnalogIn strut2Force(P0_2); |
jstroud | 1:d80d9ec38f57 | 24 | AnalogIn strut3Force(P0_3); |
pgao | 3:d37edebcc9e6 | 25 | AnalogIn strut4Force(P0_4); |
pgao | 3:d37edebcc9e6 | 26 | |
pgao | 3:d37edebcc9e6 | 27 | UARTService *uartServicePtr; |
pgao | 3:d37edebcc9e6 | 28 | |
pgao | 3:d37edebcc9e6 | 29 | void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) |
pgao | 3:d37edebcc9e6 | 30 | { |
pgao | 3:d37edebcc9e6 | 31 | DEBUG("Disconnected!\n\r"); |
pgao | 3:d37edebcc9e6 | 32 | DEBUG("Restarting the advertising process\n\r"); |
pgao | 3:d37edebcc9e6 | 33 | ble.startAdvertising(); |
pgao | 3:d37edebcc9e6 | 34 | } |
pgao | 3:d37edebcc9e6 | 35 | |
pgao | 3:d37edebcc9e6 | 36 | void onDataWritten(const GattCharacteristicWriteCBParams *params) |
pgao | 3:d37edebcc9e6 | 37 | { |
pgao | 3:d37edebcc9e6 | 38 | if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) { |
pgao | 3:d37edebcc9e6 | 39 | uint16_t bytesRead = params->len; |
pgao | 3:d37edebcc9e6 | 40 | DEBUG("received %u bytes\n\r", bytesRead); |
pgao | 3:d37edebcc9e6 | 41 | DEBUG("first byte received: %u\n\r", params->data[0]); |
pgao | 3:d37edebcc9e6 | 42 | if (params->data[0] == '1') { |
pgao | 3:d37edebcc9e6 | 43 | led2 = 1; |
pgao | 3:d37edebcc9e6 | 44 | powerSwitch = 1; |
pgao | 3:d37edebcc9e6 | 45 | } else if (params->data[0] == '0') { |
pgao | 3:d37edebcc9e6 | 46 | led2 = 0; |
pgao | 3:d37edebcc9e6 | 47 | powerSwitch = 0; |
pgao | 3:d37edebcc9e6 | 48 | } |
pgao | 3:d37edebcc9e6 | 49 | char buffer[50]; |
pgao | 3:d37edebcc9e6 | 50 | DEBUG("%1.2f,%1.2f,%1.2f,%1.2f\n", strut1Force.read(), strut2Force.read(), strut3Force.read(), strut4Force.read()); |
pgao | 3:d37edebcc9e6 | 51 | // sprintf(buffer, "%1.2f,%1.2f,%1.2f,%1.2f\n", strut1Force.read(), strut2Force.read(), strut3Force.read(), strut4Force.read()); |
pgao | 3:d37edebcc9e6 | 52 | sprintf(buffer, "%1.2f\n", strut2Force.read()); |
pgao | 3:d37edebcc9e6 | 53 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t *)buffer, sizeof(&buffer)); |
jstroud | 1:d80d9ec38f57 | 54 | |
pgao | 3:d37edebcc9e6 | 55 | } |
pgao | 3:d37edebcc9e6 | 56 | } |
pgao | 3:d37edebcc9e6 | 57 | |
pgao | 3:d37edebcc9e6 | 58 | void periodicCallback(void) |
pgao | 3:d37edebcc9e6 | 59 | { |
pgao | 3:d37edebcc9e6 | 60 | led1 = !led1; |
pgao | 3:d37edebcc9e6 | 61 | } |
jstroud | 0:44196fc76b4f | 62 | |
jstroud | 0:44196fc76b4f | 63 | int main(void) |
jstroud | 0:44196fc76b4f | 64 | { |
pgao | 3:d37edebcc9e6 | 65 | led1 = 1; |
pgao | 3:d37edebcc9e6 | 66 | led2 = 0; |
pgao | 3:d37edebcc9e6 | 67 | powerSwitch = 0; |
pgao | 3:d37edebcc9e6 | 68 | Ticker ticker; |
pgao | 3:d37edebcc9e6 | 69 | ticker.attach(periodicCallback, 1); |
pgao | 3:d37edebcc9e6 | 70 | |
pgao | 3:d37edebcc9e6 | 71 | DEBUG("Initialising the nRF51822\n\r"); |
pgao | 3:d37edebcc9e6 | 72 | ble.init(); |
pgao | 3:d37edebcc9e6 | 73 | ble.onDisconnection(disconnectionCallback); |
pgao | 3:d37edebcc9e6 | 74 | ble.onDataWritten(onDataWritten); // called when someone writes to me |
pgao | 3:d37edebcc9e6 | 75 | |
pgao | 3:d37edebcc9e6 | 76 | /* setup advertising */ |
pgao | 3:d37edebcc9e6 | 77 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); |
pgao | 3:d37edebcc9e6 | 78 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
pgao | 3:d37edebcc9e6 | 79 | ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, |
pgao | 3:d37edebcc9e6 | 80 | (const uint8_t *)"pgao", sizeof("pgao") - 1); |
pgao | 3:d37edebcc9e6 | 81 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, |
pgao | 3:d37edebcc9e6 | 82 | (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); |
pgao | 3:d37edebcc9e6 | 83 | |
pgao | 3:d37edebcc9e6 | 84 | ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ |
pgao | 3:d37edebcc9e6 | 85 | ble.startAdvertising(); |
pgao | 3:d37edebcc9e6 | 86 | |
pgao | 3:d37edebcc9e6 | 87 | UARTService uartService(ble); |
pgao | 3:d37edebcc9e6 | 88 | uartServicePtr = &uartService; |
pgao | 3:d37edebcc9e6 | 89 | |
jstroud | 0:44196fc76b4f | 90 | while (true) { |
pgao | 3:d37edebcc9e6 | 91 | ble.waitForEvent(); |
jstroud | 0:44196fc76b4f | 92 | } |
jstroud | 0:44196fc76b4f | 93 | } |
pgao | 3:d37edebcc9e6 | 94 | |
jstroud | 0:44196fc76b4f | 95 |