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
main.cpp@37:ea459e6c6a35, 2016-06-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |