this is implement of uart adxl345 ble nrf51
Dependencies: BLE_API adxl345 mbed nRF51822
Fork of ADXL345_HelloWorld by
Revision 3:3ee58f31a637, committed 2017-12-09
- Comitter:
- asyrofi
- Date:
- Sat Dec 09 05:48:49 2017 +0000
- Parent:
- 2:89f008ca5911
- Commit message:
- mantaplah
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Dec 07 10:38:26 2017 +0000
+++ b/main.cpp Sat Dec 09 05:48:49 2017 +0000
@@ -3,7 +3,7 @@
#include "ble/services/UARTService.h"
#include "Serial.h"
#include "ADXL345.h"
-#include "mbed.h"
+
#define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
* it will have an impact on code-size and power consumption. */
@@ -55,35 +55,71 @@
}
+int threshold =80;
+int xval[10]={0};
+int yval[10]={0};
+int zval[10]={0};
+int xavg;
+int yavg;
+int zavg;
+
+
+int calibratex()
+{
+ int readings[3] = {0, 0, 0};
+ led1=1;
+ long int sum1 = 0;
+ for (int i=0; i<10; i++)
+ {
+ accelerometer.getOutput(readings);
+ xval[i]=(readings[0]); //nilai x adxl345
+ sum1 = yval[i]+sum1;
+ }
+
+ xavg=sum1/10.0;
+
+ led1=0;
+ return xavg;
+}
+int calibratey()
+{
+ int readings[3] = {0, 0, 0};
+ led1=1;
+ long int sum2 = 0;
+ for (int i=0; i<10; i++)
+ {
+ accelerometer.getOutput(readings);
+ yval[i]=(readings[1]); //nilai y adxl345
+ sum2 = yval[i]+sum2;
+ }
+ yavg=sum2/10.0;
+ led1=0;
+ return yavg;
+}
+int calibratez()
+{
+ int readings[3] = {0, 0, 0};
+
+ led1=1;
+ long int sum3 = 0;
+ for (int i=0; i<10; i++)
+ {
+ accelerometer.getOutput(readings);
+ zval[i]=(readings[2]); //nilai z adxl345
+ sum3 = zval[i]+sum3;
+ }
+
+ zavg=sum3/10.0;
+ led1=0;
+ return zavg;
+}
+
int main()
{
uart1.baud(9600);
int readings[3] = {0, 0, 0};
- uart1.printf("Starting ADXL345 test...\n");
- uart1.printf("Device ID is: 0x%02x\n", accelerometer.getDevId());
-
- //Go into standby mode to configure the device.
- accelerometer.setPowerControl(0x00);
-
- //Full resolution, +/-16g, 4mg/LSB.
- accelerometer.setDataFormatControl(0x0B);
-
- //3.2kHz data rate.
- accelerometer.setDataRate(ADXL345_3200HZ);
-
- //Measurement mode.
- accelerometer.setPowerControl(0x08);
-
char buffer [20];
-
- // Test Daata
- memset(&buffer, 0, sizeof(buffer));
- int16_t reading_1 = 54;
- int16_t reading_2 = 42;
- int16_t reading_3 = 32;
-
- snprintf(buffer,20,"data: %d, %d, %d\n", reading_1, reading_2, reading_3);
led1 = 1;
uart1.baud(9600);
@@ -109,19 +145,135 @@
UARTService uartService(ble);
uartServicePtr = &uartService;
+
+ uart1.printf("Starting ADXL345 test...\n");
+ uart1.printf("Device ID is: 0x%02x\n", accelerometer.getDevId());
- while (1) {
- ble.waitForEvent();
- wait(0.1);
- accelerometer.getOutput(readings);
+ //Go into standby mode to configure the device.
+ accelerometer.setPowerControl(0x00);
+
+ //Full resolution, +/-16g, 4mg/LSB.
+ accelerometer.setDataFormatControl(0x0B);
+
+ //3.2kHz data rate.
+ accelerometer.setDataRate(ADXL345_3200HZ);
+
+ //Measurement mode.
+ accelerometer.setPowerControl(0x08);
+
+ int avg1 = calibratex();
+ int avg2 = calibratey();
+ int avg3 = calibratez();
+
+ //inisiliasi
+ int steps=0;
+ int flag=0;
+ int acc=0;
+ int totvect [20] = {0};
+ int totave [20] = {0};
+ int totvel [20] = {0};
+ int totdist [20] = {0};
+ int totheight [20] = {0};
+
- //13-bit, sign extended values.
- uart1.printf("%i, %i, %i\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
-
- memset(&buffer, 0, sizeof(buffer));
- snprintf(buffer, 20, "data: %d, %d, %d\n", (int16_t)readings[0],(int16_t)readings[1], (int16_t)readings[2]);
- ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)buffer, sizeof(buffer), false);
+ //float sum1, sum2, sum3 = 0
+ int xaccl[20];
+ int yaccl[20];
+ int zaccl[20];
+
+ // Test Daata
+ memset(&buffer, 0, sizeof(buffer));
+/* int16_t reading_1= 0;
+ int16_t reading_2= 0;
+ int16_t reading_3= 0;
+ int16_t avg_1= 0;
+ int16_t avg_2= 0;
+ int16_t avg_3= 0;*/
+
+ int16_t lang = 0;
+ int16_t perc = 0;
+ int16_t kec = 0;
+ int16_t jar = 0;
+ int16_t ting = 0;
+ snprintf(buffer, 20, "data: %d,%d,%d,%d,%d\n",(int16_t)lang,(int16_t)perc,(int16_t)kec,(int16_t)jar,(int16_t)ting);
+/* snprintf(buffer, 20, "data: %d,%d,%d,%d,%d,%d\n",(int16_t)reading_1,(int16_t)reading_2,(int16_t)reading_3,(int16_t)avg_1,(int16_t)avg_2,(int16_t)avg_3);*/
+ while (1)
+ {
+ ble.waitForEvent();
+ wait(0.1);
+ accelerometer.getOutput(readings);
+ uart1.printf("\n%i, %i, %i\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
+/* memset(&buffer, 0, sizeof(buffer));
+ snprintf(buffer, 20, "data: %d,%d,%d\n\n", (int16_t)readings[0],(int16_t)readings[1],(int16_t)readings[0]);
+ ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)buffer, sizeof(buffer), false);*/
+
+ uart1.printf("\n%i, %i, %i\n", (int16_t)avg1, (int16_t)avg2, (int16_t)avg3);
+/* memset(&buffer, 0, sizeof(buffer));
+ snprintf(buffer, 20, "data: %d,%d,%d\n\n", (int16_t)avg1,(int16_t)avg2,(int16_t)avg3);
+ ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)buffer, sizeof(buffer), false);*/
+ wait(0.1);
+
+
+
+ //float x,y,z
+ for (int i=0; i<10; i++)
+ {
+ xaccl[i]=(readings[0]);
+ wait(0.1);
+ yaccl[i]=(readings[1]);
+ wait(0.1);
+ zaccl[i]=(readings[2]);
+ wait(0.1);
+
+ //formula
+ totvect[i] = sqrt((double)((xaccl[i]-xavg)* (xaccl[i]-xavg))+(double) ((yaccl[i] - yavg)*(yaccl[i] - yavg)) +(double) ((zaccl[i] - zavg)*(zaccl[i] - zavg)));
+ totave[i] = (totvect[i] + totvect[i-1]) / 2 ;
+ uart1.printf("\t acc: %i\n", (int16_t)totave[i]);
+ memset(&buffer, 0, sizeof(buffer));
+ snprintf(buffer, 20, "\t acc: %d\n", (int16_t)totave[i]);
+ ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)buffer, sizeof(buffer), false);
+
+ totvel[i]=(totave[i]*0.2);
+ uart1.printf("\t vel: %i\n", (int16_t)totvel[i]);
+ memset(&buffer, 0, sizeof(buffer));
+ snprintf(buffer, 20, "\t vel: %d\n", (int16_t)totvel[i]);
+ ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)buffer, sizeof(buffer), false);
+
+ totdist[i]=(totvect[i]*(0.2*0.2)/2);
+ uart1.printf("\t dist: %i\n", (int16_t)totdist[i]);
+ memset(&buffer, 0, sizeof(buffer));
+ snprintf(buffer, 20, "\tdist: %d\n", (int16_t)totdist[i]);
+ ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)buffer, sizeof(buffer), false);
+
+ totheight[i]=sqrt((((xaccl[i]-xavg)* (xaccl[i]-xavg))+ ((yaccl[i] - yavg)*(yaccl[i] - yavg)))*(0.2*0.2)/2);
+ uart1.printf("\thght: %i\n", (int16_t)totheight[i]);
+ memset(&buffer, 0, sizeof(buffer));
+ snprintf(buffer, 20, "\thght: %d\n", (int16_t)totheight[i]);
+ ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)buffer, sizeof(buffer), false);
+
+ acc=acc+totave[i];
+
+
+
+ //cal steps
+ if (totave[i] > threshold && flag==0)
+ {
+ steps = steps+1;
+ flag=1;
+ }
+ else if (totave[i] > threshold && flag == 1)
+ {
+ // do nothing
+ }
+ if (totave[i] < threshold && flag == 1)
+ {flag=0;}
+ uart1.printf("steps: %i\n", (int16_t)steps);
+ memset(&buffer, 0, sizeof(buffer));
+ snprintf(buffer, 20, "\nsteps: %d\t", (int16_t)steps);
+ ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (uint8_t*)buffer, sizeof(buffer), false);
+
+ }
}
}
