DesignForAmputee hw 5 project

Dependencies:   mbed BLE_API nRF51822

Committer:
jstroud
Date:
Sat Nov 08 02:27:42 2014 +0000
Revision:
8:114fea2afa09
Parent:
7:fa5a3ca3c62b
Child:
10:0193462ea6f1
added temperature conversion to C/F; todo: send temp data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jstroud 0:6a0d0bc31c4c 1 #include "mbed.h"
pgao 1:dbfe14952cdc 2 #include "BLEDevice.h"
pgao 1:dbfe14952cdc 3
pgao 1:dbfe14952cdc 4 #include "UARTService.h"
pgao 1:dbfe14952cdc 5
pgao 3:436ef162bf2d 6 #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
pgao 1:dbfe14952cdc 7 * it will have an impact on code-size and power consumption. */
pgao 3:436ef162bf2d 8
pgao 3:436ef162bf2d 9 Serial pc(USBTX, USBRX);
pgao 3:436ef162bf2d 10
pgao 1:dbfe14952cdc 11 #if NEED_CONSOLE_OUTPUT
pgao 3:436ef162bf2d 12 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
pgao 1:dbfe14952cdc 13 #else
pgao 1:dbfe14952cdc 14 #define DEBUG(...) /* nothing */
pgao 1:dbfe14952cdc 15 #endif /* #if NEED_CONSOLE_OUTPUT */
pgao 1:dbfe14952cdc 16
pgao 1:dbfe14952cdc 17 BLEDevice ble;
pgao 1:dbfe14952cdc 18 DigitalOut led1(LED1);
pgao 3:436ef162bf2d 19 DigitalOut led2(LED2);
pgao 3:436ef162bf2d 20
pgao 3:436ef162bf2d 21 DigitalOut powerSwitch(P0_0);
pgao 3:436ef162bf2d 22
jstroud 6:d540386708d1 23 AnalogIn tempPin(P0_1);
pgao 1:dbfe14952cdc 24
pgao 1:dbfe14952cdc 25 UARTService *uartServicePtr;
pgao 1:dbfe14952cdc 26
pgao 1:dbfe14952cdc 27 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
pgao 1:dbfe14952cdc 28 {
pgao 1:dbfe14952cdc 29 DEBUG("Disconnected!\n\r");
pgao 1:dbfe14952cdc 30 DEBUG("Restarting the advertising process\n\r");
pgao 1:dbfe14952cdc 31 ble.startAdvertising();
pgao 1:dbfe14952cdc 32 }
pgao 1:dbfe14952cdc 33
pgao 1:dbfe14952cdc 34 void onDataWritten(const GattCharacteristicWriteCBParams *params)
pgao 1:dbfe14952cdc 35 {
pgao 1:dbfe14952cdc 36 if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) {
jstroud 8:114fea2afa09 37 float temp = tempPin.read(); // temperature voltage
jstroud 8:114fea2afa09 38
jstroud 8:114fea2afa09 39 float tempC = ((temp*3)-0.5)*100; // conversion to celcius
jstroud 8:114fea2afa09 40 float tempF = (tempC*9/5)+32; // conversion to fahrenheit
pgao 3:436ef162bf2d 41
pgao 1:dbfe14952cdc 42 uint16_t bytesRead = params->len;
pgao 1:dbfe14952cdc 43 DEBUG("received %u bytes\n\r", bytesRead);
pgao 3:436ef162bf2d 44 DEBUG("first byte received: %u\n\r", params->data[0]);
pgao 3:436ef162bf2d 45 uint8_t on = '1';
pgao 3:436ef162bf2d 46 uint8_t off = '0';
pgao 3:436ef162bf2d 47 if (params->data[0] == on) {
pgao 3:436ef162bf2d 48 led2 = 1;
pgao 3:436ef162bf2d 49 powerSwitch = 1;
pgao 3:436ef162bf2d 50 } else if (params->data[0] == off) {
pgao 3:436ef162bf2d 51 led2 = 0;
pgao 3:436ef162bf2d 52 powerSwitch = 0;
pgao 3:436ef162bf2d 53 }
pgao 1:dbfe14952cdc 54 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
jstroud 8:114fea2afa09 55 //ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)&tempF, sizeof(tempF));
jstroud 8:114fea2afa09 56
jstroud 0:6a0d0bc31c4c 57 }
jstroud 0:6a0d0bc31c4c 58 }
pgao 1:dbfe14952cdc 59
pgao 1:dbfe14952cdc 60 void periodicCallback(void)
pgao 1:dbfe14952cdc 61 {
pgao 1:dbfe14952cdc 62 led1 = !led1;
pgao 1:dbfe14952cdc 63 }
pgao 1:dbfe14952cdc 64
pgao 1:dbfe14952cdc 65 int main(void)
pgao 1:dbfe14952cdc 66 {
pgao 1:dbfe14952cdc 67 led1 = 1;
pgao 3:436ef162bf2d 68 led2 = 0;
pgao 3:436ef162bf2d 69 powerSwitch = 0;
pgao 1:dbfe14952cdc 70 Ticker ticker;
pgao 1:dbfe14952cdc 71 ticker.attach(periodicCallback, 1);
pgao 1:dbfe14952cdc 72
pgao 1:dbfe14952cdc 73 DEBUG("Initialising the nRF51822\n\r");
pgao 1:dbfe14952cdc 74 ble.init();
pgao 1:dbfe14952cdc 75 ble.onDisconnection(disconnectionCallback);
jstroud 7:fa5a3ca3c62b 76 ble.onDataWritten(onDataWritten); // called when someone writes to me
pgao 1:dbfe14952cdc 77
pgao 1:dbfe14952cdc 78 /* setup advertising */
pgao 1:dbfe14952cdc 79 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
pgao 1:dbfe14952cdc 80 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pgao 1:dbfe14952cdc 81 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
pgao 1:dbfe14952cdc 82 (const uint8_t *)"pgao", sizeof("pgao") - 1);
pgao 1:dbfe14952cdc 83 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
pgao 1:dbfe14952cdc 84 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
pgao 1:dbfe14952cdc 85
pgao 1:dbfe14952cdc 86 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
pgao 1:dbfe14952cdc 87 ble.startAdvertising();
pgao 1:dbfe14952cdc 88
pgao 1:dbfe14952cdc 89 UARTService uartService(ble);
pgao 1:dbfe14952cdc 90 uartServicePtr = &uartService;
pgao 1:dbfe14952cdc 91
pgao 1:dbfe14952cdc 92 while (true) {
pgao 1:dbfe14952cdc 93 ble.waitForEvent();
pgao 1:dbfe14952cdc 94 }
pgao 1:dbfe14952cdc 95 }
pgao 1:dbfe14952cdc 96