![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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 |
diff -r 89f008ca5911 -r 3ee58f31a637 main.cpp --- 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); + + } } }