-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathAccelerometerTap.ino
49 lines (36 loc) · 1.22 KB
/
AccelerometerTap.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
Arduino LSM6DS3 - Accelerometer Tap
this code is to detect tap
using IMU.accelerationAvailable()
*/
#include <Arduino_LSM6DS3.h>
float tapThreshold ;
float xi, yi , zi ;
void setup() {
Serial.begin(9600);
while (!Serial);
while (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
delay(3000); // wait for 3 sec and check if it can be initialized again
}
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(xi, yi, zi); //To set initial values of acceleration, including gravity and some zero error.
}
tapThreshold = 0.05; //0.05 g acceleration in some direction is considered as tap. it can be changed for the required sensitivity.
}
void loop() {
float x, y, z;
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(x, y, z);
// works on the difference from initial acceleration to the current acceleration
if (x -xi > tapThreshold || x-xi < -tapThreshold){
Serial.println("Tap detected across X-axis");
}
if (y-yi > tapThreshold || y-yi < -tapThreshold){
Serial.println("Tap detected across Y-axis");
}
if (z-zi > tapThreshold || z-zi < -tapThreshold) {
Serial.println("Tap detected across Z-axis");
}
}
}