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:
micono
Date:
Sun Jul 20 01:24:21 2014 +0000
Revision:
5:9591519c2782
Parent:
2:f11df1469db2
Child:
6:58ac5eb16aec
ADT7410 or TMP102 with mbed HRM1017 sample program

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 "nRF51822n.h"
donalm 0:701da26ee5cb 19
donalm 0:701da26ee5cb 20 nRF51822n nrf; /* BLE radio driver */
micono 5:9591519c2782 21
micono 5:9591519c2782 22 #define UseADT7410 1
micono 5:9591519c2782 23 #if UseADT7410
micono 5:9591519c2782 24 #include "ADT7410.h"
micono 5:9591519c2782 25 ADT7410 healthThemometer(p22, p20, 0x90, 400);
micono 5:9591519c2782 26 #else
micono 5:9591519c2782 27 #include "TMP102.h"
micono 5:9591519c2782 28 TMP102 healthThemometer(p22, p20, 0x90); /* The TMP102 connected to our board */
micono 5:9591519c2782 29 #endif
micono 5:9591519c2782 30
micono 5:9591519c2782 31 #define DBG 0
micono 5:9591519c2782 32 #if DBG
micono 5:9591519c2782 33 Serial pc(USBTX, USBRX);
micono 5:9591519c2782 34 #endif
donalm 0:701da26ee5cb 35
donalm 2:f11df1469db2 36 /* LEDs for indication: */
donalm 2:f11df1469db2 37 DigitalOut oneSecondLed(LED1); /* LED1 is toggled every second. */
donalm 2:f11df1469db2 38 DigitalOut advertisingStateLed(LED2); /* LED2 is on when we are advertising, otherwise off. */
donalm 0:701da26ee5cb 39
donalm 0:701da26ee5cb 40
micono 5:9591519c2782 41
micono 5:9591519c2782 42
micono 5:9591519c2782 43
micono 5:9591519c2782 44 #define KONASHI 1
micono 5:9591519c2782 45 #if KONASHI
micono 5:9591519c2782 46 /* Health Thermometer Service */
micono 5:9591519c2782 47 uint8_t thermTempPayload[2] = { 0, 0 };
micono 5:9591519c2782 48 static const uint16_t konashi_service_uuid = 0xFF00;
micono 5:9591519c2782 49 static const uint16_t konashi_i2c_read_uuid = 0x300F;
micono 5:9591519c2782 50 GattService thermService (konashi_service_uuid);
micono 5:9591519c2782 51 GattCharacteristic thermTemp (konashi_i2c_read_uuid,2, 2,
micono 5:9591519c2782 52 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
micono 5:9591519c2782 53 #else
donalm 0:701da26ee5cb 54 /* Health Thermometer Service */
donalm 0:701da26ee5cb 55 uint8_t thermTempPayload[5] = { 0, 0, 0, 0, 0 };
donalm 0:701da26ee5cb 56 GattService thermService (GattService::UUID_HEALTH_THERMOMETER_SERVICE);
donalm 0:701da26ee5cb 57 GattCharacteristic thermTemp (GattCharacteristic::UUID_TEMPERATURE_MEASUREMENT_CHAR,
donalm 0:701da26ee5cb 58 5, 5, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
donalm 0:701da26ee5cb 59
micono 5:9591519c2782 60 GattService thermService (GattService::UUID_HEALTH_THERMOMETER_SERVICE);
micono 5:9591519c2782 61 GattCharacteristic thermTemp (GattCharacteristic::UUID_TEMPERATURE_MEASUREMENT_CHAR,
micono 5:9591519c2782 62 5, 5, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
micono 5:9591519c2782 63 #endif
micono 5:9591519c2782 64
donalm 0:701da26ee5cb 65
donalm 0:701da26ee5cb 66
donalm 0:701da26ee5cb 67 /* Advertising data and parameters */
donalm 0:701da26ee5cb 68 GapAdvertisingData advData;
donalm 0:701da26ee5cb 69 GapAdvertisingData scanResponse;
donalm 0:701da26ee5cb 70 GapAdvertisingParams advParams ( GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED );
donalm 2:f11df1469db2 71
donalm 0:701da26ee5cb 72 uint16_t uuid16_list[] = {GattService::UUID_HEALTH_THERMOMETER_SERVICE,
donalm 0:701da26ee5cb 73 GattService::UUID_BATTERY_SERVICE};
donalm 0:701da26ee5cb 74
donalm 0:701da26ee5cb 75 uint32_t quick_ieee11073_from_float(float temperature);
donalm 0:701da26ee5cb 76 void updateServiceValues(void);
donalm 0:701da26ee5cb 77
donalm 0:701da26ee5cb 78 /**************************************************************************/
donalm 0:701da26ee5cb 79 /*!
donalm 0:701da26ee5cb 80 @brief This custom class can be used to override any GapEvents
donalm 0:701da26ee5cb 81 that you are interested in handling on an application level.
donalm 0:701da26ee5cb 82 */
donalm 0:701da26ee5cb 83 /**************************************************************************/
donalm 0:701da26ee5cb 84 class GapEventHandler : public GapEvents
donalm 0:701da26ee5cb 85 {
donalm 2:f11df1469db2 86 //virtual void onTimeout(void) {}
donalm 2:f11df1469db2 87
donalm 0:701da26ee5cb 88 virtual void onConnected(void)
donalm 0:701da26ee5cb 89 {
micono 5:9591519c2782 90 #if DBG
micono 5:9591519c2782 91 pc.printf("Connected\n\r");
micono 5:9591519c2782 92 #endif
donalm 2:f11df1469db2 93 advertisingStateLed = 0;
donalm 0:701da26ee5cb 94 }
donalm 0:701da26ee5cb 95
donalm 2:f11df1469db2 96 /* When a client device disconnects we need to start advertising again. */
donalm 0:701da26ee5cb 97 virtual void onDisconnected(void)
donalm 0:701da26ee5cb 98 {
donalm 0:701da26ee5cb 99 nrf.getGap().startAdvertising(advParams);
donalm 2:f11df1469db2 100 advertisingStateLed = 1;
donalm 0:701da26ee5cb 101 }
donalm 0:701da26ee5cb 102 };
donalm 0:701da26ee5cb 103
donalm 0:701da26ee5cb 104 /**************************************************************************/
donalm 0:701da26ee5cb 105 /*!
donalm 0:701da26ee5cb 106 @brief Program entry point
donalm 0:701da26ee5cb 107 */
donalm 0:701da26ee5cb 108 /**************************************************************************/
donalm 0:701da26ee5cb 109 int main(void)
donalm 0:701da26ee5cb 110 {
donalm 2:f11df1469db2 111
donalm 2:f11df1469db2 112 /* Setup blinky led */
donalm 2:f11df1469db2 113 oneSecondLed=1;
donalm 0:701da26ee5cb 114
donalm 2:f11df1469db2 115 /* Setup an event handler for GAP events i.e. Client/Server connection events. */
donalm 0:701da26ee5cb 116 nrf.getGap().setEventHandler(new GapEventHandler());
donalm 2:f11df1469db2 117
donalm 0:701da26ee5cb 118 /* Initialise the nRF51822 */
donalm 0:701da26ee5cb 119 nrf.init();
donalm 0:701da26ee5cb 120
donalm 0:701da26ee5cb 121 /* Make sure we get a clean start */
donalm 0:701da26ee5cb 122 nrf.reset();
donalm 0:701da26ee5cb 123
donalm 0:701da26ee5cb 124 /* Add BLE-Only flag and complete service list to the advertising data */
donalm 0:701da26ee5cb 125 advData.addFlags(GapAdvertisingData::BREDR_NOT_SUPPORTED);
donalm 0:701da26ee5cb 126 advData.addData(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,
donalm 0:701da26ee5cb 127 (uint8_t*)uuid16_list, sizeof(uuid16_list));
donalm 0:701da26ee5cb 128 advData.addAppearance(GapAdvertisingData::GENERIC_THERMOMETER);
donalm 0:701da26ee5cb 129 nrf.getGap().setAdvertisingData(advData, scanResponse);
donalm 0:701da26ee5cb 130
donalm 0:701da26ee5cb 131 /* Health Thermometer Service */
donalm 0:701da26ee5cb 132 thermService.addCharacteristic(thermTemp);
donalm 0:701da26ee5cb 133 nrf.getGattServer().addService(thermService);
donalm 0:701da26ee5cb 134
micono 5:9591519c2782 135 #if KONASHI
micono 5:9591519c2782 136 #else
donalm 0:701da26ee5cb 137 /* Add the Battery Level service */
donalm 0:701da26ee5cb 138 battService.addCharacteristic(battLevel);
donalm 0:701da26ee5cb 139 nrf.getGattServer().addService(battService);
micono 5:9591519c2782 140 #endif
donalm 0:701da26ee5cb 141
donalm 0:701da26ee5cb 142 /* Start advertising (make sure you've added all your data first) */
donalm 0:701da26ee5cb 143 nrf.getGap().startAdvertising(advParams);
donalm 2:f11df1469db2 144 advertisingStateLed = 1;
donalm 0:701da26ee5cb 145
donalm 0:701da26ee5cb 146 for (;;)
donalm 0:701da26ee5cb 147 {
donalm 2:f11df1469db2 148 /* Now that we're live, update the battery level & temperature characteristics */
donalm 2:f11df1469db2 149 updateServiceValues();
donalm 0:701da26ee5cb 150 wait(1);
donalm 0:701da26ee5cb 151 }
donalm 0:701da26ee5cb 152 }
donalm 0:701da26ee5cb 153
donalm 0:701da26ee5cb 154 /**************************************************************************/
donalm 0:701da26ee5cb 155 /*!
donalm 2:f11df1469db2 156 @brief Ticker callback to switch advertisingStateLed state
donalm 0:701da26ee5cb 157 */
donalm 0:701da26ee5cb 158 /**************************************************************************/
donalm 0:701da26ee5cb 159 void updateServiceValues(void)
donalm 0:701da26ee5cb 160 {
donalm 2:f11df1469db2 161 /* Toggle the one second LEDs */
donalm 2:f11df1469db2 162 oneSecondLed = !oneSecondLed;
micono 5:9591519c2782 163
micono 5:9591519c2782 164 #if KONASHI
micono 5:9591519c2782 165 #else
donalm 0:701da26ee5cb 166 /* Update battery level */
donalm 0:701da26ee5cb 167 nrf.getGattServer().updateValue(battLevel.handle, (uint8_t*)&batt, sizeof(batt));
donalm 2:f11df1469db2 168 /* Decrement the battery level. */
donalm 2:f11df1469db2 169 batt <=50 ? batt=100 : batt--;;
micono 5:9591519c2782 170 #endif
donalm 0:701da26ee5cb 171
donalm 2:f11df1469db2 172 /* Update the temperature. Note that we need to convert to an ieee11073 format float. */
micono 5:9591519c2782 173 #if UseADT7410
micono 5:9591519c2782 174 float temperature = healthThemometer.getTemp();
micono 5:9591519c2782 175 #else
donalm 0:701da26ee5cb 176 float temperature = healthThemometer.read();
micono 5:9591519c2782 177 #endif
micono 5:9591519c2782 178 #if KONASHI
micono 5:9591519c2782 179 uint16_t temp_ieee11073 = temperature;
micono 5:9591519c2782 180 //memcpy(thermTempPayload, &temp_ieee11073, 2);
micono 5:9591519c2782 181 thermTempPayload[0]=floor(temperature);
micono 5:9591519c2782 182 thermTempPayload[1]=floor(10*(temperature-(float)thermTempPayload[0]));
micono 5:9591519c2782 183 #else
donalm 0:701da26ee5cb 184 uint32_t temp_ieee11073 = quick_ieee11073_from_float(temperature);
donalm 0:701da26ee5cb 185 memcpy(thermTempPayload+1, &temp_ieee11073, 4);
micono 5:9591519c2782 186 #endif
micono 5:9591519c2782 187 #if DBG
micono 5:9591519c2782 188 pc.printf("DATA:%d\n\r",temp_ieee11073);
micono 5:9591519c2782 189 #endif
micono 5:9591519c2782 190 nrf.getGattServer().updateValue(thermTemp.handle, thermTempPayload, sizeof(thermTempPayload));
donalm 0:701da26ee5cb 191 }
donalm 0:701da26ee5cb 192
donalm 0:701da26ee5cb 193 /**
donalm 0:701da26ee5cb 194 * @brief A very quick conversion between a float temperature and 11073-20601 FLOAT-Type.
donalm 0:701da26ee5cb 195 * @param temperature The temperature as a float.
donalm 0:701da26ee5cb 196 * @return The temperature in 11073-20601 FLOAT-Type format.
donalm 0:701da26ee5cb 197 */
donalm 0:701da26ee5cb 198 uint32_t quick_ieee11073_from_float(float temperature)
donalm 0:701da26ee5cb 199 {
donalm 0:701da26ee5cb 200 uint8_t exponent = 0xFF; //exponent is -1
donalm 0:701da26ee5cb 201 uint32_t mantissa = (uint32_t)(temperature*10);
donalm 0:701da26ee5cb 202
donalm 0:701da26ee5cb 203 return ( ((uint32_t)exponent) << 24) | mantissa;
donalm 2:f11df1469db2 204 }
donalm 2:f11df1469db2 205