Run on TY51822r3 board with ACC sensor (LIS3DH or BMC050)

Dependencies:   BLE_API LIS3DH mbed nRF51822 BMC050 nRF51_LowPwr nRF51_Vdd

Fork of BLE_EddystoneBeacon_Service by Bluetooth Low Energy

Committer:
kenjiArai
Date:
Sat Jun 11 01:51:59 2016 +0000
Revision:
37:ea459e6c6a35
Parent:
36:5508506dda71
Added low power mode (use nRF51_LowPwr library) for reduce Idle Current

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:c04d932e96c9 1 /* mbed Microcontroller Library
mbedAustin 32:41840b78597e 2 * Copyright (c) 2006-2013 ARM Limited
screamer 0:c04d932e96c9 3 *
screamer 0:c04d932e96c9 4 * Licensed under the Apache License, Version 2.0 (the "License");
screamer 0:c04d932e96c9 5 * you may not use this file except in compliance with the License.
screamer 0:c04d932e96c9 6 * You may obtain a copy of the License at
screamer 0:c04d932e96c9 7 *
screamer 0:c04d932e96c9 8 * http://www.apache.org/licenses/LICENSE-2.0
screamer 0:c04d932e96c9 9 *
screamer 0:c04d932e96c9 10 * Unless required by applicable law or agreed to in writing, software
screamer 0:c04d932e96c9 11 * distributed under the License is distributed on an "AS IS" BASIS,
screamer 0:c04d932e96c9 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
screamer 0:c04d932e96c9 13 * See the License for the specific language governing permissions and
screamer 0:c04d932e96c9 14 * limitations under the License.
screamer 0:c04d932e96c9 15 */
screamer 0:c04d932e96c9 16
kenjiArai 35:c64495aac4d1 17 /*
kenjiArai 35:c64495aac4d1 18 * /////// Works well on Switch Science mbed TY51822r3 ///////
kenjiArai 35:c64495aac4d1 19 * Modified by Kenji Arai
kenjiArai 35:c64495aac4d1 20 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 35:c64495aac4d1 21 * http://mbed.org/users/kenjiArai/
kenjiArai 35:c64495aac4d1 22 *
kenjiArai 35:c64495aac4d1 23 * Started: Feburary 1st, 2016
kenjiArai 37:ea459e6c6a35 24 * Revised: June 8th, 2016
kenjiArai 35:c64495aac4d1 25 *
kenjiArai 35:c64495aac4d1 26 * Original:
kenjiArai 35:c64495aac4d1 27 * nRF51822_SimpleControls
kenjiArai 35:c64495aac4d1 28 * https://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_EddystoneBeacon_Service/
kenjiArai 35:c64495aac4d1 29 * Tested Controller Device:
kenjiArai 35:c64495aac4d1 30 * iPhone6 Physical Web (PhyWeb) By Viet Hoa Dinh
kenjiArai 35:c64495aac4d1 31 * https://itunes.apple.com/us/app/physical-web/id927653608?mt=8
kenjiArai 35:c64495aac4d1 32 */
kenjiArai 35:c64495aac4d1 33
kenjiArai 35:c64495aac4d1 34 /*
kenjiArai 35:c64495aac4d1 35 * STEP1
kenjiArai 35:c64495aac4d1 36 * If you just got the board, plese set following difinition and not connect all of pins.
kenjiArai 36:5508506dda71 37 #define USE_ACC 0
kenjiArai 35:c64495aac4d1 38 #define CHK_ACC 0
kenjiArai 36:5508506dda71 39 #define USE_DEVICE_SERIAL 0 // in nRF51_disable_peripheral.h
kenjiArai 36:5508506dda71 40 #define ACC_DEVIC x // No effect
kenjiArai 35:c64495aac4d1 41 * STEP2
kenjiArai 36:5508506dda71 42 * If you equiped the Acc sensor, please check ACC data using folloing definition.
kenjiArai 36:5508506dda71 43 #define USE_ACC 1
kenjiArai 35:c64495aac4d1 44 #define CHK_ACC 1
kenjiArai 36:5508506dda71 45 #define USE_DEVICE_SERIAL 1 // in nRF51_disable_peripheral.h
kenjiArai 36:5508506dda71 46 #define ACC_DEVIC 0 or 1 // depends on your sensor device
kenjiArai 35:c64495aac4d1 47 * STEP3
kenjiArai 35:c64495aac4d1 48 * This is a final setup without no debug information.
kenjiArai 36:5508506dda71 49 #define USE_ACC 1
kenjiArai 35:c64495aac4d1 50 #define CHK_ACC 0
kenjiArai 36:5508506dda71 51 #define USE_DEVICE_SERIAL 0 // in nRF51_disable_peripheral.h
kenjiArai 36:5508506dda71 52 #define ACC_DEVIC 0 or 1 // depends on your sensor device
kenjiArai 35:c64495aac4d1 53 *
kenjiArai 35:c64495aac4d1 54 */
kenjiArai 35:c64495aac4d1 55
kenjiArai 37:ea459e6c6a35 56 #define ACC_DEVIC 0 // 0=LIS3DH, 1=BMC050
kenjiArai 36:5508506dda71 57
kenjiArai 35:c64495aac4d1 58 // Include ---------------------------------------------------------------------------------------
screamer 0:c04d932e96c9 59 #include "mbed.h"
kenjiArai 35:c64495aac4d1 60 #include "BLE.h"
andresag 34:f6d4a699a1ea 61 #include "EddystoneService.h"
kenjiArai 36:5508506dda71 62 #if ACC_DEVIC
kenjiArai 36:5508506dda71 63 #include "BMC050.h"
kenjiArai 36:5508506dda71 64 #else
kenjiArai 35:c64495aac4d1 65 #include "LIS3DH.h"
kenjiArai 36:5508506dda71 66 #endif // ACC_DEVIC
kenjiArai 36:5508506dda71 67 #include "nRF51_Vdd.h"
kenjiArai 36:5508506dda71 68 #include "nRF51_lowpwr.h"
andresag 34:f6d4a699a1ea 69
kenjiArai 35:c64495aac4d1 70 // Definition ------------------------------------------------------------------------------------
kenjiArai 37:ea459e6c6a35 71 #define USE_ACC 0 // if you equipped ACC sensor, please set 1
kenjiArai 37:ea459e6c6a35 72 #define CHK_ACC 0 // Ckeck ACC device itself
kenjiArai 36:5508506dda71 73
kenjiArai 36:5508506dda71 74 #define POWER_LEVEL 0 // 0,1,2
kenjiArai 35:c64495aac4d1 75
kenjiArai 36:5508506dda71 76 // Before using this function, please specify your program are used following functions or not.
kenjiArai 36:5508506dda71 77 #define USE_DEVICE_STDIO_MESSAGES 0 // printf
kenjiArai 36:5508506dda71 78 #define USE_DEVICE_SERIAL 0 // Serial or DEBUG & etc.
kenjiArai 37:ea459e6c6a35 79 #define USE_DEVICE_I2C 0 // Sensors with I2C, LCD, EEPROM, Driver chips & etc.
kenjiArai 36:5508506dda71 80 #define USE_DEVICE_SPI 0 // Sensors with SOI, LCD, EEPROM, Driver chips & etc.
kenjiArai 36:5508506dda71 81 #define USE_DEVICE_SPISLAVE 0 // Communication with master vis SPI
kenjiArai 36:5508506dda71 82 #define USE_DEVICE_PWMOUT 0 // PWM duty output, Serve & etc.
kenjiArai 36:5508506dda71 83 #define USE_DEVICE_ANALOGIN 0 // Analog adc
kenjiArai 36:5508506dda71 84
kenjiArai 36:5508506dda71 85 #if USE_DEVICE_STDIO_MESSAGES
kenjiArai 35:c64495aac4d1 86 #define DEBUG(...) { printf(__VA_ARGS__); }
kenjiArai 35:c64495aac4d1 87 #else
kenjiArai 36:5508506dda71 88 #define DEBUG(...)
kenjiArai 36:5508506dda71 89 #endif
kenjiArai 36:5508506dda71 90
kenjiArai 36:5508506dda71 91 #if USE_DEVICE_SERIAL
kenjiArai 36:5508506dda71 92 #define BAUD(x) pc.baud(x)
kenjiArai 36:5508506dda71 93 #define GETC(x) pc.getc(x)
kenjiArai 36:5508506dda71 94 #define PUTC(x) pc.putc(x)
kenjiArai 36:5508506dda71 95 #define PRINTF(...) { pc.printf(__VA_ARGS__); }
kenjiArai 36:5508506dda71 96 #define READABLE(x) pc.readable(x)
kenjiArai 36:5508506dda71 97 #define ATTACH(x,y) pc.attach(x, y);
kenjiArai 36:5508506dda71 98 #else
kenjiArai 36:5508506dda71 99 #define BAUD(x)
kenjiArai 36:5508506dda71 100 #define GETC(x) 'c'
kenjiArai 36:5508506dda71 101 #define PUTC(x)
kenjiArai 36:5508506dda71 102 #define PRINTF(...)
kenjiArai 36:5508506dda71 103 #define READABLE(x)
kenjiArai 36:5508506dda71 104 #define ATTACH(x,y)
kenjiArai 36:5508506dda71 105 #endif
kenjiArai 36:5508506dda71 106
kenjiArai 36:5508506dda71 107 // RAM -------------------------------------------------------------------------------------------
kenjiArai 36:5508506dda71 108 EddystoneService *eddyServicePtr;
kenjiArai 36:5508506dda71 109 Gap::Address_t my_mac;
kenjiArai 36:5508506dda71 110
kenjiArai 36:5508506dda71 111 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 36:5508506dda71 112 #if (USE_ACC == 1) && (ACC_DEVIC == 1)
kenjiArai 36:5508506dda71 113 const BMC050ACC_TypeDef acc_parameter = {
kenjiArai 36:5508506dda71 114 BMC050_A_G_CHIP_ADDR, // I2C Address
kenjiArai 36:5508506dda71 115 BMC050_FS_2G, // G-range slection
kenjiArai 36:5508506dda71 116 BMC050_BW_250, // Bandwidth
kenjiArai 36:5508506dda71 117 };
kenjiArai 36:5508506dda71 118
kenjiArai 36:5508506dda71 119 const BMC050MAG_TypeDef mag_parameter = {
kenjiArai 36:5508506dda71 120 BMC050_MAG_NOT_USED_ADDR,// Not use mag sensor
kenjiArai 36:5508506dda71 121 BMC050_DUMMY // dummy
kenjiArai 36:5508506dda71 122 };
kenjiArai 36:5508506dda71 123 #endif
kenjiArai 36:5508506dda71 124
kenjiArai 37:ea459e6c6a35 125 const nRF51_LOWPWR_TypeDef lowpwr_table =
kenjiArai 37:ea459e6c6a35 126 {
kenjiArai 37:ea459e6c6a35 127 #if USE_DEVICE_STDIO_MESSAGES
kenjiArai 37:ea459e6c6a35 128 true,
kenjiArai 37:ea459e6c6a35 129 #else
kenjiArai 37:ea459e6c6a35 130 false,
kenjiArai 37:ea459e6c6a35 131 #endif
kenjiArai 37:ea459e6c6a35 132 #if USE_DEVICE_SERIAL
kenjiArai 37:ea459e6c6a35 133 true,
kenjiArai 37:ea459e6c6a35 134 #else
kenjiArai 37:ea459e6c6a35 135 false,
kenjiArai 37:ea459e6c6a35 136 #endif
kenjiArai 37:ea459e6c6a35 137 #if USE_DEVICE_I2C
kenjiArai 37:ea459e6c6a35 138 true,
kenjiArai 37:ea459e6c6a35 139 #else
kenjiArai 37:ea459e6c6a35 140 false,
kenjiArai 37:ea459e6c6a35 141 #endif
kenjiArai 37:ea459e6c6a35 142 #if USE_DEVICE_SPI
kenjiArai 37:ea459e6c6a35 143 true,
kenjiArai 37:ea459e6c6a35 144 #else
kenjiArai 37:ea459e6c6a35 145 false,
kenjiArai 37:ea459e6c6a35 146 #endif
kenjiArai 37:ea459e6c6a35 147 #if USE_DEVICE_SPISLAVE
kenjiArai 37:ea459e6c6a35 148 true,
kenjiArai 37:ea459e6c6a35 149 #else
kenjiArai 37:ea459e6c6a35 150 false,
kenjiArai 37:ea459e6c6a35 151 #endif
kenjiArai 37:ea459e6c6a35 152 #if USE_DEVICE_PWMOUT
kenjiArai 37:ea459e6c6a35 153 true,
kenjiArai 37:ea459e6c6a35 154 #else
kenjiArai 37:ea459e6c6a35 155 false,
kenjiArai 37:ea459e6c6a35 156 #endif
kenjiArai 37:ea459e6c6a35 157 #if USE_DEVICE_ANALOGIN
kenjiArai 37:ea459e6c6a35 158 true
kenjiArai 37:ea459e6c6a35 159 #else
kenjiArai 37:ea459e6c6a35 160 false
kenjiArai 37:ea459e6c6a35 161 #endif
kenjiArai 37:ea459e6c6a35 162 };
kenjiArai 36:5508506dda71 163
kenjiArai 36:5508506dda71 164 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 36:5508506dda71 165 int8_t check_dice(void);
kenjiArai 36:5508506dda71 166 uint16_t update_vdd(uint16_t x);
kenjiArai 36:5508506dda71 167 uint16_t update_temp(uint16_t x);
kenjiArai 36:5508506dda71 168 void onBleInitError(BLE::InitializationCompleteCallbackContext* initContext);
kenjiArai 36:5508506dda71 169 void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext);
kenjiArai 35:c64495aac4d1 170
kenjiArai 35:c64495aac4d1 171 // Object ----------------------------------------------------------------------------------------
kenjiArai 35:c64495aac4d1 172 DigitalOut CHG_LED(LED1);
kenjiArai 36:5508506dda71 173 #if USE_DEVICE_SERIAL
kenjiArai 36:5508506dda71 174 Serial pc(USBTX, USBRX);
kenjiArai 36:5508506dda71 175 #endif // USE_DEVICE_SERIAL
kenjiArai 36:5508506dda71 176 nRF51_Vdd vdd(3.6f, 1.8f, ONLY4VDD);
kenjiArai 36:5508506dda71 177 #if USE_ACC == 1
kenjiArai 36:5508506dda71 178 I2C i2c(P0_3, P0_4); // SDA, SCL
kenjiArai 36:5508506dda71 179 #if ACC_DEVIC
kenjiArai 36:5508506dda71 180 BMC050 acc(i2c, &acc_parameter, &mag_parameter);
kenjiArai 36:5508506dda71 181 #else
kenjiArai 35:c64495aac4d1 182 LIS3DH acc(i2c,LIS3DH_G_CHIP_ADDR,LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_2G);
kenjiArai 36:5508506dda71 183 #endif // ACC_DEVIC
kenjiArai 36:5508506dda71 184 #endif // USE_ACC == 1
kenjiArai 35:c64495aac4d1 185
kenjiArai 35:c64495aac4d1 186 //-------------------------------------------------------------------------------------------------
kenjiArai 35:c64495aac4d1 187 // Control Program
kenjiArai 35:c64495aac4d1 188 //-------------------------------------------------------------------------------------------------
kenjiArai 35:c64495aac4d1 189 void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext){
andresag 34:f6d4a699a1ea 190 BLE &ble = initContext->ble;
andresag 34:f6d4a699a1ea 191 ble_error_t error = initContext->error;
andresag 34:f6d4a699a1ea 192
andresag 34:f6d4a699a1ea 193 if (error != BLE_ERROR_NONE) {
andresag 34:f6d4a699a1ea 194 onBleInitError(initContext);
andresag 34:f6d4a699a1ea 195 return;
andresag 34:f6d4a699a1ea 196 }
kenjiArai 35:c64495aac4d1 197 // Set UID and TLM frame data
kenjiArai 35:c64495aac4d1 198 const UIDNamespaceID_t uidNamespaceID =
kenjiArai 36:5508506dda71 199 {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
kenjiArai 35:c64495aac4d1 200 const UIDInstanceID_t uidInstanceID =
kenjiArai 36:5508506dda71 201 {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
andresag 34:f6d4a699a1ea 202 uint8_t tlmVersion = 0x00;
andresag 34:f6d4a699a1ea 203
kenjiArai 36:5508506dda71 204 Gap::AddressType_t my_mac_type;
kenjiArai 36:5508506dda71 205 ble.gap().getAddress(&my_mac_type, my_mac);
kenjiArai 36:5508506dda71 206 PRINTF(
kenjiArai 36:5508506dda71 207 " my_MAC %02x:%02x:%02x:%02x:%02x:%02x (%s)\r\n",
kenjiArai 36:5508506dda71 208 my_mac[5], my_mac[4], my_mac[3], my_mac[2], my_mac[1], my_mac[0],
kenjiArai 36:5508506dda71 209 (my_mac_type == Gap::ADDR_TYPE_PUBLIC) ? "public" : "random"
kenjiArai 36:5508506dda71 210 );
kenjiArai 36:5508506dda71 211 PRINTF(
kenjiArai 36:5508506dda71 212 " mac_board_? = {0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x};\r\n",
kenjiArai 36:5508506dda71 213 my_mac[0], my_mac[1], my_mac[2], my_mac[3], my_mac[4], my_mac[5]
kenjiArai 36:5508506dda71 214 );
kenjiArai 35:c64495aac4d1 215 // Initialize a EddystoneBeaconConfig service
kenjiArai 35:c64495aac4d1 216 // Values for ADV packets related to firmware levels, calibrated based on measured values at 1m
kenjiArai 36:5508506dda71 217 #if POWER_LEVEL == 0
kenjiArai 36:5508506dda71 218 static const PowerLevels_t defaultAdvPowerLevels = {-47, -33, -21, -13};
kenjiArai 36:5508506dda71 219 #elif POWER_LEVEL == 1
kenjiArai 35:c64495aac4d1 220 static const PowerLevels_t defaultAdvPowerLevels = {-87, -73, -61, -53};
kenjiArai 36:5508506dda71 221 #else
kenjiArai 36:5508506dda71 222 static const PowerLevels_t defaultAdvPowerLevels = {-107, -93, -81, -73};
kenjiArai 36:5508506dda71 223 #endif // POWER_LEVEL
kenjiArai 35:c64495aac4d1 224 // Values for radio power levels, provided by manufacturer.
kenjiArai 36:5508506dda71 225 #if POWER_LEVEL == 0
kenjiArai 36:5508506dda71 226 static const PowerLevels_t radioPowerLevels = {-30, -16, -4, 4};
kenjiArai 36:5508506dda71 227 #elif POWER_LEVEL == 1
kenjiArai 36:5508506dda71 228 static const PowerLevels_t radioPowerLevels = {-60, -46, -34, -26};
kenjiArai 36:5508506dda71 229 #else
kenjiArai 36:5508506dda71 230 static const PowerLevels_t radioPowerLevels = {-90, -76, -64, -56};
kenjiArai 36:5508506dda71 231 #endif // POWER_LEVEL
kenjiArai 35:c64495aac4d1 232 eddyServicePtr = new EddystoneService(ble, defaultAdvPowerLevels, radioPowerLevels);
kenjiArai 35:c64495aac4d1 233 // created short cut web addres by http://bitly.oshiire.org/
andresag 34:f6d4a699a1ea 234
kenjiArai 35:c64495aac4d1 235 switch (check_dice()){
kenjiArai 35:c64495aac4d1 236 case 1:
kenjiArai 35:c64495aac4d1 237 eddyServicePtr->setURLData("http://bit.ly/1oJh91B"); // Switch sience(mbed)
kenjiArai 35:c64495aac4d1 238 break;
kenjiArai 35:c64495aac4d1 239 case 2:
kenjiArai 35:c64495aac4d1 240 eddyServicePtr->setURLData("http://bit.ly/1oJhP7g"); // switch sience(HP)
kenjiArai 35:c64495aac4d1 241 break;
kenjiArai 35:c64495aac4d1 242 case 3:
kenjiArai 35:c64495aac4d1 243 eddyServicePtr->setURLData("http://bit.ly/1VvuCVr"); // Taiyo Yuden BLE
kenjiArai 35:c64495aac4d1 244 break;
kenjiArai 35:c64495aac4d1 245 case 4:
kenjiArai 35:c64495aac4d1 246 eddyServicePtr->setURLData("http://bit.ly/1Vvtp0l"); // Taiyo Yuden
kenjiArai 35:c64495aac4d1 247 break;
kenjiArai 35:c64495aac4d1 248 case 5:
kenjiArai 35:c64495aac4d1 249 eddyServicePtr->setURLData("http://bit.ly/1Vvt51J"); // JH1PJL(mbed)
kenjiArai 35:c64495aac4d1 250 break;
kenjiArai 35:c64495aac4d1 251 case 6:
kenjiArai 35:c64495aac4d1 252 eddyServicePtr->setURLData("http://bit.ly/1VvteT0"); // JH1PJL(HP)
kenjiArai 35:c64495aac4d1 253 break;
kenjiArai 35:c64495aac4d1 254 case 0:
kenjiArai 35:c64495aac4d1 255 default:
kenjiArai 35:c64495aac4d1 256 eddyServicePtr->setURLData("http://mbed.org");
kenjiArai 35:c64495aac4d1 257 break;
kenjiArai 35:c64495aac4d1 258 }
andresag 34:f6d4a699a1ea 259 eddyServicePtr->setUIDData(&uidNamespaceID, &uidInstanceID);
andresag 34:f6d4a699a1ea 260 eddyServicePtr->setTLMData(tlmVersion);
kenjiArai 36:5508506dda71 261 eddyServicePtr->onTLMBatteryVoltageUpdate(&update_vdd);
kenjiArai 36:5508506dda71 262 eddyServicePtr->onTLMBeaconTemperatureUpdate(&update_temp);
kenjiArai 35:c64495aac4d1 263 eddyServicePtr->startBeaconService(5, 5, 5); // Start Eddystone in config mode
mbedAustin 30:6c2db8bf5b17 264 }
screamer 0:c04d932e96c9 265
kenjiArai 35:c64495aac4d1 266 #if (CHK_ACC == 0)
kenjiArai 35:c64495aac4d1 267 int main(void){
kenjiArai 35:c64495aac4d1 268 uint8_t old_dice;
kenjiArai 36:5508506dda71 269
kenjiArai 35:c64495aac4d1 270 CHG_LED = 1;
kenjiArai 36:5508506dda71 271 LowPwr set_lowpwr(&lowpwr_table);
andresag 34:f6d4a699a1ea 272 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
andresag 34:f6d4a699a1ea 273 ble.init(bleInitComplete);
kenjiArai 35:c64495aac4d1 274 while (ble.hasInitialized() == false){;}
kenjiArai 35:c64495aac4d1 275 old_dice = check_dice(); // set initial value
kenjiArai 35:c64495aac4d1 276 wait(0.5);
kenjiArai 35:c64495aac4d1 277 CHG_LED = 0;
kenjiArai 35:c64495aac4d1 278 while (true) {
kenjiArai 35:c64495aac4d1 279 ble.waitForEvent();
kenjiArai 35:c64495aac4d1 280 if (old_dice != check_dice()){
kenjiArai 35:c64495aac4d1 281 SCB->AIRCR = 0x05fa0004; // System RESET!![
kenjiArai 35:c64495aac4d1 282 // Not come here (Just in case)
kenjiArai 35:c64495aac4d1 283 deepsleep();
kenjiArai 35:c64495aac4d1 284 while(true){ wait(100);}
kenjiArai 35:c64495aac4d1 285 }
kenjiArai 35:c64495aac4d1 286 }
kenjiArai 35:c64495aac4d1 287 }
kenjiArai 37:ea459e6c6a35 288 #else // (CHK_ACC == 0)
kenjiArai 36:5508506dda71 289 #if (USE_ACC == 0)
kenjiArai 36:5508506dda71 290 #error "Please set USE_ACC = 1)
kenjiArai 37:ea459e6c6a35 291 #else // (USE_ACC == 0)
kenjiArai 35:c64495aac4d1 292 int main(void){
kenjiArai 35:c64495aac4d1 293 float fa[3];
kenjiArai 36:5508506dda71 294
kenjiArai 37:ea459e6c6a35 295 #if (ACC_DEVIC == 1)
kenjiArai 36:5508506dda71 296 while (true){
kenjiArai 36:5508506dda71 297 if (acc.read_id_acc() == I_AM_BMC050_ACC){
kenjiArai 36:5508506dda71 298 PRINTF("I'm BMC050\r\n");
kenjiArai 36:5508506dda71 299 acc.read_data_acc(fa);
kenjiArai 36:5508506dda71 300 break;
kenjiArai 36:5508506dda71 301 } else {
kenjiArai 36:5508506dda71 302 PRINTF("I'm NOT BMC050\r\n");
kenjiArai 36:5508506dda71 303 }
kenjiArai 36:5508506dda71 304 wait(1.0);
kenjiArai 36:5508506dda71 305 }
kenjiArai 37:ea459e6c6a35 306 #endif // (ACC_DEVIC == 1)
kenjiArai 36:5508506dda71 307 LowPwr set_lowpwr(&lowpwr_table);
screamer 0:c04d932e96c9 308 while (true) {
kenjiArai 36:5508506dda71 309 #if ACC_DEVIC
kenjiArai 36:5508506dda71 310 acc.read_data_acc(fa);
kenjiArai 37:ea459e6c6a35 311 #else // ACC_DEVIC
kenjiArai 35:c64495aac4d1 312 acc.read_data(fa);
kenjiArai 37:ea459e6c6a35 313 #endif // ACC_DEVIC
kenjiArai 36:5508506dda71 314 PRINTF("acc:x=%+4.2f,y=%+4.2f,z=%+4.2f\r\n",fa[0],fa[1],fa[2]);
kenjiArai 35:c64495aac4d1 315 wait(0.5);
screamer 0:c04d932e96c9 316 }
screamer 0:c04d932e96c9 317 }
kenjiArai 36:5508506dda71 318 #endif // (USE_ACC == 0)
kenjiArai 35:c64495aac4d1 319 #endif // (CHK_ACC == 0)
kenjiArai 36:5508506dda71 320
kenjiArai 36:5508506dda71 321 #if (USE_ACC == 1)
kenjiArai 36:5508506dda71 322 int8_t check_dice(void){
kenjiArai 36:5508506dda71 323 float fa[3]; // Acc 0:X, 1:Y, 2:Z
kenjiArai 36:5508506dda71 324
kenjiArai 36:5508506dda71 325 #if ACC_DEVIC
kenjiArai 36:5508506dda71 326 acc.read_data_acc(fa);
kenjiArai 37:ea459e6c6a35 327 #else // ACC_DEVIC
kenjiArai 36:5508506dda71 328 acc.read_data(fa);
kenjiArai 37:ea459e6c6a35 329 #endif // ACC_DEVIC
kenjiArai 36:5508506dda71 330 //PRINTF("acc:%4.3f\r\n", fa[0]);
kenjiArai 36:5508506dda71 331 PRINTF("acc:x=%+4.2f,y=%+4.2f,z=%+4.2f\r\n",fa[0],fa[1],fa[2]);
kenjiArai 36:5508506dda71 332 if (fa[0] > 6.0f){ return 2;}
kenjiArai 36:5508506dda71 333 if (fa[0] < -6.0f){ return 5;}
kenjiArai 36:5508506dda71 334 if (fa[1] > 6.0f){ return 4;}
kenjiArai 36:5508506dda71 335 if (fa[1] < -6.0f){ return 3;}
kenjiArai 36:5508506dda71 336 if (fa[2] > 6.0f){ return 1;}
kenjiArai 36:5508506dda71 337 if (fa[2] < -6.0f){ return 6;}
kenjiArai 36:5508506dda71 338 return 0;
kenjiArai 36:5508506dda71 339 }
kenjiArai 37:ea459e6c6a35 340 #else // (USE_ACC == 1)
kenjiArai 36:5508506dda71 341 int8_t check_dice(void){
kenjiArai 36:5508506dda71 342 return 1;
kenjiArai 36:5508506dda71 343 }
kenjiArai 36:5508506dda71 344 #endif // (USE_ACC == 1)
kenjiArai 36:5508506dda71 345
kenjiArai 36:5508506dda71 346 void onBleInitError(BLE::InitializationCompleteCallbackContext* initContext){
kenjiArai 36:5508506dda71 347 // Initialization error handling goes here...
kenjiArai 36:5508506dda71 348 (void) initContext;
kenjiArai 36:5508506dda71 349 }
kenjiArai 36:5508506dda71 350
kenjiArai 36:5508506dda71 351 // Update Vdd data
kenjiArai 36:5508506dda71 352 uint16_t update_vdd(uint16_t x){
kenjiArai 36:5508506dda71 353 #if USE_DEVICE_SERIAL
kenjiArai 36:5508506dda71 354 float v;
kenjiArai 36:5508506dda71 355
kenjiArai 36:5508506dda71 356 v = vdd.read_real_value();
kenjiArai 36:5508506dda71 357 PRINTF("Vdd:%f[V]\r\n", v);
kenjiArai 36:5508506dda71 358 return (uint16_t)(v * 1000);
kenjiArai 37:ea459e6c6a35 359 #else //USE_DEVICE_SERIAL
kenjiArai 36:5508506dda71 360 return (uint16_t)(vdd.read_real_value() * 1000);
kenjiArai 36:5508506dda71 361 #endif // USE_DEVICE_SERIAL
kenjiArai 36:5508506dda71 362 }
kenjiArai 36:5508506dda71 363
kenjiArai 36:5508506dda71 364 // Update Temperature data
kenjiArai 36:5508506dda71 365 uint16_t update_temp(uint16_t x){
kenjiArai 36:5508506dda71 366 float t;
kenjiArai 36:5508506dda71 367 uint16_t temp;
kenjiArai 36:5508506dda71 368 int32_t p_temp;
kenjiArai 36:5508506dda71 369
kenjiArai 36:5508506dda71 370 NRF_TEMP->TASKS_START = 1;
kenjiArai 36:5508506dda71 371 while (NRF_TEMP->EVENTS_DATARDY == 0){;}
kenjiArai 36:5508506dda71 372 NRF_TEMP->EVENTS_DATARDY = 0;
kenjiArai 36:5508506dda71 373 if ((NRF_TEMP->TEMP & 0x00000200) != 0){
kenjiArai 36:5508506dda71 374 p_temp = (NRF_TEMP->TEMP | 0xFFFFFC00);
kenjiArai 36:5508506dda71 375 } else {
kenjiArai 36:5508506dda71 376 p_temp = NRF_TEMP->TEMP;
kenjiArai 36:5508506dda71 377 }
kenjiArai 36:5508506dda71 378 NRF_TEMP->TASKS_STOP = 1; /** Stop the temperature measurement. */
kenjiArai 36:5508506dda71 379 t = float(p_temp) / 4; // Original = float(p_temp)/4.0f - 16.0f;
kenjiArai 36:5508506dda71 380 #if USE_DEVICE_SERIAL
kenjiArai 36:5508506dda71 381 PRINTF("Chip temp: %+4.1f[degC]\r\n", t);
kenjiArai 37:ea459e6c6a35 382 #endif // USE_DEVICE_SERIAL
kenjiArai 36:5508506dda71 383 if ( t >= 0){
kenjiArai 36:5508506dda71 384 temp = (uint16_t)(t * 256);
kenjiArai 36:5508506dda71 385 } else {
kenjiArai 36:5508506dda71 386 temp = (uint16_t)(t * -256);
kenjiArai 36:5508506dda71 387 temp = 0x10000 - temp;
kenjiArai 36:5508506dda71 388 }
kenjiArai 36:5508506dda71 389 return temp;
kenjiArai 36:5508506dda71 390 }