DesignForAmputee hw 5 project

Dependencies:   mbed BLE_API nRF51822

Committer:
jstroud
Date:
Sat Nov 08 02:01:45 2014 +0000
Revision:
7:fa5a3ca3c62b
Parent:
6:d540386708d1
Child:
8:114fea2afa09
update celcius code

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 7:fa5a3ca3c62b 37 float temp = ((tempPin.read()*3)-0.5)*100; // temperature, conversion to celcius, via https://learn.adafruit.com/tmp36-temperature-sensor?view=all
pgao 3:436ef162bf2d 38
pgao 1:dbfe14952cdc 39 uint16_t bytesRead = params->len;
pgao 1:dbfe14952cdc 40 DEBUG("received %u bytes\n\r", bytesRead);
pgao 3:436ef162bf2d 41 DEBUG("first byte received: %u\n\r", params->data[0]);
pgao 3:436ef162bf2d 42 uint8_t on = '1';
pgao 3:436ef162bf2d 43 uint8_t off = '0';
pgao 3:436ef162bf2d 44 if (params->data[0] == on) {
pgao 3:436ef162bf2d 45 led2 = 1;
pgao 3:436ef162bf2d 46 powerSwitch = 1;
pgao 3:436ef162bf2d 47 } else if (params->data[0] == off) {
pgao 3:436ef162bf2d 48 led2 = 0;
pgao 3:436ef162bf2d 49 powerSwitch = 0;
pgao 3:436ef162bf2d 50 }
pgao 1:dbfe14952cdc 51 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
jstroud 0:6a0d0bc31c4c 52 }
jstroud 0:6a0d0bc31c4c 53 }
pgao 1:dbfe14952cdc 54
pgao 1:dbfe14952cdc 55 void periodicCallback(void)
pgao 1:dbfe14952cdc 56 {
pgao 1:dbfe14952cdc 57 led1 = !led1;
pgao 1:dbfe14952cdc 58 }
pgao 1:dbfe14952cdc 59
pgao 1:dbfe14952cdc 60 int main(void)
pgao 1:dbfe14952cdc 61 {
pgao 1:dbfe14952cdc 62 led1 = 1;
pgao 3:436ef162bf2d 63 led2 = 0;
pgao 3:436ef162bf2d 64 powerSwitch = 0;
pgao 1:dbfe14952cdc 65 Ticker ticker;
pgao 1:dbfe14952cdc 66 ticker.attach(periodicCallback, 1);
pgao 1:dbfe14952cdc 67
pgao 1:dbfe14952cdc 68 DEBUG("Initialising the nRF51822\n\r");
pgao 1:dbfe14952cdc 69 ble.init();
pgao 1:dbfe14952cdc 70 ble.onDisconnection(disconnectionCallback);
jstroud 7:fa5a3ca3c62b 71 ble.onDataWritten(onDataWritten); // called when someone writes to me
pgao 1:dbfe14952cdc 72
pgao 1:dbfe14952cdc 73 /* setup advertising */
pgao 1:dbfe14952cdc 74 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
pgao 1:dbfe14952cdc 75 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pgao 1:dbfe14952cdc 76 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
pgao 1:dbfe14952cdc 77 (const uint8_t *)"pgao", sizeof("pgao") - 1);
pgao 1:dbfe14952cdc 78 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
pgao 1:dbfe14952cdc 79 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
pgao 1:dbfe14952cdc 80
pgao 1:dbfe14952cdc 81 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
pgao 1:dbfe14952cdc 82 ble.startAdvertising();
pgao 1:dbfe14952cdc 83
pgao 1:dbfe14952cdc 84 UARTService uartService(ble);
pgao 1:dbfe14952cdc 85 uartServicePtr = &uartService;
pgao 1:dbfe14952cdc 86
pgao 1:dbfe14952cdc 87 while (true) {
pgao 1:dbfe14952cdc 88 ble.waitForEvent();
pgao 1:dbfe14952cdc 89 }
pgao 1:dbfe14952cdc 90 }
pgao 1:dbfe14952cdc 91