mirror of https://github.com/ARMmbed/mbed-os.git
63 lines
1.4 KiB
C++
63 lines
1.4 KiB
C++
#include "test_env.h"
|
|
#include "ADXL345.h"
|
|
|
|
#if defined(TARGET_LPC812)
|
|
ADXL345 accelerometer(D10, D11, D12, D13);
|
|
|
|
#else
|
|
ADXL345 accelerometer(p5, p6, p7, p8);
|
|
#endif
|
|
|
|
// Assume test configuration on a plane (small x and y, z ~ g)
|
|
#define MAX_X_Y (50)
|
|
#define MIN_Z (200)
|
|
#define MAX_Z (300)
|
|
|
|
void check_X_Y(int v) {
|
|
int16_t a = (int16_t)v;
|
|
if (abs(a) > MAX_X_Y) {
|
|
printf("X/Y acceleration is too big: %d\n", a);
|
|
notify_completion(false);
|
|
}
|
|
}
|
|
|
|
|
|
int main() {
|
|
int readings[3] = {0, 0, 0};
|
|
|
|
printf("Starting ADXL345 test...\n");
|
|
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);
|
|
|
|
for (int i=0; i<3; i++) {
|
|
wait(0.1);
|
|
|
|
//13-bit, sign extended values.
|
|
accelerometer.getOutput(readings);
|
|
|
|
// X and Y
|
|
check_X_Y(readings[0]);
|
|
check_X_Y(readings[1]);
|
|
|
|
// Z
|
|
int16_t z = (int16_t)readings[2];
|
|
if ((z < MIN_Z) || (z > MAX_Z)) {
|
|
printf("Z acceleration not within expected range\n", z);
|
|
notify_completion(false);
|
|
}
|
|
}
|
|
|
|
notify_completion(true);
|
|
}
|