Files
Jérôme Delacotte 7b30d6e298 first commit
2025-03-06 11:15:32 +01:00

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--;
}
}