#include #include #include /* 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--; } }