Pedometer to BT
Dependencies: FXOS8700 Hexi_KW40Z Hexi_OLED_SSD1351
Fork of Hexi_BLE_Example_Modified by
Revision 5:de39081e1aaf, committed 2018-06-05
- Comitter:
- catchvibes95
- Date:
- Tue Jun 05 01:58:28 2018 +0000
- Parent:
- 4:20d4eebfa986
- Commit message:
- Ped_Blue;
Changed in this revision
FXOS8700.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 20d4eebfa986 -r de39081e1aaf FXOS8700.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FXOS8700.lib Tue Jun 05 01:58:28 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/AswinSivakumar/code/FXOS8700/#98ea52282575
diff -r 20d4eebfa986 -r de39081e1aaf main.cpp --- a/main.cpp Fri May 04 08:56:11 2018 +0000 +++ b/main.cpp Tue Jun 05 01:58:28 2018 +0000 @@ -4,6 +4,7 @@ #include "OLED_types.h" #include "OpenSans_Font.h" #include "string.h" +#include "FXOS8700.h" #define LED_ON 0 #define LED_OFF 1 @@ -13,7 +14,9 @@ void StopHaptic(void const *n); void txTask(void); -Serial pc(USBTX, USBRX); +DigitalOut led1(LED_GREEN); // RGB LED +Serial pc(USBTX, USBRX); // Serial interface +FXOS8700 accel(PTC11, PTC10); DigitalOut redLed(LED1,1); DigitalOut greenLed(LED2,1); @@ -32,6 +35,9 @@ /*Create a Thread to handle sending BLE Sensor Data */ Thread txThread; +Ticker flipper; + + /* Text Buffer */ char text[20]; @@ -44,7 +50,43 @@ uint16_t y = 5000; uint16_t z = 10000; +// Variables +float accel_data[3]; // Storage for the data from the sensor +float accel_rms=0.0; // RMS value from the sensor +float ax, ay, az; // Integer value from the sensor to be displayed +const uint8_t *image1; // Pointer for the image1 to be displayed +char text1[20]; // Text Buffer for dynamic value displayed +char text2[20]; // Text Buffer for dynamic value displayed +char text3[20]; // Text Buffer for dynamic value displayed +float dot; +float old_acc=0; +float new_acc=0; +float old_accx, old_accy, old_accz, old_dot=0.0; +uint8_t StepNum = 0, StepNumber = 0; + +float filter_buf[75]; + + + + + /****************************Call Back Functions*******************************/ + +float Filter(int s) +{ + accel.acquire_accel_data_g(accel_data); + float filter_sum = 0.0; + //printf("%d\n\r",s); + for(int i = 0; i < 75; i++) + { + filter_buf[i] = accel_data[s]; + //printf("%4.2f\n\r",filter_buf[i]); + filter_sum += filter_buf[i]; + } + return (float)(filter_sum / 75); +} + + void ButtonRight(void) { StartHaptic(); @@ -57,6 +99,53 @@ kw40z_device.ToggleAdvertisementMode(); } +void ButtonUp(void) +{ + StartHaptic(); + oled.FillScreen(COLOR_BLACK); + + /* Get OLED Class Default Text Properties */ + oled_text_properties_t textProperties = {0}; + oled.GetTextProperties(&textProperties); + + /* Change font color to Blue */ + textProperties.fontColor = COLOR_BLUE; + oled.SetTextProperties(&textProperties); + strcpy((char *) text1,"Steps: "); + oled.Label((uint8_t *)text1,3,45); + sprintf(text1,"%d",StepNumber); + /* Display time reading in 35px by 15px textbox at(x=55, y=40) */ + oled.TextBox((uint8_t *)text1,70,45,20,15); //Increase textbox for more digits + + +} +void ButtonDown(void) +{ + oled.FillScreen(COLOR_BLACK); + + /* Get OLED Class Default Text Properties */ + oled_text_properties_t textProperties = {0}; + oled.GetTextProperties(&textProperties); + + /* Change font color to Blue */ + textProperties.fontColor = COLOR_BLUE; + oled.SetTextProperties(&textProperties); + + /* Display Bluetooth Label at x=17,y=65 */ + strcpy((char *) text,"BLUETOOTH"); + oled.Label((uint8_t *)text,17,65); + + /* Change font color to white */ + textProperties.fontColor = COLOR_WHITE; + textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; + oled.SetTextProperties(&textProperties); + + /* Display Label at x=22,y=80 */ + strcpy((char *) text,"Tap Below"); + oled.Label((uint8_t *)text,22,80); + + +} void PassKey(void) { StartHaptic(); @@ -98,9 +187,13 @@ int main() { + + accel.accel_config(); /* Register callbacks to application functions */ kw40z_device.attach_buttonLeft(&ButtonLeft); kw40z_device.attach_buttonRight(&ButtonRight); + kw40z_device.attach_buttonDown(&ButtonDown); + kw40z_device.attach_buttonUp(&ButtonUp); kw40z_device.attach_passkey(&PassKey); kw40z_device.attach_alert(&AlertReceived); @@ -110,28 +203,7 @@ oled.DimScreenON(); /* Fills the screen with solid black */ - oled.FillScreen(COLOR_BLACK); - - /* Get OLED Class Default Text Properties */ - oled_text_properties_t textProperties = {0}; - oled.GetTextProperties(&textProperties); - - /* Change font color to Blue */ - textProperties.fontColor = COLOR_BLUE; - oled.SetTextProperties(&textProperties); - /* Display Bluetooth Label at x=17,y=65 */ - strcpy((char *) text,"BLUETOOTH"); - oled.Label((uint8_t *)text,17,65); - - /* Change font color to white */ - textProperties.fontColor = COLOR_WHITE; - textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; - oled.SetTextProperties(&textProperties); - - /* Display Label at x=22,y=80 */ - strcpy((char *) text,"Tap Below"); - oled.Label((uint8_t *)text,22,80); uint8_t prevLinkState = 0; uint8_t currLinkState = 0; @@ -161,49 +233,72 @@ /*The following is sending dummy data over BLE. Replace with real data*/ /*Send Battery Level for 20% */ - kw40z_device.SendBatteryLevel(battery); + kw40z_device.SendBatteryLevel(StepNumber); /*Send Ambient Light Level at 50% */ - kw40z_device.SendAmbientLight(light); + //kw40z_device.SendAmbientLight(light); /*Send Humidity at 90% */ - kw40z_device.SendHumidity(humidity); + //kw40z_device.SendHumidity(humidity); /*Send Temperature at 25 degrees Celsius */ - kw40z_device.SendTemperature(temperature); + //kw40z_device.SendTemperature(temperature); /*Send Pressure at 100kPA */ - kw40z_device.SendPressure(pressure); + //kw40z_device.SendPressure(pressure); /*Send Mag,Accel,Gyro Data. */ - kw40z_device.SendGyro(x,y,z); - kw40z_device.SendAccel(z,x,y); - kw40z_device.SendMag(y,z,x); + // kw40z_device.SendGyro(x,y,z); + // kw40z_device.SendAccel(z,x,y); + // kw40z_device.SendMag(y,z,x); - Thread::wait(1000); + Thread::wait(10); } } void UpdateSensorData(void) { - battery -= 5; - if(battery < 5) battery = 100; - - light += 20; - if(light > 100) light = 0; - - humidity += 500; - if(humidity > 8000) humidity = 2000; - - temperature -= 200; - if(temperature < 200) temperature = 4200; - - pressure += 300; - if(pressure > 10300) pressure = 7500; - - x += 1400; - y -= 2300; - z += 1700; + accel.acquire_accel_data_g(accel_data); + //printf("Accelerometer \tX-Axis %4.2f \tY-Axis %4.2f \tZ-Axis %4.2f \tRMS %4.2f\n\r",accel_data[0],accel_data[1],accel_data[2],accel_rms); + ax = Filter(0); + ay = Filter(1); + az = Filter(2); + wait(0.02); + accel_rms = sqrt((ax*ax)+(ay*ay)+(az*az)/3); + //printf("Accelerometer \tX-Axis %4.2f \tY-Axis %4.2f \tZ-Axis %4.2f \tRMS %4.2f\n\r",ax,ay,az,accel_rms); + dot = (old_accx * ax)+(old_accy * ay)+(old_accz * az); + old_acc = abs(sqrt(old_accx*old_accx+old_accy*old_accy+old_accz*old_accz)); + new_acc = abs(sqrt(ax*ax+ay*ay+az*az)); + //printf("\nOld Acceleration: %4.2f\n\r",old_acc); + //printf("New Acceleration: %4.2f\n\r",new_acc); + dot /= (old_acc * new_acc); + //printf("\nDot: %4.2f\n\r",dot); + //printf("Old Dot: %4.2f\n\r",old_dot); + + oled_text_properties_t textProperties = {0}; + oled.GetTextProperties(&textProperties); + + /* Set text properties to white and right aligned for the dynamic text */ + textProperties.fontColor = COLOR_BLUE; + textProperties.alignParam = OLED_TEXT_ALIGN_LEFT; + oled.SetTextProperties(&textProperties); + + /* Display Legends */ + //strcpy((char *) text1,"Steps: "); + //oled.Label((uint8_t *)text1,3,45); + StepNum = StepNumber; + if(abs(dot - old_dot) >= 0.05 && abs(dot - old_dot) <= 0.10) + { + StepNumber += 1; + + } + //printf("%4.2f\n\r",dot); + old_accx = ax; + old_accy = ay; + old_accz = az; + old_dot = dot; + + Thread::wait(250); } void StartHaptic(void) {