ADXL345 test on L476

Dependencies:   mbed

Revision:
0:a0f7c6807a3a
Child:
1:2098adebc6da
--- /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
+  } 
+}
+