Basic output of force sensor data to serial, in form "value1/n"

Dependencies:   mbed BLE_API nRF51822

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?

UserRevisionLine numberNew 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