72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
#include <Wire.h>
|
|
#include <Adafruit_Sensor.h>
|
|
#include <Adafruit_ADXL343.h>
|
|
|
|
/* Assign a unique ID to this sensor at the same time */
|
|
Adafruit_ADXL343 accel = Adafruit_ADXL343(12345);
|
|
|
|
/** The input pin to enable the interrupt on, connected to INT1 on the ADXL. */
|
|
#define INPUT_PIN_INT1 (5) // SAMD21/SAMD51 = 5 for interrupt pin
|
|
|
|
uint32_t g_tap_count = 0;
|
|
int_config g_int_config_enabled = { 0 };
|
|
int_config g_int_config_map = { 0 };
|
|
|
|
/** Interrupt service routine for INT1 events. This will be called when a single tap is detected. */
|
|
void int1_isr(void)
|
|
{
|
|
g_tap_count++;
|
|
}
|
|
|
|
void setup(void)
|
|
{
|
|
Serial.begin(9600);
|
|
while (!Serial);
|
|
Serial.println("ADXL343 Single Tap INT Tester"); Serial.println("");
|
|
|
|
/* Initialise the sensor */
|
|
if(!accel.begin())
|
|
{
|
|
/* There was a problem detecting the ADXL343 ... check your connections */
|
|
Serial.println("Ooops, no ADXL343 detected ... Check your wiring!");
|
|
while(1);
|
|
}
|
|
|
|
/* Set the range to whatever is appropriate for your project */
|
|
accel.setRange(ADXL343_RANGE_16_G);
|
|
|
|
/* Configure the HW interrupts. */
|
|
pinMode(INPUT_PIN_INT1, INPUT);
|
|
attachInterrupt(digitalPinToInterrupt(INPUT_PIN_INT1), int1_isr, RISING);
|
|
|
|
/* Enable single tap interrupts on the accelerometer. */
|
|
g_int_config_enabled.bits.single_tap = true;
|
|
accel.enableInterrupts(g_int_config_enabled);
|
|
|
|
/* Map single tap interrupts to INT1 pin. */
|
|
g_int_config_map.bits.single_tap = ADXL343_INT1;
|
|
accel.mapInterrupts(g_int_config_map);
|
|
|
|
/* Reset tap counter. */
|
|
g_tap_count = 0;
|
|
|
|
Serial.println("ADXL343 init complete. Waiting for single tap INT activity.");
|
|
}
|
|
|
|
void loop(void)
|
|
{
|
|
/* Get a new sensor event */
|
|
/* Reading data clears the interrupts. */
|
|
sensors_event_t event;
|
|
accel.getEvent(&event);
|
|
delay(10);
|
|
|
|
while (g_tap_count) {
|
|
Serial.println("Single tap detected!");
|
|
/* Clear the interrupt as a side-effect of reading the interrupt source register.. */
|
|
accel.checkInterrupts();
|
|
/* Decrement the local interrupt counter. */
|
|
g_tap_count--;
|
|
}
|
|
}
|