Kenji Arai / Mbed 2 deprecated BLE_Temp_Vdd_via_UART_TY

Dependencies:   BLE_API mbed nRF51822 nRF51_Vdd

Fork of BLE_Temp_Vdd_via_UART by Kenji Arai

Committer:
kenjiArai
Date:
Tue Feb 09 12:21:41 2016 +0000
Revision:
11:da2dc9a847a8
Parent:
10:38852d243fb2
Child:
12:4d8a543135be
BLE_Temp_Vdd_via_UART program only for TY(TAIYO YUDEN) module (Xtal = 32MHz)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:2130d7f559dc 1 /* mbed Microcontroller Library
rgrover1 0:2130d7f559dc 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 0:2130d7f559dc 3 *
rgrover1 0:2130d7f559dc 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 0:2130d7f559dc 5 * you may not use this file except in compliance with the License.
rgrover1 0:2130d7f559dc 6 * You may obtain a copy of the License at
rgrover1 0:2130d7f559dc 7 *
rgrover1 0:2130d7f559dc 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 0:2130d7f559dc 9 *
rgrover1 0:2130d7f559dc 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 0:2130d7f559dc 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 0:2130d7f559dc 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 0:2130d7f559dc 13 * See the License for the specific language governing permissions and
rgrover1 0:2130d7f559dc 14 * limitations under the License.
rgrover1 0:2130d7f559dc 15 */
rgrover1 0:2130d7f559dc 16
kenjiArai 10:38852d243fb2 17 /*
kenjiArai 10:38852d243fb2 18 * January 6th, 2016 Modified by Kenji Arai
kenjiArai 11:da2dc9a847a8 19 * Feburary 9th, 2016
kenjiArai 10:38852d243fb2 20 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 10:38852d243fb2 21 * http://mbed.org/users/kenjiArai/
kenjiArai 10:38852d243fb2 22 *
kenjiArai 10:38852d243fb2 23 * Original:
kenjiArai 10:38852d243fb2 24 * 1) BLE_UARTConsole
kenjiArai 10:38852d243fb2 25 * https://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_UARTConsole/
kenjiArai 10:38852d243fb2 26 * 2) BLE_HTM_by_InTempSensr_pub
kenjiArai 10:38852d243fb2 27 * https://developer.mbed.org/users/takafuminaka/code/BLE_HTM_by_InTempSensr_pub/
kenjiArai 10:38852d243fb2 28 * Tanks Takafumi Naka san!
kenjiArai 10:38852d243fb2 29 * Tested Controller Device:
kenjiArai 10:38852d243fb2 30 * iPhone6 UART application in nRF Toolbox
kenjiArai 10:38852d243fb2 31 * https://itunes.apple.com/jp/app/nrf-toolbox/id820906058?mt=8
kenjiArai 10:38852d243fb2 32 * Please check data on "Show log" screen
kenjiArai 10:38852d243fb2 33 */
kenjiArai 10:38852d243fb2 34
kenjiArai 10:38852d243fb2 35 // Include ---------------------------------------------------------------------------------------
rgrover1 5:2607923acfa1 36 #include <string.h>
rgrover1 0:2130d7f559dc 37 #include "mbed.h"
rgrover1 8:f9bf6d403cde 38 #include "BLE.h"
kenjiArai 10:38852d243fb2 39 #include "UARTService.h"
kenjiArai 10:38852d243fb2 40 #include "nrf_soc.h" // for internal Thermo sensoer
kenjiArai 10:38852d243fb2 41 #include "nRF51_Vdd.h" // Read nRF51 Vdd voltage
rgrover1 0:2130d7f559dc 42
kenjiArai 10:38852d243fb2 43 // Definition ------------------------------------------------------------------------------------
kenjiArai 11:da2dc9a847a8 44 #define NEED_CONSOLE_OUTPUT 0 // Set this if you need debug messages on the console;
kenjiArai 11:da2dc9a847a8 45
kenjiArai 11:da2dc9a847a8 46 #if NEED_CONSOLE_OUTPUT
kenjiArai 11:da2dc9a847a8 47 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
kenjiArai 11:da2dc9a847a8 48 #else
kenjiArai 11:da2dc9a847a8 49 #define DEBUG(...) /* nothing */
kenjiArai 11:da2dc9a847a8 50 #endif
rgrover1 0:2130d7f559dc 51
kenjiArai 10:38852d243fb2 52 // Object ----------------------------------------------------------------------------------------
kenjiArai 10:38852d243fb2 53 BLE ble;
kenjiArai 10:38852d243fb2 54 UARTService *uart;
kenjiArai 11:da2dc9a847a8 55 nRF51_Vdd vdd(3.0f, 2.2f); // CR2032 3V-2.2V (http://rbs.ta36.com/?p=20398#CR2032)
kenjiArai 11:da2dc9a847a8 56 #if NEED_CONSOLE_OUTPUT
kenjiArai 11:da2dc9a847a8 57 Serial pc(USBTX,USBRX);
kenjiArai 11:da2dc9a847a8 58 #endif
kenjiArai 10:38852d243fb2 59
kenjiArai 10:38852d243fb2 60 // RAM -------------------------------------------------------------------------------------------
kenjiArai 10:38852d243fb2 61 static volatile bool triggerSensorPolling = false;
rgrover1 0:2130d7f559dc 62
kenjiArai 10:38852d243fb2 63 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 11:da2dc9a847a8 64 const char *deviceName = "mbedTY";
kenjiArai 10:38852d243fb2 65
kenjiArai 10:38852d243fb2 66 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 10:38852d243fb2 67 void Update_Values(void);
rgrover1 0:2130d7f559dc 68
kenjiArai 10:38852d243fb2 69 //-------------------------------------------------------------------------------------------------
kenjiArai 10:38852d243fb2 70 // Control Program
kenjiArai 10:38852d243fb2 71 //-------------------------------------------------------------------------------------------------
kenjiArai 10:38852d243fb2 72 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){
kenjiArai 10:38852d243fb2 73 if (uart){
kenjiArai 10:38852d243fb2 74 uart->writeString("Disconnected!\r\n");
kenjiArai 10:38852d243fb2 75 uart->writeString("Restarting the advertising process\r\n");
kenjiArai 10:38852d243fb2 76 }
rgrover1 0:2130d7f559dc 77 ble.startAdvertising();
rgrover1 0:2130d7f559dc 78 }
rgrover1 0:2130d7f559dc 79
kenjiArai 10:38852d243fb2 80 void periodicCallback(void){
kenjiArai 10:38852d243fb2 81 triggerSensorPolling = true;
rgrover1 0:2130d7f559dc 82 }
rgrover1 0:2130d7f559dc 83
kenjiArai 10:38852d243fb2 84 int main(void){
kenjiArai 10:38852d243fb2 85 // Set priodic interrupt
rgrover1 0:2130d7f559dc 86 Ticker ticker;
kenjiArai 10:38852d243fb2 87 ticker.attach(periodicCallback, 5);
kenjiArai 10:38852d243fb2 88 // Opening screen
kenjiArai 11:da2dc9a847a8 89 DEBUG("\r\nInitialising the nRF51822\r\n");
kenjiArai 11:da2dc9a847a8 90 DEBUG("Temperature and CPU Vdd voltage via UART service\r\n");
kenjiArai 10:38852d243fb2 91 // setup BLE
rgrover1 0:2130d7f559dc 92 ble.init();
kenjiArai 10:38852d243fb2 93 ble.setDeviceName((const uint8_t *)deviceName);
rgrover1 0:2130d7f559dc 94 ble.onDisconnection(disconnectionCallback);
kenjiArai 10:38852d243fb2 95 // BLE Uart
rgrover1 5:2607923acfa1 96 uart = new UARTService(ble);
kenjiArai 10:38852d243fb2 97 // setup advertising
kenjiArai 11:da2dc9a847a8 98 ble.gap().setTxPower(-40);
rgrover1 0:2130d7f559dc 99 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
rgrover1 0:2130d7f559dc 100 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
rgrover1 0:2130d7f559dc 101 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
kenjiArai 10:38852d243fb2 102 (const uint8_t *)deviceName,
kenjiArai 10:38852d243fb2 103 strlen(deviceName));
rgrover1 0:2130d7f559dc 104 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
kenjiArai 10:38852d243fb2 105 (const uint8_t *)UARTServiceUUID_reversed,
kenjiArai 10:38852d243fb2 106 sizeof(UARTServiceUUID_reversed));
rgrover1 0:2130d7f559dc 107 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
rgrover1 0:2130d7f559dc 108 ble.startAdvertising();
kenjiArai 10:38852d243fb2 109 while (true){
kenjiArai 10:38852d243fb2 110 if (triggerSensorPolling){
kenjiArai 10:38852d243fb2 111 triggerSensorPolling = false;
kenjiArai 10:38852d243fb2 112 Update_Values();
kenjiArai 10:38852d243fb2 113 } else {
kenjiArai 10:38852d243fb2 114 ble.waitForEvent();
kenjiArai 10:38852d243fb2 115 }
rgrover1 0:2130d7f559dc 116 }
rgrover1 0:2130d7f559dc 117 }
kenjiArai 10:38852d243fb2 118
kenjiArai 11:da2dc9a847a8 119 void fill_space(char *bf){
kenjiArai 11:da2dc9a847a8 120 uint8_t n;
kenjiArai 11:da2dc9a847a8 121
kenjiArai 11:da2dc9a847a8 122 n = strlen(bf);
kenjiArai 11:da2dc9a847a8 123 bf += n;
kenjiArai 11:da2dc9a847a8 124 for (uint8_t i = n; i <= 18; bf++, i++){
kenjiArai 11:da2dc9a847a8 125 *bf = ' ';
kenjiArai 11:da2dc9a847a8 126 }
kenjiArai 11:da2dc9a847a8 127 *bf = '.';
kenjiArai 11:da2dc9a847a8 128 *(bf + 1) = 0;
kenjiArai 11:da2dc9a847a8 129 }
kenjiArai 11:da2dc9a847a8 130
kenjiArai 10:38852d243fb2 131 void Update_Values(void){
kenjiArai 10:38852d243fb2 132 char buf[32];
kenjiArai 10:38852d243fb2 133 int32_t p_temp;
kenjiArai 10:38852d243fb2 134 float temperature;
kenjiArai 10:38852d243fb2 135
kenjiArai 10:38852d243fb2 136 // Update a temperature (inside nRF51822 chip)
kenjiArai 10:38852d243fb2 137 sd_temp_get(&p_temp);
kenjiArai 11:da2dc9a847a8 138 // -16.0f is offset vale for chip die temp to ambient temp (depend on your board)
kenjiArai 11:da2dc9a847a8 139 temperature = float(p_temp) / 4; // Original = float(p_temp)/4.0f - 16.0f;
kenjiArai 10:38852d243fb2 140 // 12 89
kenjiArai 11:da2dc9a847a8 141 sprintf(buf,"T:%+4.1fdegC", temperature);
kenjiArai 11:da2dc9a847a8 142 fill_space(buf);
kenjiArai 10:38852d243fb2 143 if (uart){
kenjiArai 10:38852d243fb2 144 uart->writeString(buf);
kenjiArai 10:38852d243fb2 145 }
kenjiArai 11:da2dc9a847a8 146 DEBUG("%s\b\r\n", buf);
kenjiArai 10:38852d243fb2 147 // Update a Vdd voltage
kenjiArai 10:38852d243fb2 148 // 01234 9
kenjiArai 11:da2dc9a847a8 149 sprintf(buf,"Vdd:%3.2fV", vdd.read_real_value());
kenjiArai 11:da2dc9a847a8 150 fill_space(buf);
kenjiArai 10:38852d243fb2 151 if (uart){
kenjiArai 10:38852d243fb2 152 uart->writeString(buf);
kenjiArai 10:38852d243fb2 153 }
kenjiArai 11:da2dc9a847a8 154 DEBUG("%s\b\r\n", buf);
kenjiArai 10:38852d243fb2 155 // 123456789 0
kenjiArai 11:da2dc9a847a8 156 sprintf(buf,"Charge:%d%%", vdd.read());
kenjiArai 11:da2dc9a847a8 157 fill_space(buf);
kenjiArai 10:38852d243fb2 158 if (uart){
kenjiArai 10:38852d243fb2 159 uart->writeString(buf);
kenjiArai 10:38852d243fb2 160 }
kenjiArai 11:da2dc9a847a8 161 DEBUG("%s\b\r\n", buf);
kenjiArai 10:38852d243fb2 162 }