Repository that contains example code for using the KX134-1211 accelerometer

Dependencies:   KX134-1211 Driver

Committer:
Jasper Swallen
Date:
Tue Sep 22 20:17:13 2020 -0400
Revision:
0:1610faecade6
port code to example repo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jasper Swallen 0:1610faecade6 1 #include "KX134.h"
Jasper Swallen 0:1610faecade6 2 #include "math.h"
Jasper Swallen 0:1610faecade6 3 #include "mbed.h"
Jasper Swallen 0:1610faecade6 4
Jasper Swallen 0:1610faecade6 5 #include <inttypes.h>
Jasper Swallen 0:1610faecade6 6
Jasper Swallen 0:1610faecade6 7 #define PIN_SPI_MOSI PB_5
Jasper Swallen 0:1610faecade6 8 #define PIN_SPI_MISO PB_4
Jasper Swallen 0:1610faecade6 9 #define PIN_SPI_CS PA_4
Jasper Swallen 0:1610faecade6 10 #define PIN_SPI_SCK PB_3
Jasper Swallen 0:1610faecade6 11 #define PIN_INT1 PA_0 // placeholder
Jasper Swallen 0:1610faecade6 12 #define PIN_INT2 PA_0 // placeholder
Jasper Swallen 0:1610faecade6 13 #define PIN_RST PA_0 // placeholder
Jasper Swallen 0:1610faecade6 14
Jasper Swallen 0:1610faecade6 15 int main(void)
Jasper Swallen 0:1610faecade6 16 {
Jasper Swallen 0:1610faecade6 17 KX134 kx134Obj(PIN_SPI_MOSI, PIN_SPI_MISO, PIN_SPI_SCK, PIN_SPI_CS,
Jasper Swallen 0:1610faecade6 18 PIN_INT1, PIN_INT2, PIN_RST);
Jasper Swallen 0:1610faecade6 19
Jasper Swallen 0:1610faecade6 20 if(!kx134Obj.init())
Jasper Swallen 0:1610faecade6 21 {
Jasper Swallen 0:1610faecade6 22 printf("Failed to initialize KX134\r\n");
Jasper Swallen 0:1610faecade6 23 return 1;
Jasper Swallen 0:1610faecade6 24 }
Jasper Swallen 0:1610faecade6 25
Jasper Swallen 0:1610faecade6 26 printf("Successfully initialized KX134\r\n");
Jasper Swallen 0:1610faecade6 27
Jasper Swallen 0:1610faecade6 28 int hz = 6400;
Jasper Swallen 0:1610faecade6 29
Jasper Swallen 0:1610faecade6 30 // initialize asynch reading
Jasper Swallen 0:1610faecade6 31 kx134Obj.enableRegisterWriting();
Jasper Swallen 0:1610faecade6 32 kx134Obj.setOutputDataRateHz(hz);
Jasper Swallen 0:1610faecade6 33 kx134Obj.setAccelRange(KX134::Range::RANGE_64G);
Jasper Swallen 0:1610faecade6 34 kx134Obj.disableRegisterWriting();
Jasper Swallen 0:1610faecade6 35
Jasper Swallen 0:1610faecade6 36 size_t numTrials = 200;
Jasper Swallen 0:1610faecade6 37 float gravs[numTrials][3];
Jasper Swallen 0:1610faecade6 38
Jasper Swallen 0:1610faecade6 39 for(size_t trialIndex = 0; trialIndex < numTrials; ++trialIndex)
Jasper Swallen 0:1610faecade6 40 {
Jasper Swallen 0:1610faecade6 41 float time = 1.0 / (float)hz * 1000.0;
Jasper Swallen 0:1610faecade6 42 ThisThread::sleep_for(time);
Jasper Swallen 0:1610faecade6 43
Jasper Swallen 0:1610faecade6 44 int16_t output[3];
Jasper Swallen 0:1610faecade6 45 kx134Obj.getAccelerations(output);
Jasper Swallen 0:1610faecade6 46 float ax = kx134Obj.convertRawToGravs(output[0]);
Jasper Swallen 0:1610faecade6 47 float ay = kx134Obj.convertRawToGravs(output[1]);
Jasper Swallen 0:1610faecade6 48 float az = kx134Obj.convertRawToGravs(output[2]);
Jasper Swallen 0:1610faecade6 49
Jasper Swallen 0:1610faecade6 50 printf("KX134 Accel: X: %" PRIi16 " LSB, Y: %" PRIi16
Jasper Swallen 0:1610faecade6 51 " LSB, Z: %" PRIi16 " LSB \r\n",
Jasper Swallen 0:1610faecade6 52 output[0], output[1], output[2]);
Jasper Swallen 0:1610faecade6 53 printf("KX134 Accel in Gravs: X: %f g, Y: %f g, Z: %f g \r\n", ax, ay,
Jasper Swallen 0:1610faecade6 54 az);
Jasper Swallen 0:1610faecade6 55
Jasper Swallen 0:1610faecade6 56 gravs[trialIndex][0] = ax;
Jasper Swallen 0:1610faecade6 57 gravs[trialIndex][1] = ay;
Jasper Swallen 0:1610faecade6 58 gravs[trialIndex][2] = az;
Jasper Swallen 0:1610faecade6 59 }
Jasper Swallen 0:1610faecade6 60
Jasper Swallen 0:1610faecade6 61 float average[3] = {0};
Jasper Swallen 0:1610faecade6 62 float maxGravs[3] = {0};
Jasper Swallen 0:1610faecade6 63 float minGravs[3] = {std::numeric_limits<float>::max()};
Jasper Swallen 0:1610faecade6 64
Jasper Swallen 0:1610faecade6 65 for(size_t trialIndex = 0; trialIndex < numTrials; ++trialIndex)
Jasper Swallen 0:1610faecade6 66 {
Jasper Swallen 0:1610faecade6 67 for(int i = 0; i < 3; ++i)
Jasper Swallen 0:1610faecade6 68 {
Jasper Swallen 0:1610faecade6 69 average[i] += gravs[trialIndex][i];
Jasper Swallen 0:1610faecade6 70 maxGravs[i] = std::max(gravs[trialIndex][i], maxGravs[i]);
Jasper Swallen 0:1610faecade6 71 minGravs[i] = std::min(gravs[trialIndex][i], minGravs[i]);
Jasper Swallen 0:1610faecade6 72 }
Jasper Swallen 0:1610faecade6 73 }
Jasper Swallen 0:1610faecade6 74
Jasper Swallen 0:1610faecade6 75 for(int i = 0; i < 3; ++i)
Jasper Swallen 0:1610faecade6 76 {
Jasper Swallen 0:1610faecade6 77 average[i] /= numTrials;
Jasper Swallen 0:1610faecade6 78 }
Jasper Swallen 0:1610faecade6 79
Jasper Swallen 0:1610faecade6 80 float variance[3] = {0};
Jasper Swallen 0:1610faecade6 81 for(size_t trialIndex = 0; trialIndex < numTrials; ++trialIndex)
Jasper Swallen 0:1610faecade6 82 {
Jasper Swallen 0:1610faecade6 83 for(int i = 0; i < 3; ++i)
Jasper Swallen 0:1610faecade6 84 {
Jasper Swallen 0:1610faecade6 85 variance[i] += pow(gravs[trialIndex][i] - average[i], 2);
Jasper Swallen 0:1610faecade6 86 }
Jasper Swallen 0:1610faecade6 87 }
Jasper Swallen 0:1610faecade6 88
Jasper Swallen 0:1610faecade6 89 float stdDeviation[3];
Jasper Swallen 0:1610faecade6 90 for(int i = 0; i < 3; ++i)
Jasper Swallen 0:1610faecade6 91 {
Jasper Swallen 0:1610faecade6 92 variance[i] /= numTrials - 1;
Jasper Swallen 0:1610faecade6 93 stdDeviation[i] = sqrt(variance[i]);
Jasper Swallen 0:1610faecade6 94 }
Jasper Swallen 0:1610faecade6 95
Jasper Swallen 0:1610faecade6 96 printf("Average Gravs at %d Hz: %f x, %f y, %f z\n", hz, average[0],
Jasper Swallen 0:1610faecade6 97 average[1], average[2]);
Jasper Swallen 0:1610faecade6 98 printf("Standard Deviation at %d Hz: %f x, %f y, %f z\n", hz,
Jasper Swallen 0:1610faecade6 99 stdDeviation[0], stdDeviation[1], stdDeviation[2]);
Jasper Swallen 0:1610faecade6 100 }