
started from BLE now the whole team -- here
Diff: source/main.cpp
- Revision:
- 22:0d59828e0b66
- Parent:
- 20:1998218bbb63
--- a/source/main.cpp Tue Nov 27 17:01:37 2018 +0000 +++ b/source/main.cpp Thu Feb 07 14:27:23 2019 +0000 @@ -1,3 +1,19 @@ +/* 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> @@ -8,174 +24,176 @@ #include "ble/Gap.h" #include "ble/services/HeartRateService.h" -DigitalOut Led0(p3); -DigitalOut Led1(p4); -DigitalOut Led2(p28); -DigitalOut Led3(p29); -DigitalOut Led4(p30); -DigitalOut Led5(p31); +DigitalOut Led0(p31); +DigitalOut Led1(p30); +DigitalOut Led2(p29); +DigitalOut Led3(p28); +DigitalOut Led4(p4); +DigitalOut Led5(p3); 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); -DigitalIn pb(p8); +//DigitalOut led1(LED1, 1); -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 run_threshold = 6; // used to be 7 +int run_count = 0; + int totalsteps = 0; -int run_threshold = 5; // used to be 7 -int run_count = 0; - +static HeartRateService* hrService; MPU9250 mpu = MPU9250(P0_26, P0_27); -static EventQueue eventQueue(16 * EVENTS_EVENT_SIZE); +static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE); void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { BLE::Instance().gap().startAdvertising(); } -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++; +void updateSensorValue() { + 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 sum_acc = sqr_acc_x + sqr_acc_y + sqr_acc_z; - double accel = sqrt(sum_acc); + double sqr_acc_x = acc_x*acc_x; + double sqr_acc_y = acc_y*acc_y; + double sqr_acc_z = acc_z*acc_z; - 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++; - } + 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 > 2)) { + if (callback_cycles <= run_threshold) { + if (run_count >= 2) { + step = 2; } else { step = 1; - run_count = 0; + run_count++; } - callback_cycles = 0; + } + else { + step = 1; + run_count = 0; } - 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; + callback_cycles = 0; + } + if (step != 0) + { + printf("STEP: " ); + printf("%i\n", step); - } else if (totalsteps != 0) { - totalsteps = 0; - } - old_pb = new_pb; + 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); + } - 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); } } -void onBleInitError(BLE &ble, ble_error_t error) {} +/** + * 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 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) { + if (error != BLE_ERROR_NONE) { + /* In case of error, forward the error handling to onBleInitError */ 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); + ble.gap().setAdvertisingInterval(1000); /* 1000ms */ ble.gap().startAdvertising(); + + + printMacAddress(); + } void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) { @@ -184,27 +202,16 @@ } int main() -{ - - pb.mode(PullUp); +{ mpu.initMPU9250(); - while (1) { - updateSensorValue(); - - BLE &ble = BLE::Instance(); - ble.onEventsToProcess(scheduleBleEventsProcessing); - ble.init(bleInitComplete); - - if (ble.gap().getState().connected) { - BLE_conn = true; - //eventQueue.call(updateSensorValue); - } + eventQueue.call_every(80, blinkCallback); - //eventQueue.dispatch_forever(); - - wait(0.1); - } + BLE &ble = BLE::Instance(); + ble.onEventsToProcess(scheduleBleEventsProcessing); + ble.init(bleInitComplete); + + eventQueue.dispatch_forever(); return 0; }