Preliminary main mbed library for nexpaq development
Diff: libraries/tests/mbed/spi_ADXL345/main.cpp
- Revision:
- 0:6c56fb4bc5f0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/tests/mbed/spi_ADXL345/main.cpp Fri Nov 04 20:27:58 2016 +0000 @@ -0,0 +1,62 @@ +#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); +}