Basic output of force sensor data to serial, in form "value1/n"
Dependencies: mbed BLE_API nRF51822
main.cpp@6:dac42d8a8752, 2014-11-25 (annotated)
- Committer:
- jstroud
- Date:
- Tue Nov 25 04:57:36 2014 +0000
- Revision:
- 6:dac42d8a8752
- Parent:
- 5:19acba8bb777
Updated code with non-blocking sensor reading, fixed bluetooth, added "sleep when not connected to BLE" feature; ; Serial output format: "132" where 1 is sensor number, 32 is value from 0 - 99 of force sensor 1
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 | |
jstroud | 1:d80d9ec38f57 | 20 | AnalogIn strut1Force(P0_1); |
jstroud | 1:d80d9ec38f57 | 21 | AnalogIn strut2Force(P0_2); |
jstroud | 1:d80d9ec38f57 | 22 | AnalogIn strut3Force(P0_3); |
pgao | 3:d37edebcc9e6 | 23 | AnalogIn strut4Force(P0_4); |
jstroud | 5:19acba8bb777 | 24 | AnalogIn seatForce(P0_5); |
jstroud | 5:19acba8bb777 | 25 | AnalogIn cupBottomForce(P0_6); |
jstroud | 5:19acba8bb777 | 26 | AnalogIn sensors[6] = {strut1Force, strut2Force, strut3Force, strut4Force, seatForce, cupBottomForce}; |
jstroud | 6:dac42d8a8752 | 27 | |
jstroud | 6:dac42d8a8752 | 28 | static volatile bool triggerSensorPolling = false; |
jstroud | 6:dac42d8a8752 | 29 | |
jstroud | 6:dac42d8a8752 | 30 | float sensorValues[6]; |
jstroud | 6:dac42d8a8752 | 31 | |
jstroud | 6:dac42d8a8752 | 32 | char buffer[6]; |
pgao | 3:d37edebcc9e6 | 33 | |
pgao | 3:d37edebcc9e6 | 34 | UARTService *uartServicePtr; |
pgao | 3:d37edebcc9e6 | 35 | |
pgao | 3:d37edebcc9e6 | 36 | void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) |
pgao | 3:d37edebcc9e6 | 37 | { |
pgao | 3:d37edebcc9e6 | 38 | DEBUG("Disconnected!\n\r"); |
pgao | 3:d37edebcc9e6 | 39 | DEBUG("Restarting the advertising process\n\r"); |
pgao | 3:d37edebcc9e6 | 40 | ble.startAdvertising(); |
pgao | 3:d37edebcc9e6 | 41 | } |
pgao | 3:d37edebcc9e6 | 42 | |
jstroud | 6:dac42d8a8752 | 43 | |
pgao | 3:d37edebcc9e6 | 44 | void onDataWritten(const GattCharacteristicWriteCBParams *params) |
pgao | 3:d37edebcc9e6 | 45 | { |
jstroud | 6:dac42d8a8752 | 46 | //doSomething |
jstroud | 6:dac42d8a8752 | 47 | /* |
pgao | 3:d37edebcc9e6 | 48 | if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) { |
pgao | 3:d37edebcc9e6 | 49 | uint16_t bytesRead = params->len; |
pgao | 3:d37edebcc9e6 | 50 | DEBUG("received %u bytes\n\r", bytesRead); |
pgao | 3:d37edebcc9e6 | 51 | DEBUG("first byte received: %u\n\r", params->data[0]); |
pgao | 3:d37edebcc9e6 | 52 | if (params->data[0] == '1') { |
pgao | 3:d37edebcc9e6 | 53 | led2 = 1; |
pgao | 3:d37edebcc9e6 | 54 | powerSwitch = 1; |
pgao | 3:d37edebcc9e6 | 55 | } else if (params->data[0] == '0') { |
pgao | 3:d37edebcc9e6 | 56 | led2 = 0; |
pgao | 3:d37edebcc9e6 | 57 | powerSwitch = 0; |
pgao | 3:d37edebcc9e6 | 58 | } |
jstroud | 5:19acba8bb777 | 59 | char buffer[4]; |
jstroud | 5:19acba8bb777 | 60 | DEBUG("%1.2f,%1.2f,%1.2f,%1.2f,%1.2f,%1.2f\n", strut1Force.read(), strut2Force.read(), strut3Force.read(), strut4Force.read(), seatForce.read(), cupBottomForce.read()); |
pgao | 3:d37edebcc9e6 | 61 | // sprintf(buffer, "%1.2f,%1.2f,%1.2f,%1.2f\n", strut1Force.read(), strut2Force.read(), strut3Force.read(), strut4Force.read()); |
jstroud | 6:dac42d8a8752 | 62 | //ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t *)buffer, sizeof(&buffer)); |
jstroud | 5:19acba8bb777 | 63 | for(int i=0; i <= 5; i++) |
jstroud | 5:19acba8bb777 | 64 | { |
jstroud | 6:dac42d8a8752 | 65 | sprintf(buffer, "%1.2f\n", sensors[i].read()); |
jstroud | 5:19acba8bb777 | 66 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t *)buffer, sizeof(&buffer)); |
jstroud | 5:19acba8bb777 | 67 | } |
pgao | 3:d37edebcc9e6 | 68 | } |
jstroud | 6:dac42d8a8752 | 69 | */ |
pgao | 3:d37edebcc9e6 | 70 | } |
pgao | 3:d37edebcc9e6 | 71 | |
pgao | 3:d37edebcc9e6 | 72 | void periodicCallback(void) |
pgao | 3:d37edebcc9e6 | 73 | { |
pgao | 3:d37edebcc9e6 | 74 | led1 = !led1; |
jstroud | 6:dac42d8a8752 | 75 | triggerSensorPolling = true; |
pgao | 3:d37edebcc9e6 | 76 | } |
jstroud | 0:44196fc76b4f | 77 | |
jstroud | 0:44196fc76b4f | 78 | int main(void) |
jstroud | 0:44196fc76b4f | 79 | { |
jstroud | 5:19acba8bb777 | 80 | |
pgao | 3:d37edebcc9e6 | 81 | led1 = 1; |
pgao | 3:d37edebcc9e6 | 82 | led2 = 0; |
pgao | 3:d37edebcc9e6 | 83 | Ticker ticker; |
pgao | 3:d37edebcc9e6 | 84 | ticker.attach(periodicCallback, 1); |
pgao | 3:d37edebcc9e6 | 85 | |
pgao | 3:d37edebcc9e6 | 86 | DEBUG("Initialising the nRF51822\n\r"); |
pgao | 3:d37edebcc9e6 | 87 | ble.init(); |
pgao | 3:d37edebcc9e6 | 88 | ble.onDisconnection(disconnectionCallback); |
pgao | 3:d37edebcc9e6 | 89 | ble.onDataWritten(onDataWritten); // called when someone writes to me |
pgao | 3:d37edebcc9e6 | 90 | |
pgao | 3:d37edebcc9e6 | 91 | /* setup advertising */ |
pgao | 3:d37edebcc9e6 | 92 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); |
pgao | 3:d37edebcc9e6 | 93 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
pgao | 3:d37edebcc9e6 | 94 | ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, |
pgao | 3:d37edebcc9e6 | 95 | (const uint8_t *)"pgao", sizeof("pgao") - 1); |
pgao | 3:d37edebcc9e6 | 96 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, |
pgao | 3:d37edebcc9e6 | 97 | (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); |
pgao | 3:d37edebcc9e6 | 98 | |
pgao | 3:d37edebcc9e6 | 99 | ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ |
pgao | 3:d37edebcc9e6 | 100 | ble.startAdvertising(); |
pgao | 3:d37edebcc9e6 | 101 | |
pgao | 3:d37edebcc9e6 | 102 | UARTService uartService(ble); |
pgao | 3:d37edebcc9e6 | 103 | uartServicePtr = &uartService; |
pgao | 3:d37edebcc9e6 | 104 | |
jstroud | 0:44196fc76b4f | 105 | while (true) { |
jstroud | 6:dac42d8a8752 | 106 | if(triggerSensorPolling /*&& ble.getGapState().connected*/ && uartServicePtr != NULL) { |
jstroud | 6:dac42d8a8752 | 107 | triggerSensorPolling = false; |
jstroud | 6:dac42d8a8752 | 108 | |
jstroud | 6:dac42d8a8752 | 109 | for(int i = 0; i < 6; i++) { |
jstroud | 6:dac42d8a8752 | 110 | sensorValues[i] = sensors[i].read()*100; |
jstroud | 6:dac42d8a8752 | 111 | if(sensorValues[i] == 100) sensorValues[i] = 99; |
jstroud | 6:dac42d8a8752 | 112 | |
jstroud | 6:dac42d8a8752 | 113 | sprintf(buffer, "%d%2.0f", i,sensorValues[i]); |
jstroud | 6:dac42d8a8752 | 114 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t *)buffer, sizeof(&buffer)); |
jstroud | 6:dac42d8a8752 | 115 | } |
jstroud | 6:dac42d8a8752 | 116 | DEBUG("trying to write values:\n%1.2f,%1.2f,%1.2f,%1.2f,%1.2f,%1.2f\n", strut1Force.read(), strut2Force.read(), strut3Force.read(), strut4Force.read(), seatForce.read(), cupBottomForce.read()); |
jstroud | 6:dac42d8a8752 | 117 | |
jstroud | 6:dac42d8a8752 | 118 | // do something |
jstroud | 6:dac42d8a8752 | 119 | } |
pgao | 3:d37edebcc9e6 | 120 | ble.waitForEvent(); |
jstroud | 0:44196fc76b4f | 121 | } |
jstroud | 0:44196fc76b4f | 122 | } |
pgao | 3:d37edebcc9e6 | 123 | |
jstroud | 0:44196fc76b4f | 124 |