Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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) {
