Geo beacon for VF.
Dependencies: MMA8452 aconno_bsp adc52832_common
Diff: main.cpp
- Revision:
- 21:10c3b8176be0
- Parent:
- 19:abf14a5ada93
- Child:
- 22:8d106fd5fa84
--- a/main.cpp Tue Aug 22 07:35:03 2017 +0000 +++ b/main.cpp Mon Aug 28 14:12:10 2017 +0000 @@ -21,9 +21,9 @@ #define DEBUG_CONNECTION (0) #define USE_ACC (0) -#define SLEEP_TIME_S (3.0) /* Sleep time (in s) */ -#define ADV_TIMER_TIME_S (3.0) /* Advertising time (in s) */ -#define SCAN_TIMER_TIME_S (1.0) /* Scanning time (in s) */ +#define SLEEP_TIME_S (5.0) /* Sleep time (in s) */ +#define ADV_TIMER_TIME_S (5.0) /* Advertising time (in s) */ +#define SCAN_TIMER_TIME_S (5.0) /* Scanning time (in s) */ #define FREE_TIME_S (0.1) /* Time between end of a scanning and sleep mode */ #define AWAKE_TIME_S (ADV_TIMER_TIME_S+SCAN_TIMER_TIME_S+FREE_TIME_S) /* Was 0.15 */ #define SHORT_SLEEP_TIME_S (0.5) /* Shorter sleep time (s) */ @@ -84,13 +84,14 @@ Ticker WakeSleepT; Ticker turnBuzzOffT; Ticker sleepChanger; -PwmOut buzzer(BUZZER); +//PwmOut buzzer(BUZZER); +NRF52_DigitalOut buzzer(BUZZER); #if USE_ACC DigitalOut accPower(p7); DigitalOut i2cPower(p5); InterruptIn accPulse(INT2_PIN); + Acc_MMA8452 acc(I2C_DATA, I2C_CLK, MMA8452_ADDRESS); #endif -Acc_MMA8452 acc(I2C_DATA, I2C_CLK, MMA8452_ADDRESS); BLE &ble = BLE::Instance(); ACKService<4> *ackServicePtr; @@ -105,8 +106,7 @@ #endif -void onConnectionCallback(const Gap::ConnectionCallbackParams_t *params){ - +void onConnectionCallback(const Gap::ConnectionCallbackParams_t *params){ #if DEBUG_CONNECTION scanLED = !scanLED; // Blue wait_ms(100); @@ -166,8 +166,8 @@ connectedLED = 1; wait_ms(100); #endif - buzzer.period(0.0009F); - buzzer.write(0.5F); + //buzzer.period(0.0009F); + //buzzer.write(0.5F); WakeSleepT.detach(); turnBuzzOffT.detach(); turnBuzzOffT.attach(TurnBuzzOff, BUZZ_TIME_S); @@ -217,12 +217,11 @@ ble.gap().getAddress(&temp_address_type, myMacAddress); ackServicePtr = new ACKService<4>(ble, init_values); ackServicePtr->updateMacAddress(myMacAddress); // Update MAC address + ble.gap().onDisconnection(disconnectionCallback); - ble.gap().onConnection(onConnectionCallback); // -->> Uncomment these two lines for shush-shush ble.gattServer().onDataWritten(onDataWrittenCallback); - /* setup advertising */ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)msd, MSD_SIZE); ble.gap().setAdvertisingInterval(ADV_INTERVAL); // --> Has to be at least 100ms! @@ -269,8 +268,6 @@ return 0; // There's no MSD in BLE advertisement data } for(i=0; i<6; i++){ - //if((params->advertisingData[0+i+4]) != myMacAddress[i]){ - //if(params->advertisingData[4] != myMacAddress[4]){ if(params->advertisingData[msdOffset + 3 + i] != myMacAddress[5-i]){ // myMacAddress[0] == 0x91 #if DEBUG_MAC for(i=0; i<10; i++){ @@ -307,8 +304,8 @@ if ((params->advertisingData[msdOffset+2]) == 0x00){ if(CheckMac(params, myMacAddress, msdOffset)){ //ble.gap().stopScan(); - buzzer.period(0.0009F); - buzzer.write(0.5F); + //buzzer.period(0.0009F); + //buzzer.write(0.5F); WakeSleepT.detach(); turnBuzzOffT.detach(); turnBuzzOffT.attach(TurnBuzzOff, BUZZ_TIME_S); @@ -330,11 +327,8 @@ * The function is called when ticker generates interrupt */ void TurnBuzzOff(void){ - buzzer.period(0.00F); - buzzer.write(0.0F); - NRF_PWM0->TASKS_STOP = 1; - NRF_PWM1->TASKS_STOP = 1; - NRF_PWM2->TASKS_STOP = 1; + //buzzer.period(0.00F); + //buzzer.write(0.0F); tempSleepTime = SHORT_SLEEP_TIME_S; turnBuzzOffT.detach(); WakeSleepT.detach(); @@ -343,7 +337,6 @@ } void startAdvertising(){ - NRF_PWM0->TASKS_SEQSTART[0] = 1; #if USE_ACC i2cPower = 1; #endif @@ -357,11 +350,8 @@ } else{ ble.gap().startAdvertising(); - buzzer.period(0.00F); - buzzer.write(0.0F); - NRF_PWM0->TASKS_STOP = 1; - NRF_PWM1->TASKS_STOP = 1; - NRF_PWM2->TASKS_STOP = 1; + //buzzer.period(0.00F); + //buzzer.write(0.0F); #if DEBUG advLED = 0; scanLED = 1; @@ -376,11 +366,8 @@ ble.gap().setScanParams(SCAN_INTERVAL, SCAN_WINDOW); ble.gap().setScanTimeout(SCAN_TIMER_TIME_S); ble.gap().startScan(advertisementCallback); - buzzer.period(0.00F); - buzzer.write(0.0F); - NRF_PWM0->TASKS_STOP = 1; - NRF_PWM1->TASKS_STOP = 1; - NRF_PWM2->TASKS_STOP = 1; + //buzzer.period(0.00F); + //buzzer.write(0.0F); #if DEBUG advLED = 1; scanLED = 0; @@ -414,11 +401,8 @@ } void GoToSleep(){ - buzzer.period(0.00F); - buzzer.write(0.0f); - NRF_PWM0->TASKS_STOP = 1; - NRF_PWM1->TASKS_STOP = 1; - NRF_PWM2->TASKS_STOP = 1; + //buzzer.period(0.00F); + //buzzer.write(0.0f); WakeSleepT.detach(); WakeSleepT.attach(WakeMeUp, tempSleepTime); ble.gap().stopAdvertising(); @@ -435,8 +419,8 @@ #if DEBUG_ACC int_led = !int_led; #endif - buzzer.period(0.0009F); - buzzer.write(0.5f); + //buzzer.period(0.0009F); + //buzzer.write(0.5f); } #endif @@ -447,8 +431,8 @@ connectedLED = 1; #endif - buzzer.period(0.0009F); - buzzer.write(0.0F); + //buzzer.period(0.0009F); + //buzzer.write(0.0F); #if USE_ACC accPower = 1; i2cPower = 1; @@ -465,7 +449,8 @@ } #endif - WakeSleepT.attach(GoToSleep, AWAKE_TIME_S); + //WakeSleepT.attach(GoToSleep, AWAKE_TIME_S); + GoToSleep(); ble.init(bleInitComplete); ble.gap().setTxPower(txPower); GapAdvertisingData postavke = GapAdvertisingData(); @@ -498,26 +483,11 @@ while(true){ if(sleepFlag){ - NRF_GPIO->PIN_CNF[31] = 0x00000003; - NRF_PWM0->TASKS_STOP = 1; - NRF_PWM1->TASKS_STOP = 1; - NRF_PWM2->TASKS_STOP = 1; - NRF_PPI->TASKS_CHG[0].DIS = 1; - NRF_PPI->TASKS_CHG[1].DIS = 1; - NRF_PPI->TASKS_CHG[2].DIS = 1; - NRF_PPI->TASKS_CHG[3].DIS = 1; - NRF_PPI->TASKS_CHG[4].DIS = 1; - NRF_GPIOTE->TASKS_CLR[0] = 1; - NRF_GPIOTE->TASKS_CLR[1] = 1; - NRF_GPIOTE->TASKS_CLR[2] = 1; - NRF_GPIOTE->TASKS_CLR[3] = 1; - NRF_GPIOTE->TASKS_CLR[4] = 1; - NRF_GPIOTE->TASKS_CLR[5] = 1; - NRF_GPIOTE->TASKS_CLR[6] = 1; - NRF_GPIOTE->TASKS_CLR[7] = 1; + //NRF_GPIO->PIN_CNF[31] = 0x00000002; #if USE_ACC i2cPower = 0; #endif + ble.waitForEvent(); __WFI(); } else{