ADT7410 for BLE nano V2

Dependencies:   ADT7410

Committer:
Jun_adi
Date:
Thu Aug 30 03:35:10 2018 +0000
Revision:
0:477ffc11d92b
ADT7410 temp sensing for BLEnano V2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jun_adi 0:477ffc11d92b 1 /*
Jun_adi 0:477ffc11d92b 2
Jun_adi 0:477ffc11d92b 3 Copyright (c) 2012-2014 RedBearLab
Jun_adi 0:477ffc11d92b 4
Jun_adi 0:477ffc11d92b 5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Jun_adi 0:477ffc11d92b 6 and associated documentation files (the "Software"), to deal in the Software without restriction,
Jun_adi 0:477ffc11d92b 7 including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
Jun_adi 0:477ffc11d92b 8 and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
Jun_adi 0:477ffc11d92b 9 subject to the following conditions:
Jun_adi 0:477ffc11d92b 10 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
Jun_adi 0:477ffc11d92b 11
Jun_adi 0:477ffc11d92b 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
Jun_adi 0:477ffc11d92b 13 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
Jun_adi 0:477ffc11d92b 14 PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
Jun_adi 0:477ffc11d92b 15 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Jun_adi 0:477ffc11d92b 16 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Jun_adi 0:477ffc11d92b 17
Jun_adi 0:477ffc11d92b 18 */
Jun_adi 0:477ffc11d92b 19
Jun_adi 0:477ffc11d92b 20 /*
Jun_adi 0:477ffc11d92b 21 * The application works with the BlueJelly.js
Jun_adi 0:477ffc11d92b 22 *
Jun_adi 0:477ffc11d92b 23 * http://jellyware.jp/
Jun_adi 0:477ffc11d92b 24 *
Jun_adi 0:477ffc11d92b 25 */
Jun_adi 0:477ffc11d92b 26
Jun_adi 0:477ffc11d92b 27 //======================================================================
Jun_adi 0:477ffc11d92b 28 //Grobal
Jun_adi 0:477ffc11d92b 29 //======================================================================
Jun_adi 0:477ffc11d92b 30 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 31 //Include Header Files
Jun_adi 0:477ffc11d92b 32 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 33 #include "mbed.h"
Jun_adi 0:477ffc11d92b 34 #include "ble/BLE.h"
Jun_adi 0:477ffc11d92b 35 #include "ADT7410.h"
Jun_adi 0:477ffc11d92b 36
Jun_adi 0:477ffc11d92b 37 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 38 //Definition
Jun_adi 0:477ffc11d92b 39 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 40 #define TXRX_BUF_LEN 20 //max 20[byte]
Jun_adi 0:477ffc11d92b 41 #define DEVICE_LOCAL_NAME "ADT7410 Temperature" //Change Device name
Jun_adi 0:477ffc11d92b 42 #define ADVERTISING_INTERVAL 160 //160 * 0.625[ms] = 100[ms]
Jun_adi 0:477ffc11d92b 43 #define DIGITAL_OUT_PIN P0_29
Jun_adi 0:477ffc11d92b 44
Jun_adi 0:477ffc11d92b 45 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 46 //Object generation
Jun_adi 0:477ffc11d92b 47 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 48 BLE blenano;
Jun_adi 0:477ffc11d92b 49 DigitalOut LED_SET(DIGITAL_OUT_PIN);
Jun_adi 0:477ffc11d92b 50
Jun_adi 0:477ffc11d92b 51 //I2C Pin setting P0_4=SDA, P0_5=SCL
Jun_adi 0:477ffc11d92b 52 ADT7410 temp(P0_5, P0_4, 0x90, 10000);
Jun_adi 0:477ffc11d92b 53
Jun_adi 0:477ffc11d92b 54
Jun_adi 0:477ffc11d92b 55 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 56 //Service & Characteristic Setting
Jun_adi 0:477ffc11d92b 57 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 58 //Service UUID
Jun_adi 0:477ffc11d92b 59 static const uint8_t base_uuid[] = { 0x71, 0x3D, 0x00, 0x00, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E } ;
Jun_adi 0:477ffc11d92b 60
Jun_adi 0:477ffc11d92b 61 //Characteristic UUID
Jun_adi 0:477ffc11d92b 62 static const uint8_t tx_uuid[] = { 0x71, 0x3D, 0x00, 0x03, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E } ;
Jun_adi 0:477ffc11d92b 63 static const uint8_t rx_uuid[] = { 0x71, 0x3D, 0x00, 0x02, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E } ;
Jun_adi 0:477ffc11d92b 64
Jun_adi 0:477ffc11d92b 65 //Characteristic Value
Jun_adi 0:477ffc11d92b 66 uint8_t txPayload[TXRX_BUF_LEN] = {0,};
Jun_adi 0:477ffc11d92b 67 uint8_t rxPayload[TXRX_BUF_LEN] = {0,};
Jun_adi 0:477ffc11d92b 68
Jun_adi 0:477ffc11d92b 69 //Characteristic Property Setting etc
Jun_adi 0:477ffc11d92b 70 GattCharacteristic txCharacteristic (tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
Jun_adi 0:477ffc11d92b 71 GattCharacteristic rxCharacteristic (rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY| GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
Jun_adi 0:477ffc11d92b 72 GattCharacteristic *myChars[] = {&txCharacteristic, &rxCharacteristic};
Jun_adi 0:477ffc11d92b 73
Jun_adi 0:477ffc11d92b 74 //Service Setting
Jun_adi 0:477ffc11d92b 75 GattService myService(base_uuid, myChars, sizeof(myChars) / sizeof(GattCharacteristic *));
Jun_adi 0:477ffc11d92b 76
Jun_adi 0:477ffc11d92b 77
Jun_adi 0:477ffc11d92b 78 //======================================================================
Jun_adi 0:477ffc11d92b 79 //onDisconnection
Jun_adi 0:477ffc11d92b 80 //======================================================================
Jun_adi 0:477ffc11d92b 81 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
Jun_adi 0:477ffc11d92b 82 {
Jun_adi 0:477ffc11d92b 83 blenano.startAdvertising();
Jun_adi 0:477ffc11d92b 84 }
Jun_adi 0:477ffc11d92b 85
Jun_adi 0:477ffc11d92b 86
Jun_adi 0:477ffc11d92b 87 //======================================================================
Jun_adi 0:477ffc11d92b 88 //convert reverse UUID
Jun_adi 0:477ffc11d92b 89 //======================================================================
Jun_adi 0:477ffc11d92b 90 void reverseUUID(const uint8_t* src, uint8_t* dst)
Jun_adi 0:477ffc11d92b 91 {
Jun_adi 0:477ffc11d92b 92 int i;
Jun_adi 0:477ffc11d92b 93
Jun_adi 0:477ffc11d92b 94 for(i=0;i<16;i++)
Jun_adi 0:477ffc11d92b 95 dst[i] = src[15 - i];
Jun_adi 0:477ffc11d92b 96 }
Jun_adi 0:477ffc11d92b 97
Jun_adi 0:477ffc11d92b 98
Jun_adi 0:477ffc11d92b 99 //======================================================================
Jun_adi 0:477ffc11d92b 100 //main
Jun_adi 0:477ffc11d92b 101 //======================================================================
Jun_adi 0:477ffc11d92b 102 int main(void)
Jun_adi 0:477ffc11d92b 103 {
Jun_adi 0:477ffc11d92b 104 uint8_t base_uuid_rev[16];
Jun_adi 0:477ffc11d92b 105
Jun_adi 0:477ffc11d92b 106 //BLE init
Jun_adi 0:477ffc11d92b 107 blenano.init();
Jun_adi 0:477ffc11d92b 108
Jun_adi 0:477ffc11d92b 109 //EventListener
Jun_adi 0:477ffc11d92b 110 blenano.onDisconnection(disconnectionCallback);
Jun_adi 0:477ffc11d92b 111 //blenano.onDataWritten(WrittenHandler);
Jun_adi 0:477ffc11d92b 112
Jun_adi 0:477ffc11d92b 113 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 114 //setup advertising
Jun_adi 0:477ffc11d92b 115 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 116 //Classic BT not support
Jun_adi 0:477ffc11d92b 117 blenano.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Jun_adi 0:477ffc11d92b 118
Jun_adi 0:477ffc11d92b 119 //Connectable to Central
Jun_adi 0:477ffc11d92b 120 blenano.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Jun_adi 0:477ffc11d92b 121
Jun_adi 0:477ffc11d92b 122 //Local Name
Jun_adi 0:477ffc11d92b 123 blenano.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME,
Jun_adi 0:477ffc11d92b 124 (const uint8_t *)DEVICE_LOCAL_NAME, sizeof(DEVICE_LOCAL_NAME) - 1);
Jun_adi 0:477ffc11d92b 125
Jun_adi 0:477ffc11d92b 126 //GAP AdvertisingData
Jun_adi 0:477ffc11d92b 127 reverseUUID(base_uuid, base_uuid_rev);
Jun_adi 0:477ffc11d92b 128 blenano.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
Jun_adi 0:477ffc11d92b 129 (uint8_t *)base_uuid_rev, sizeof(base_uuid));
Jun_adi 0:477ffc11d92b 130
Jun_adi 0:477ffc11d92b 131 //Advertising Interval
Jun_adi 0:477ffc11d92b 132 blenano.setAdvertisingInterval(ADVERTISING_INTERVAL);
Jun_adi 0:477ffc11d92b 133
Jun_adi 0:477ffc11d92b 134 //Add Service
Jun_adi 0:477ffc11d92b 135 blenano.addService(myService);
Jun_adi 0:477ffc11d92b 136
Jun_adi 0:477ffc11d92b 137 //Start Advertising
Jun_adi 0:477ffc11d92b 138 blenano.startAdvertising();
Jun_adi 0:477ffc11d92b 139
Jun_adi 0:477ffc11d92b 140 uint8_t buf[2];
Jun_adi 0:477ffc11d92b 141 float tempadt;
Jun_adi 0:477ffc11d92b 142
Jun_adi 0:477ffc11d92b 143 // reset sensor to default values
Jun_adi 0:477ffc11d92b 144 temp.reset();
Jun_adi 0:477ffc11d92b 145
Jun_adi 0:477ffc11d92b 146 // reduce sample rate to save power
Jun_adi 0:477ffc11d92b 147 temp.setConfig(ONE_SPS_MODE);
Jun_adi 0:477ffc11d92b 148
Jun_adi 0:477ffc11d92b 149 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 150 //Loop
Jun_adi 0:477ffc11d92b 151 //------------------------------------------------------------
Jun_adi 0:477ffc11d92b 152 while(1)
Jun_adi 0:477ffc11d92b 153 {
Jun_adi 0:477ffc11d92b 154 // get temperature every 10 seconds
Jun_adi 0:477ffc11d92b 155 tempadt = temp.getTemp();
Jun_adi 0:477ffc11d92b 156
Jun_adi 0:477ffc11d92b 157 int16_t value0 = tempadt; //Get integer value
Jun_adi 0:477ffc11d92b 158 int16_t value1 = (tempadt - value0)*100; //Get decimal value
Jun_adi 0:477ffc11d92b 159 buf[0] = value0;
Jun_adi 0:477ffc11d92b 160 buf[1] = value1;
Jun_adi 0:477ffc11d92b 161
Jun_adi 0:477ffc11d92b 162 //Send out
Jun_adi 0:477ffc11d92b 163 blenano.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 2);
Jun_adi 0:477ffc11d92b 164
Jun_adi 0:477ffc11d92b 165 blenano.waitForEvent();
Jun_adi 0:477ffc11d92b 166
Jun_adi 0:477ffc11d92b 167 wait(1);
Jun_adi 0:477ffc11d92b 168 }
Jun_adi 0:477ffc11d92b 169 }