![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ADXL345 test on L476
Diff: main.cpp
- Revision:
- 0:a0f7c6807a3a
- Child:
- 1:2098adebc6da
diff -r 000000000000 -r a0f7c6807a3a main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Nov 30 20:01:44 2017 +0000 @@ -0,0 +1,121 @@ +#include "mbed.h" +#include "adxl345.h" + + +ADXL345 adxl; + +int x, y, z; + +Serial mySerial(SERIAL_TX, SERIAL_RX, 9600); // tx, rx + +I2C i2cAcc(I2C_SDA, I2C_SCL); + +void ADXL_ISR(); + +int main() { + + i2cAcc.frequency(100000); + + adxl.powerOn(); // Power on the ADXL345 + + adxl.setRangeSetting(8); // Give the range settings + // Accepted values are 2g, 4g, 8g or 16g + // Higher Values = Wider Measurement Range + // Lower Values = Greater Sensitivity + + + adxl.setActivityXYZ(1, 0, 0); // Set to activate movement detection in the axes "adxl.setActivityXYZ(X, Y, Z);" (1 == ON, 0 == OFF) + adxl.setActivityThreshold(75); // 62.5mg per increment // Set activity // Inactivity thresholds (0-255) + + adxl.setInactivityXYZ(1, 0, 0); // Set to detect inactivity in all the axes "adxl.setInactivityXYZ(X, Y, Z);" (1 == ON, 0 == OFF) + adxl.setInactivityThreshold(75); // 62.5mg per increment // Set inactivity // Inactivity thresholds (0-255) + adxl.setTimeInactivity(10); // How many seconds of no activity is inactive? + + adxl.setTapDetectionOnXYZ(0, 0, 1); // Detect taps in the directions turned ON "adxl.setTapDetectionOnX(X, Y, Z);" (1 == ON, 0 == OFF) + + // Set values for what is considered a TAP and what is a DOUBLE TAP (0-255) + adxl.setTapThreshold(50); // 62.5 mg per increment + adxl.setTapDuration(15); // 625 μs per increment + adxl.setDoubleTapLatency(80); // 1.25 ms per increment + adxl.setDoubleTapWindow(200); // 1.25 ms per increment + + // Set values for what is considered FREE FALL (0-255) + adxl.setFreeFallThreshold(10); // (5 - 9) recommended - 62.5mg per increment + adxl.setFreeFallDuration(10); // (20 - 70) recommended - 5ms per increment + + // Setting all interupts to take place on INT1 pin + adxl.setImportantInterruptMapping(1, 1, 1, 1, 1); // Sets "adxl.setEveryInterruptMapping(single tap, double tap, free fall, activity, inactivity);" + // Accepts only 1 or 2 values for pins INT1 and INT2. This chooses the pin on the ADXL345 to use for Interrupts. + // This library may have a problem using INT2 pin. Default to INT1 pin. + + // Turn on Interrupts for each mode (1 == ON, 0 == OFF) + adxl.InactivityINT(1); + adxl.ActivityINT(1); + adxl.FreeFallINT(1); + adxl.doubleTapINT(1); + adxl.singleTapINT(1); + + + mySerial.printf("SparkFun ADXL345 Accelerometer Hook Up Guide Example\n"); + + + + while(1) { + + // Accelerometer Readings + //int x,y,z; + //adxl.readAccel(&x, &y, &z); // Read the accelerometer values and store them in variables declared above x,y,z + + // Output Results to Serial + /* UNCOMMENT TO VIEW X Y Z ACCELEROMETER VALUES */ + //mySerial.printf("X: %i\nY: %i\nZ: %i\n================\n", x, y, z); + //wait(2); + + ADXL_ISR(); + // You may also choose to avoid using interrupts and simply run the functions within ADXL_ISR(); + // and place it within the loop instead. + // This may come in handy when it doesn't matter when the action occurs. + + } +} + + +/********************* ISR *********************/ +/* Look for Interrupts and Triggered Action */ +void ADXL_ISR() { + + // getInterruptSource clears all triggered actions after returning value + // Do not call again until you need to recheck for triggered actions + int interrupts = adxl.getInterruptSource(); + + // Free Fall Detection + if(adxl.triggered(interrupts, ADXL345_FREE_FALL)){ + mySerial.printf("*** FREE FALL ***\n"); + //add code here to do when free fall is sensed + } + + // Inactivity + if(adxl.triggered(interrupts, ADXL345_INACTIVITY)){ + mySerial.printf("*** INACTIVITY ***\n"); + //add code here to do when inactivity is sensed + } + + // Activity + if(adxl.triggered(interrupts, ADXL345_ACTIVITY)){ + mySerial.printf("*** ACTIVITY ***\n"); + //add code here to do when activity is sensed + } + + // Double Tap Detection + if(adxl.triggered(interrupts, ADXL345_DOUBLE_TAP)){ + mySerial.printf("*** DOUBLE TAP ***\n"); + //add code here to do when a 2X tap is sensed + } + + // Tap Detection + if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP)){ + mySerial.printf("*** TAP ***\n"); + //add code here to do when a tap is sensed + } +} +