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@35:c64495aac4d1, 2016-02-17 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Feb 17 22:39:00 2016 +0000
- Revision:
- 35:c64495aac4d1
- Parent:
- 34:f6d4a699a1ea
- Child:
- 36:5508506dda71
Run on TY51822r3 board with ACC sensor (LIS3DH)
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 | 35:c64495aac4d1 | 24 | * Revised: Feburary 18th, 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 | 35:c64495aac4d1 | 37 | #define NOT_USE_ACC 1 |
kenjiArai | 35:c64495aac4d1 | 38 | #define CHK_ACC 0 |
kenjiArai | 35:c64495aac4d1 | 39 | #define NEED_CONSOLE_OUTPUT 0 |
kenjiArai | 35:c64495aac4d1 | 40 | * STEP2 |
kenjiArai | 35:c64495aac4d1 | 41 | * If you equiped the LIS3DH Acc sensor, please check ACC data using folloing definition. |
kenjiArai | 35:c64495aac4d1 | 42 | #define NOT_USE_ACC 0 |
kenjiArai | 35:c64495aac4d1 | 43 | #define CHK_ACC 1 |
kenjiArai | 35:c64495aac4d1 | 44 | #define NEED_CONSOLE_OUTPUT 1 |
kenjiArai | 35:c64495aac4d1 | 45 | * STEP3 |
kenjiArai | 35:c64495aac4d1 | 46 | * This is a final setup without no debug information. |
kenjiArai | 35:c64495aac4d1 | 47 | #define NOT_USE_ACC 0 |
kenjiArai | 35:c64495aac4d1 | 48 | #define CHK_ACC 0 |
kenjiArai | 35:c64495aac4d1 | 49 | #define NEED_CONSOLE_OUTPUT 0 |
kenjiArai | 35:c64495aac4d1 | 50 | * |
kenjiArai | 35:c64495aac4d1 | 51 | */ |
kenjiArai | 35:c64495aac4d1 | 52 | |
kenjiArai | 35:c64495aac4d1 | 53 | // Include --------------------------------------------------------------------------------------- |
screamer | 0:c04d932e96c9 | 54 | #include "mbed.h" |
kenjiArai | 35:c64495aac4d1 | 55 | #include "BLE.h" |
andresag | 34:f6d4a699a1ea | 56 | #include "EddystoneService.h" |
kenjiArai | 35:c64495aac4d1 | 57 | #include "LIS3DH.h" |
andresag | 34:f6d4a699a1ea | 58 | |
kenjiArai | 35:c64495aac4d1 | 59 | // Definition ------------------------------------------------------------------------------------ |
kenjiArai | 35:c64495aac4d1 | 60 | #define NOT_USE_ACC 0 |
kenjiArai | 35:c64495aac4d1 | 61 | #define CHK_ACC 0 |
kenjiArai | 35:c64495aac4d1 | 62 | #define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console; |
kenjiArai | 35:c64495aac4d1 | 63 | * it will have an impact on code-size and power consumption. */ |
kenjiArai | 35:c64495aac4d1 | 64 | |
kenjiArai | 35:c64495aac4d1 | 65 | #if NEED_CONSOLE_OUTPUT |
kenjiArai | 35:c64495aac4d1 | 66 | #define DEBUG(...) { printf(__VA_ARGS__); } |
kenjiArai | 35:c64495aac4d1 | 67 | #else |
kenjiArai | 35:c64495aac4d1 | 68 | #define DEBUG(...) /* nothing */ |
kenjiArai | 35:c64495aac4d1 | 69 | #endif /* #if NEED_CONSOLE_OUTPUT */ |
kenjiArai | 35:c64495aac4d1 | 70 | |
kenjiArai | 35:c64495aac4d1 | 71 | // Object ---------------------------------------------------------------------------------------- |
kenjiArai | 35:c64495aac4d1 | 72 | DigitalOut CHG_LED(LED1); |
kenjiArai | 35:c64495aac4d1 | 73 | I2C i2c(I2C_SDA0, I2C_SCL0); // SDA, SCL |
kenjiArai | 35:c64495aac4d1 | 74 | LIS3DH acc(i2c,LIS3DH_G_CHIP_ADDR,LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_2G); |
kenjiArai | 35:c64495aac4d1 | 75 | |
kenjiArai | 35:c64495aac4d1 | 76 | // RAM ------------------------------------------------------------------------------------------- |
andresag | 34:f6d4a699a1ea | 77 | EddystoneService *eddyServicePtr; |
screamer | 0:c04d932e96c9 | 78 | |
kenjiArai | 35:c64495aac4d1 | 79 | // ROM / Constant data --------------------------------------------------------------------------- |
kenjiArai | 35:c64495aac4d1 | 80 | |
kenjiArai | 35:c64495aac4d1 | 81 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 35:c64495aac4d1 | 82 | |
kenjiArai | 35:c64495aac4d1 | 83 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 35:c64495aac4d1 | 84 | // Control Program |
kenjiArai | 35:c64495aac4d1 | 85 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 35:c64495aac4d1 | 86 | #if (NOT_USE_ACC == 0) |
kenjiArai | 35:c64495aac4d1 | 87 | int8_t check_dice(void){ |
kenjiArai | 35:c64495aac4d1 | 88 | float fa[3]; // Acc 0:X, 1:Y, 2:Z |
kenjiArai | 35:c64495aac4d1 | 89 | |
kenjiArai | 35:c64495aac4d1 | 90 | acc.read_data(fa); |
kenjiArai | 35:c64495aac4d1 | 91 | DEBUG("acc:%4.3f\r\n", fa[0]); |
kenjiArai | 35:c64495aac4d1 | 92 | if (fa[0] > 6.0f){ return 2;} |
kenjiArai | 35:c64495aac4d1 | 93 | if (fa[0] < -6.0f){ return 5;} |
kenjiArai | 35:c64495aac4d1 | 94 | if (fa[1] > 6.0f){ return 4;} |
kenjiArai | 35:c64495aac4d1 | 95 | if (fa[1] < -6.0f){ return 3;} |
kenjiArai | 35:c64495aac4d1 | 96 | if (fa[2] > 6.0f){ return 1;} |
kenjiArai | 35:c64495aac4d1 | 97 | if (fa[2] < -6.0f){ return 6;} |
kenjiArai | 35:c64495aac4d1 | 98 | return 0; |
kenjiArai | 35:c64495aac4d1 | 99 | } |
kenjiArai | 35:c64495aac4d1 | 100 | #else |
kenjiArai | 35:c64495aac4d1 | 101 | int8_t check_dice(void){ |
kenjiArai | 35:c64495aac4d1 | 102 | return 1; |
kenjiArai | 35:c64495aac4d1 | 103 | } |
kenjiArai | 35:c64495aac4d1 | 104 | #endif // (NOT_USE_ACC == 0) |
kenjiArai | 35:c64495aac4d1 | 105 | |
kenjiArai | 35:c64495aac4d1 | 106 | void onBleInitError(BLE::InitializationCompleteCallbackContext* initContext){ |
kenjiArai | 35:c64495aac4d1 | 107 | // Initialization error handling goes here... |
andresag | 34:f6d4a699a1ea | 108 | (void) initContext; |
andresag | 34:f6d4a699a1ea | 109 | } |
mbedAustin | 30:6c2db8bf5b17 | 110 | |
kenjiArai | 35:c64495aac4d1 | 111 | void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext){ |
andresag | 34:f6d4a699a1ea | 112 | BLE &ble = initContext->ble; |
andresag | 34:f6d4a699a1ea | 113 | ble_error_t error = initContext->error; |
andresag | 34:f6d4a699a1ea | 114 | |
andresag | 34:f6d4a699a1ea | 115 | if (error != BLE_ERROR_NONE) { |
andresag | 34:f6d4a699a1ea | 116 | onBleInitError(initContext); |
andresag | 34:f6d4a699a1ea | 117 | return; |
andresag | 34:f6d4a699a1ea | 118 | } |
kenjiArai | 35:c64495aac4d1 | 119 | // Set UID and TLM frame data |
kenjiArai | 35:c64495aac4d1 | 120 | const UIDNamespaceID_t uidNamespaceID = |
kenjiArai | 35:c64495aac4d1 | 121 | {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}; |
kenjiArai | 35:c64495aac4d1 | 122 | const UIDInstanceID_t uidInstanceID = |
kenjiArai | 35:c64495aac4d1 | 123 | {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}; |
andresag | 34:f6d4a699a1ea | 124 | uint8_t tlmVersion = 0x00; |
andresag | 34:f6d4a699a1ea | 125 | |
kenjiArai | 35:c64495aac4d1 | 126 | // Initialize a EddystoneBeaconConfig service |
kenjiArai | 35:c64495aac4d1 | 127 | // Values for ADV packets related to firmware levels, calibrated based on measured values at 1m |
kenjiArai | 35:c64495aac4d1 | 128 | // static const PowerLevels_t defaultAdvPowerLevels = {-47, -33, -21, -13}; |
kenjiArai | 35:c64495aac4d1 | 129 | static const PowerLevels_t defaultAdvPowerLevels = {-87, -73, -61, -53}; |
kenjiArai | 35:c64495aac4d1 | 130 | // Values for radio power levels, provided by manufacturer. |
kenjiArai | 35:c64495aac4d1 | 131 | // static const PowerLevels_t radioPowerLevels = {-30, -16, -4, 4}; |
kenjiArai | 35:c64495aac4d1 | 132 | static const PowerLevels_t radioPowerLevels = {-60, -46, -34, -26}; |
kenjiArai | 35:c64495aac4d1 | 133 | eddyServicePtr = new EddystoneService(ble, defaultAdvPowerLevels, radioPowerLevels); |
kenjiArai | 35:c64495aac4d1 | 134 | // created short cut web addres by http://bitly.oshiire.org/ |
andresag | 34:f6d4a699a1ea | 135 | |
kenjiArai | 35:c64495aac4d1 | 136 | switch (check_dice()){ |
kenjiArai | 35:c64495aac4d1 | 137 | case 1: |
kenjiArai | 35:c64495aac4d1 | 138 | eddyServicePtr->setURLData("http://bit.ly/1oJh91B"); // Switch sience(mbed) |
kenjiArai | 35:c64495aac4d1 | 139 | break; |
kenjiArai | 35:c64495aac4d1 | 140 | case 2: |
kenjiArai | 35:c64495aac4d1 | 141 | eddyServicePtr->setURLData("http://bit.ly/1oJhP7g"); // switch sience(HP) |
kenjiArai | 35:c64495aac4d1 | 142 | break; |
kenjiArai | 35:c64495aac4d1 | 143 | case 3: |
kenjiArai | 35:c64495aac4d1 | 144 | eddyServicePtr->setURLData("http://bit.ly/1VvuCVr"); // Taiyo Yuden BLE |
kenjiArai | 35:c64495aac4d1 | 145 | break; |
kenjiArai | 35:c64495aac4d1 | 146 | case 4: |
kenjiArai | 35:c64495aac4d1 | 147 | eddyServicePtr->setURLData("http://bit.ly/1Vvtp0l"); // Taiyo Yuden |
kenjiArai | 35:c64495aac4d1 | 148 | break; |
kenjiArai | 35:c64495aac4d1 | 149 | case 5: |
kenjiArai | 35:c64495aac4d1 | 150 | eddyServicePtr->setURLData("http://bit.ly/1Vvt51J"); // JH1PJL(mbed) |
kenjiArai | 35:c64495aac4d1 | 151 | break; |
kenjiArai | 35:c64495aac4d1 | 152 | case 6: |
kenjiArai | 35:c64495aac4d1 | 153 | eddyServicePtr->setURLData("http://bit.ly/1VvteT0"); // JH1PJL(HP) |
kenjiArai | 35:c64495aac4d1 | 154 | break; |
kenjiArai | 35:c64495aac4d1 | 155 | case 0: |
kenjiArai | 35:c64495aac4d1 | 156 | default: |
kenjiArai | 35:c64495aac4d1 | 157 | eddyServicePtr->setURLData("http://mbed.org"); |
kenjiArai | 35:c64495aac4d1 | 158 | break; |
kenjiArai | 35:c64495aac4d1 | 159 | } |
andresag | 34:f6d4a699a1ea | 160 | eddyServicePtr->setUIDData(&uidNamespaceID, &uidInstanceID); |
andresag | 34:f6d4a699a1ea | 161 | eddyServicePtr->setTLMData(tlmVersion); |
kenjiArai | 35:c64495aac4d1 | 162 | eddyServicePtr->startBeaconService(5, 5, 5); // Start Eddystone in config mode |
mbedAustin | 30:6c2db8bf5b17 | 163 | } |
screamer | 0:c04d932e96c9 | 164 | |
kenjiArai | 35:c64495aac4d1 | 165 | #if (CHK_ACC == 0) |
kenjiArai | 35:c64495aac4d1 | 166 | int main(void){ |
kenjiArai | 35:c64495aac4d1 | 167 | uint8_t old_dice; |
kenjiArai | 35:c64495aac4d1 | 168 | |
kenjiArai | 35:c64495aac4d1 | 169 | CHG_LED = 1; |
andresag | 34:f6d4a699a1ea | 170 | BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE); |
andresag | 34:f6d4a699a1ea | 171 | ble.init(bleInitComplete); |
kenjiArai | 35:c64495aac4d1 | 172 | while (ble.hasInitialized() == false){;} |
kenjiArai | 35:c64495aac4d1 | 173 | old_dice = check_dice(); // set initial value |
kenjiArai | 35:c64495aac4d1 | 174 | wait(0.5); |
kenjiArai | 35:c64495aac4d1 | 175 | CHG_LED = 0; |
kenjiArai | 35:c64495aac4d1 | 176 | while (true) { |
kenjiArai | 35:c64495aac4d1 | 177 | ble.waitForEvent(); |
kenjiArai | 35:c64495aac4d1 | 178 | if (old_dice != check_dice()){ |
kenjiArai | 35:c64495aac4d1 | 179 | SCB->AIRCR = 0x05fa0004; // System RESET!![ |
kenjiArai | 35:c64495aac4d1 | 180 | // Not come here (Just in case) |
kenjiArai | 35:c64495aac4d1 | 181 | deepsleep(); |
kenjiArai | 35:c64495aac4d1 | 182 | while(true){ wait(100);} |
kenjiArai | 35:c64495aac4d1 | 183 | } |
kenjiArai | 35:c64495aac4d1 | 184 | } |
kenjiArai | 35:c64495aac4d1 | 185 | } |
kenjiArai | 35:c64495aac4d1 | 186 | #else |
kenjiArai | 35:c64495aac4d1 | 187 | #if (NOY_USE_ACC == 1) |
kenjiArai | 35:c64495aac4d1 | 188 | #error "Please set CHK_ACC = 0) |
kenjiArai | 35:c64495aac4d1 | 189 | #else |
kenjiArai | 35:c64495aac4d1 | 190 | int main(void){ |
kenjiArai | 35:c64495aac4d1 | 191 | float fa[3]; |
mbedAustin | 32:41840b78597e | 192 | |
screamer | 0:c04d932e96c9 | 193 | while (true) { |
kenjiArai | 35:c64495aac4d1 | 194 | acc.read_data(fa); |
kenjiArai | 35:c64495aac4d1 | 195 | printf("acc:x=%4.2f,y=%4.2f,z=%4.2f\r\n",fa[0],fa[1],fa[2]); |
kenjiArai | 35:c64495aac4d1 | 196 | wait(0.5); |
screamer | 0:c04d932e96c9 | 197 | } |
screamer | 0:c04d932e96c9 | 198 | } |
kenjiArai | 35:c64495aac4d1 | 199 | #endif // (NOY_USE_ACC == 1) |
kenjiArai | 35:c64495aac4d1 | 200 | #endif // (CHK_ACC == 0) |