ADT7410 or TMP102 with mbed HRM1017 sample program konashi.js http://jsdo.it/micutil/7GnE

Dependencies:   ADT7410 BLE_API_Native_IRC TMP102 mbed

Fork of BLE_Health_Thermometer_IRC by Yoshihiro TSUBOI

konashi.jsを使う場合 http://jsdo.it/micutil/7GnE

techBASICを使う場合 https://www.dropbox.com/s/q5vuqmdr7o8r9v0/ADT7410.txt

I2C温度計:ADT7410またはTMP102を使って mbed HRM1017で温度を表示させるサンプルプログラムです

ADT7410:秋月 http://akizukidenshi.com/catalog/g/gM-06675/ で購入できます。

TMP102:スイッチサイエンス http://www.switch-science.com/catalog/1474/ で購入できます。

mbed HRM1017 http://www.switch-science.com/catalog/1755/

mbedのコード http://mbed.org/users/micono/code/BLE_ADT7410_TMP102_Sample/

ADT7410を使う場合:UseADT7410 1

TMP102を使う場合:UseADT7410 0

konashi.jsを使う場合:KONASHI 1

nRF Toolboxを使う場合:KONASHI 0

ADT7410配線図 /media/uploads/micono/adt7410mbedhrm1017.jpg

Committer:
donalm
Date:
Sun Feb 23 14:39:55 2014 +0000
Revision:
2:f11df1469db2
Parent:
0:701da26ee5cb
Child:
5:9591519c2782
Some tidy up while writing the blog.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donalm 0:701da26ee5cb 1 /* mbed Microcontroller Library
donalm 0:701da26ee5cb 2 * Copyright (c) 2006-2014 ARM Limited
donalm 0:701da26ee5cb 3 *
donalm 0:701da26ee5cb 4 * Licensed under the Apache License, Version 2.0 (the "License");
donalm 0:701da26ee5cb 5 * you may not use this file except in compliance with the License.
donalm 0:701da26ee5cb 6 * You may obtain a copy of the License at
donalm 0:701da26ee5cb 7 *
donalm 0:701da26ee5cb 8 * http://www.apache.org/licenses/LICENSE-2.0
donalm 0:701da26ee5cb 9 *
donalm 0:701da26ee5cb 10 * Unless required by applicable law or agreed to in writing, software
donalm 0:701da26ee5cb 11 * distributed under the License is distributed on an "AS IS" BASIS,
donalm 0:701da26ee5cb 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
donalm 0:701da26ee5cb 13 * See the License for the specific language governing permissions and
donalm 0:701da26ee5cb 14 * limitations under the License.
donalm 0:701da26ee5cb 15 */
donalm 0:701da26ee5cb 16
donalm 0:701da26ee5cb 17 #include "mbed.h"
donalm 0:701da26ee5cb 18 #include "TMP102.h"
donalm 0:701da26ee5cb 19 #include "nRF51822n.h"
donalm 0:701da26ee5cb 20
donalm 0:701da26ee5cb 21 nRF51822n nrf; /* BLE radio driver */
donalm 0:701da26ee5cb 22 TMP102 healthThemometer(p22, p20, 0x90); /* The TMP102 connected to our board */
donalm 0:701da26ee5cb 23
donalm 2:f11df1469db2 24 /* LEDs for indication: */
donalm 2:f11df1469db2 25 DigitalOut oneSecondLed(LED1); /* LED1 is toggled every second. */
donalm 2:f11df1469db2 26 DigitalOut advertisingStateLed(LED2); /* LED2 is on when we are advertising, otherwise off. */
donalm 0:701da26ee5cb 27
donalm 0:701da26ee5cb 28
donalm 0:701da26ee5cb 29 /* Health Thermometer Service */
donalm 0:701da26ee5cb 30 uint8_t thermTempPayload[5] = { 0, 0, 0, 0, 0 };
donalm 0:701da26ee5cb 31 GattService thermService (GattService::UUID_HEALTH_THERMOMETER_SERVICE);
donalm 0:701da26ee5cb 32 GattCharacteristic thermTemp (GattCharacteristic::UUID_TEMPERATURE_MEASUREMENT_CHAR,
donalm 0:701da26ee5cb 33 5, 5, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
donalm 0:701da26ee5cb 34
donalm 0:701da26ee5cb 35 /* Battery Level Service */
donalm 0:701da26ee5cb 36 uint8_t batt = 100; /* Battery level */
donalm 0:701da26ee5cb 37 uint8_t read_batt = 0; /* Variable to hold battery level reads */
donalm 0:701da26ee5cb 38 GattService battService ( GattService::UUID_BATTERY_SERVICE );
donalm 0:701da26ee5cb 39 GattCharacteristic battLevel ( GattCharacteristic::UUID_BATTERY_LEVEL_CHAR, 1, 1,
donalm 0:701da26ee5cb 40 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY |
donalm 0:701da26ee5cb 41 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
donalm 0:701da26ee5cb 42
donalm 0:701da26ee5cb 43
donalm 0:701da26ee5cb 44 /* Advertising data and parameters */
donalm 0:701da26ee5cb 45 GapAdvertisingData advData;
donalm 0:701da26ee5cb 46 GapAdvertisingData scanResponse;
donalm 0:701da26ee5cb 47 GapAdvertisingParams advParams ( GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED );
donalm 2:f11df1469db2 48
donalm 0:701da26ee5cb 49 uint16_t uuid16_list[] = {GattService::UUID_HEALTH_THERMOMETER_SERVICE,
donalm 0:701da26ee5cb 50 GattService::UUID_BATTERY_SERVICE};
donalm 0:701da26ee5cb 51
donalm 0:701da26ee5cb 52 uint32_t quick_ieee11073_from_float(float temperature);
donalm 0:701da26ee5cb 53 void updateServiceValues(void);
donalm 0:701da26ee5cb 54
donalm 0:701da26ee5cb 55 /**************************************************************************/
donalm 0:701da26ee5cb 56 /*!
donalm 0:701da26ee5cb 57 @brief This custom class can be used to override any GapEvents
donalm 0:701da26ee5cb 58 that you are interested in handling on an application level.
donalm 0:701da26ee5cb 59 */
donalm 0:701da26ee5cb 60 /**************************************************************************/
donalm 0:701da26ee5cb 61 class GapEventHandler : public GapEvents
donalm 0:701da26ee5cb 62 {
donalm 2:f11df1469db2 63 //virtual void onTimeout(void) {}
donalm 2:f11df1469db2 64
donalm 0:701da26ee5cb 65 virtual void onConnected(void)
donalm 0:701da26ee5cb 66 {
donalm 2:f11df1469db2 67 advertisingStateLed = 0;
donalm 0:701da26ee5cb 68 }
donalm 0:701da26ee5cb 69
donalm 2:f11df1469db2 70 /* When a client device disconnects we need to start advertising again. */
donalm 0:701da26ee5cb 71 virtual void onDisconnected(void)
donalm 0:701da26ee5cb 72 {
donalm 0:701da26ee5cb 73 nrf.getGap().startAdvertising(advParams);
donalm 2:f11df1469db2 74 advertisingStateLed = 1;
donalm 0:701da26ee5cb 75 }
donalm 0:701da26ee5cb 76 };
donalm 0:701da26ee5cb 77
donalm 0:701da26ee5cb 78 /**************************************************************************/
donalm 0:701da26ee5cb 79 /*!
donalm 0:701da26ee5cb 80 @brief Program entry point
donalm 0:701da26ee5cb 81 */
donalm 0:701da26ee5cb 82 /**************************************************************************/
donalm 0:701da26ee5cb 83 int main(void)
donalm 0:701da26ee5cb 84 {
donalm 2:f11df1469db2 85
donalm 2:f11df1469db2 86 /* Setup blinky led */
donalm 2:f11df1469db2 87 oneSecondLed=1;
donalm 0:701da26ee5cb 88
donalm 2:f11df1469db2 89 /* Setup an event handler for GAP events i.e. Client/Server connection events. */
donalm 0:701da26ee5cb 90 nrf.getGap().setEventHandler(new GapEventHandler());
donalm 2:f11df1469db2 91
donalm 0:701da26ee5cb 92 /* Initialise the nRF51822 */
donalm 0:701da26ee5cb 93 nrf.init();
donalm 0:701da26ee5cb 94
donalm 0:701da26ee5cb 95 /* Make sure we get a clean start */
donalm 0:701da26ee5cb 96 nrf.reset();
donalm 0:701da26ee5cb 97
donalm 0:701da26ee5cb 98 /* Add BLE-Only flag and complete service list to the advertising data */
donalm 0:701da26ee5cb 99 advData.addFlags(GapAdvertisingData::BREDR_NOT_SUPPORTED);
donalm 0:701da26ee5cb 100 advData.addData(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,
donalm 0:701da26ee5cb 101 (uint8_t*)uuid16_list, sizeof(uuid16_list));
donalm 0:701da26ee5cb 102 advData.addAppearance(GapAdvertisingData::GENERIC_THERMOMETER);
donalm 0:701da26ee5cb 103 nrf.getGap().setAdvertisingData(advData, scanResponse);
donalm 0:701da26ee5cb 104
donalm 0:701da26ee5cb 105 /* Health Thermometer Service */
donalm 0:701da26ee5cb 106 thermService.addCharacteristic(thermTemp);
donalm 0:701da26ee5cb 107 nrf.getGattServer().addService(thermService);
donalm 0:701da26ee5cb 108
donalm 0:701da26ee5cb 109 /* Add the Battery Level service */
donalm 0:701da26ee5cb 110 battService.addCharacteristic(battLevel);
donalm 0:701da26ee5cb 111 nrf.getGattServer().addService(battService);
donalm 0:701da26ee5cb 112
donalm 0:701da26ee5cb 113 /* Start advertising (make sure you've added all your data first) */
donalm 0:701da26ee5cb 114 nrf.getGap().startAdvertising(advParams);
donalm 2:f11df1469db2 115 advertisingStateLed = 1;
donalm 0:701da26ee5cb 116
donalm 0:701da26ee5cb 117 for (;;)
donalm 0:701da26ee5cb 118 {
donalm 2:f11df1469db2 119 /* Now that we're live, update the battery level & temperature characteristics */
donalm 2:f11df1469db2 120 updateServiceValues();
donalm 0:701da26ee5cb 121 wait(1);
donalm 0:701da26ee5cb 122 }
donalm 0:701da26ee5cb 123 }
donalm 0:701da26ee5cb 124
donalm 0:701da26ee5cb 125 /**************************************************************************/
donalm 0:701da26ee5cb 126 /*!
donalm 2:f11df1469db2 127 @brief Ticker callback to switch advertisingStateLed state
donalm 0:701da26ee5cb 128 */
donalm 0:701da26ee5cb 129 /**************************************************************************/
donalm 0:701da26ee5cb 130 void updateServiceValues(void)
donalm 0:701da26ee5cb 131 {
donalm 2:f11df1469db2 132 /* Toggle the one second LEDs */
donalm 2:f11df1469db2 133 oneSecondLed = !oneSecondLed;
donalm 0:701da26ee5cb 134
donalm 0:701da26ee5cb 135 /* Update battery level */
donalm 0:701da26ee5cb 136 nrf.getGattServer().updateValue(battLevel.handle, (uint8_t*)&batt, sizeof(batt));
donalm 2:f11df1469db2 137 /* Decrement the battery level. */
donalm 2:f11df1469db2 138 batt <=50 ? batt=100 : batt--;;
donalm 0:701da26ee5cb 139
donalm 2:f11df1469db2 140 /* Update the temperature. Note that we need to convert to an ieee11073 format float. */
donalm 0:701da26ee5cb 141 float temperature = healthThemometer.read();
donalm 0:701da26ee5cb 142 uint32_t temp_ieee11073 = quick_ieee11073_from_float(temperature);
donalm 0:701da26ee5cb 143 memcpy(thermTempPayload+1, &temp_ieee11073, 4);
donalm 0:701da26ee5cb 144 nrf.getGattServer().updateValue(thermTemp.handle, thermTempPayload, sizeof(thermTempPayload));
donalm 0:701da26ee5cb 145 }
donalm 0:701da26ee5cb 146
donalm 0:701da26ee5cb 147 /**
donalm 0:701da26ee5cb 148 * @brief A very quick conversion between a float temperature and 11073-20601 FLOAT-Type.
donalm 0:701da26ee5cb 149 * @param temperature The temperature as a float.
donalm 0:701da26ee5cb 150 * @return The temperature in 11073-20601 FLOAT-Type format.
donalm 0:701da26ee5cb 151 */
donalm 0:701da26ee5cb 152 uint32_t quick_ieee11073_from_float(float temperature)
donalm 0:701da26ee5cb 153 {
donalm 0:701da26ee5cb 154 uint8_t exponent = 0xFF; //exponent is -1
donalm 0:701da26ee5cb 155 uint32_t mantissa = (uint32_t)(temperature*10);
donalm 0:701da26ee5cb 156
donalm 0:701da26ee5cb 157 return ( ((uint32_t)exponent) << 24) | mantissa;
donalm 2:f11df1469db2 158 }
donalm 2:f11df1469db2 159