Nora Vazbyte
/
99Problems-BLEAint1
app critics will say it's money, cash, toes
Diff: source/main.cpp
- Revision:
- 19:1998218bbb63
- Parent:
- 18:4cbd88c0a374
- Child:
- 21:36bd27c83b35
--- a/source/main.cpp Wed Nov 21 10:40:41 2018 +0000 +++ b/source/main.cpp Tue Nov 27 17:01:37 2018 +0000 @@ -1,19 +1,3 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2014 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #include <events/mbed_events.h> #include <math.h> @@ -24,176 +8,174 @@ #include "ble/Gap.h" #include "ble/services/HeartRateService.h" -DigitalOut Led0(p19); -DigitalOut Led1(p20); -DigitalOut Led2(p11); -DigitalOut Led3(p12); -DigitalOut Led4(p13); -DigitalOut Led5(p14); -DigitalOut Led6(p15); -DigitalOut Led7(p16); -DigitalOut Led8(p17); -DigitalOut Led9(p18); +DigitalOut Led0(p3); +DigitalOut Led1(p4); +DigitalOut Led2(p28); +DigitalOut Led3(p29); +DigitalOut Led4(p30); +DigitalOut Led5(p31); +DigitalOut Led6(p11); +DigitalOut Led7(p12); +DigitalOut Led8(p13); +DigitalOut Led9(p14); +DigitalOut Led10(p15); +DigitalOut Led11(p16); +DigitalOut Led12(p17); +DigitalOut Led13(p18); +DigitalOut Led14(p19); +DigitalOut Led15(p20); +DigitalOut Led16(p22); +DigitalOut Led17(p23); +DigitalOut Led18(p24); +DigitalOut Led19(p25); -//DigitalOut led1(LED1, 1); +DigitalIn pb(p8); +int USV_count = 1; +int old_pb = 1; +int new_pb; + const static char DEVICE_NAME[] = "ProVaida"; static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE}; +short hrmCounter = 0; +static HeartRateService* hrService; + +bool BLE_conn = false; int16_t destination[3]; -short hrmCounter = 0; double step_threshold = 14.45; double oldAcceleration = 0.0; int callback_cycles = 1; // used to be 4 int step; +int totalsteps = 0; + int run_threshold = 5; // used to be 7 int run_count = 0; -int totalsteps = 0; - -static HeartRateService* hrService; MPU9250 mpu = MPU9250(P0_26, P0_27); -static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE); +static EventQueue eventQueue(16 * EVENTS_EVENT_SIZE); void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { BLE::Instance().gap().startAdvertising(); } -void updateSensorValue() { - step = 0; - callback_cycles++; +void updateSensorValue() { + wait(.001); + new_pb = pb; + if ((new_pb == 0) && (old_pb == 1)) { + USV_count++; + printf("count: %i\n", USV_count); + } + if (USV_count % 2) { + step = 0; + callback_cycles++; - mpu.readAccelData(destination); + mpu.readAccelData(destination); - double acc_x = destination[0] / 1000.0; - double acc_y = destination[1] / 1000.0; - double acc_z = destination[2] / 1000.0; + double acc_x = destination[0] / 1000.0; + double acc_y = destination[1] / 1000.0; + double acc_z = destination[2] / 1000.0; - double sqr_acc_x = acc_x*acc_x; - double sqr_acc_y = acc_y*acc_y; - double sqr_acc_z = acc_z*acc_z; + double sqr_acc_x = acc_x*acc_x; + double sqr_acc_y = acc_y*acc_y; + double sqr_acc_z = acc_z*acc_z; + + double sum_acc = sqr_acc_x + sqr_acc_y + sqr_acc_z; + double accel = sqrt(sum_acc); - double sum_acc = sqr_acc_x + sqr_acc_y + sqr_acc_z; - double accel = sqrt(sum_acc); - - //printf("calback cycles: " ); - //printf("%i\n", callback_cycles); - - if (accel < step_threshold && oldAcceleration >= step_threshold && (callback_cycles > 3)) { - if (callback_cycles <= run_threshold) { - if (run_count >= 2) { - step = 2; + if (accel < step_threshold && oldAcceleration >= step_threshold && (callback_cycles > 3)) { + if (callback_cycles <= run_threshold) { + if (run_count >= 2) { + step = 2; + } + else { + step = 1; + run_count++; + } } else { step = 1; - run_count++; + run_count = 0; } - } - else { - step = 1; - run_count = 0; + callback_cycles = 0; } - callback_cycles = 0; - } - if (step != 0) - { - printf("STEP: " ); - printf("%i\n", step); + if (step != 0) + { + totalsteps++; + Led0 = ((totalsteps >> 0) % 2); + Led1 = ((totalsteps >> 1) % 2); + Led2 = ((totalsteps >> 2) % 2); + Led3 = ((totalsteps >> 3) % 2); + Led4 = ((totalsteps >> 4) % 2); + Led5 = ((totalsteps >> 5) % 2); + Led6 = ((totalsteps >> 6) % 2); + Led7 = ((totalsteps >> 7) % 2); + Led8 = ((totalsteps >> 8) % 2); + Led9 = ((totalsteps >> 9) % 2); + Led10 = ((totalsteps >> 10) % 2); + Led11 = ((totalsteps >> 11) % 2); + Led12 = ((totalsteps >> 12) % 2); + Led13 = ((totalsteps >> 12) % 2); + Led14 = ((totalsteps >> 14) % 2); + Led15 = ((totalsteps >> 15) % 2); + Led16 = ((totalsteps >> 16) % 2); + Led17 = ((totalsteps >> 17) % 2); + Led18 = ((totalsteps >> 18) % 2); + Led19 = ((totalsteps >> 19) % 2); + if ((totalsteps >> 20) % 2 == 1) { + totalsteps = 0; + } + } + oldAcceleration = accel; - totalsteps++; - - printf("totalSTEPs: " ); - printf("%i\n", totalsteps); - - Led0 = ((totalsteps >> 0) % 2); - Led1 = ((totalsteps >> 1) % 2); - Led2 = ((totalsteps >> 2) % 2); - Led3 = ((totalsteps >> 3) % 2); - Led4 = ((totalsteps >> 4) % 2); - Led5 = ((totalsteps >> 5) % 2); - Led6 = ((totalsteps >> 6) % 2); - Led7 = ((totalsteps >> 7) % 2); - Led8 = ((totalsteps >> 8) % 2); - Led9 = ((totalsteps >> 9) % 2); + } else if (totalsteps != 0) { + totalsteps = 0; + } + old_pb = new_pb; + + if (BLE_conn) { + hrmCounter = (short) step; + hrService->updateHeartRate(hrmCounter); } - - oldAcceleration = accel; - - hrmCounter = (short) step; - //printf("STEP: " ); - //printf("%hu\n", hrmCounter); - - hrService->updateHeartRate(hrmCounter); } void blinkCallback(void) { - //led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ BLE &ble = BLE::Instance(); if (ble.gap().getState().connected) { eventQueue.call(updateSensorValue); } } -/** - * This function is called when the ble initialization process has failed - */ -void onBleInitError(BLE &ble, ble_error_t error) -{ - /* Initialization error handling should go here */ -} +void onBleInitError(BLE &ble, ble_error_t error) {} -void printMacAddress() -{ - /* Print out device MAC address to the console*/ - Gap::AddressType_t addr_type; - Gap::Address_t address; - BLE::Instance().gap().getAddress(&addr_type, address); - printf("DEVICE MAC ADDRESS: "); - for (int i = 5; i >= 1; i--){ - printf("%02x:", address[i]); - } - printf("%02x\r\n", address[0]); -} - -/** - * Callback triggered when the ble initialization process has finished - */ void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { BLE& ble = params->ble; ble_error_t error = params->error; - if (error != BLE_ERROR_NONE) { - /* In case of error, forward the error handling to onBleInitError */ + if (error != BLE_ERROR_NONE) { onBleInitError(ble, error); return; } - /* Ensure that it is the default instance of BLE */ if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { return; } ble.gap().onDisconnection(disconnectionCallback); - /* Setup primary service */ hrService = new HeartRateService(ble, hrmCounter, HeartRateService::LOCATION_FINGER); - /* Setup advertising */ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *) uuid16_list, sizeof(uuid16_list)); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *) DEVICE_NAME, sizeof(DEVICE_NAME)); ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); - ble.gap().setAdvertisingInterval(1000); /* 1000ms */ + ble.gap().setAdvertisingInterval(1000); ble.gap().startAdvertising(); - - - printMacAddress(); - } void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) { @@ -202,16 +184,27 @@ } int main() -{ +{ + + pb.mode(PullUp); mpu.initMPU9250(); - eventQueue.call_every(80, blinkCallback); + while (1) { + updateSensorValue(); + + BLE &ble = BLE::Instance(); + ble.onEventsToProcess(scheduleBleEventsProcessing); + ble.init(bleInitComplete); + + if (ble.gap().getState().connected) { + BLE_conn = true; + //eventQueue.call(updateSensorValue); + } - BLE &ble = BLE::Instance(); - ble.onEventsToProcess(scheduleBleEventsProcessing); - ble.init(bleInitComplete); - - eventQueue.dispatch_forever(); + //eventQueue.dispatch_forever(); + + wait(0.1); + } return 0; }