DesignForAmputee hw 5 project

Dependencies:   mbed BLE_API nRF51822

Committer:
pgao
Date:
Sun Nov 09 23:01:02 2014 +0000
Revision:
11:8500dadc8a7e
Parent:
10:0193462ea6f1
fix char

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"
jstroud 10:0193462ea6f1 3 #include <string>
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 Serial pc(USBTX, USBRX);
pgao 3:436ef162bf2d 9
pgao 1:dbfe14952cdc 10 #if NEED_CONSOLE_OUTPUT
pgao 3:436ef162bf2d 11 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
pgao 1:dbfe14952cdc 12 #else
pgao 1:dbfe14952cdc 13 #define DEBUG(...) /* nothing */
pgao 1:dbfe14952cdc 14 #endif /* #if NEED_CONSOLE_OUTPUT */
pgao 1:dbfe14952cdc 15
pgao 1:dbfe14952cdc 16 BLEDevice ble;
pgao 1:dbfe14952cdc 17 DigitalOut led1(LED1);
pgao 3:436ef162bf2d 18 DigitalOut led2(LED2);
pgao 3:436ef162bf2d 19
pgao 3:436ef162bf2d 20 DigitalOut powerSwitch(P0_0);
pgao 3:436ef162bf2d 21
jstroud 6:d540386708d1 22 AnalogIn tempPin(P0_1);
pgao 1:dbfe14952cdc 23
pgao 1:dbfe14952cdc 24 UARTService *uartServicePtr;
pgao 1:dbfe14952cdc 25
pgao 1:dbfe14952cdc 26 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
pgao 1:dbfe14952cdc 27 {
pgao 1:dbfe14952cdc 28 DEBUG("Disconnected!\n\r");
pgao 1:dbfe14952cdc 29 DEBUG("Restarting the advertising process\n\r");
pgao 1:dbfe14952cdc 30 ble.startAdvertising();
pgao 1:dbfe14952cdc 31 }
pgao 1:dbfe14952cdc 32
pgao 1:dbfe14952cdc 33 void onDataWritten(const GattCharacteristicWriteCBParams *params)
pgao 1:dbfe14952cdc 34 {
pgao 1:dbfe14952cdc 35 if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) {
jstroud 8:114fea2afa09 36 float temp = tempPin.read(); // temperature voltage
jstroud 10:0193462ea6f1 37
jstroud 10:0193462ea6f1 38 float tempC = ((temp*3.0)-0.5)*100.0; // conversion to celcius
jstroud 10:0193462ea6f1 39 float tempF = (tempC*9.0/5.0)+32.0; // conversion to fahrenheit
jstroud 10:0193462ea6f1 40 DEBUG("temp[V]:%f\ttemp[C]:%f\ttemp[F]:%f\n",temp,tempC,tempF);
jstroud 10:0193462ea6f1 41 //DEBUG(params->data, "%
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 }
jstroud 10:0193462ea6f1 54 //ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
pgao 11:8500dadc8a7e 55 char buffer[9];
pgao 11:8500dadc8a7e 56 sprintf(buffer,"%4.4f",tempF);
pgao 11:8500dadc8a7e 57 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t *)buffer, sizeof(&buffer));
jstroud 8:114fea2afa09 58
jstroud 0:6a0d0bc31c4c 59 }
jstroud 0:6a0d0bc31c4c 60 }
pgao 1:dbfe14952cdc 61
pgao 1:dbfe14952cdc 62 void periodicCallback(void)
pgao 1:dbfe14952cdc 63 {
pgao 1:dbfe14952cdc 64 led1 = !led1;
pgao 1:dbfe14952cdc 65 }
pgao 1:dbfe14952cdc 66
pgao 1:dbfe14952cdc 67 int main(void)
pgao 1:dbfe14952cdc 68 {
pgao 1:dbfe14952cdc 69 led1 = 1;
pgao 3:436ef162bf2d 70 led2 = 0;
pgao 3:436ef162bf2d 71 powerSwitch = 0;
pgao 1:dbfe14952cdc 72 Ticker ticker;
pgao 1:dbfe14952cdc 73 ticker.attach(periodicCallback, 1);
pgao 1:dbfe14952cdc 74
pgao 1:dbfe14952cdc 75 DEBUG("Initialising the nRF51822\n\r");
pgao 1:dbfe14952cdc 76 ble.init();
pgao 1:dbfe14952cdc 77 ble.onDisconnection(disconnectionCallback);
jstroud 7:fa5a3ca3c62b 78 ble.onDataWritten(onDataWritten); // called when someone writes to me
pgao 1:dbfe14952cdc 79
pgao 1:dbfe14952cdc 80 /* setup advertising */
pgao 1:dbfe14952cdc 81 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
pgao 1:dbfe14952cdc 82 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pgao 1:dbfe14952cdc 83 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
pgao 1:dbfe14952cdc 84 (const uint8_t *)"pgao", sizeof("pgao") - 1);
pgao 1:dbfe14952cdc 85 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
pgao 1:dbfe14952cdc 86 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
pgao 1:dbfe14952cdc 87
pgao 1:dbfe14952cdc 88 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
pgao 1:dbfe14952cdc 89 ble.startAdvertising();
pgao 1:dbfe14952cdc 90
pgao 1:dbfe14952cdc 91 UARTService uartService(ble);
pgao 1:dbfe14952cdc 92 uartServicePtr = &uartService;
pgao 1:dbfe14952cdc 93
pgao 1:dbfe14952cdc 94 while (true) {
pgao 1:dbfe14952cdc 95 ble.waitForEvent();
pgao 1:dbfe14952cdc 96 }
pgao 1:dbfe14952cdc 97 }
pgao 1:dbfe14952cdc 98