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:
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?

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 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)