summaryrefslogtreecommitdiff
path: root/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/spi_ADXL345/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/spi_ADXL345/main.cpp')
-rw-r--r--tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/spi_ADXL345/main.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/spi_ADXL345/main.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/spi_ADXL345/main.cpp
new file mode 100644
index 0000000000..11055ebfa1
--- /dev/null
+++ b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/spi_ADXL345/main.cpp
@@ -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);
+}