Skip to content

HWTapConfig Example not working #24

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
nauen opened this issue Mar 12, 2023 · 0 comments
Open

HWTapConfig Example not working #24

nauen opened this issue Mar 12, 2023 · 0 comments

Comments

@nauen
Copy link

nauen commented Mar 12, 2023

Hey guys,

figuring the chip. But the library is a bit of.
the tap example is not working. There are used the wrong register.
Here an example how I was able to run the tap function.

`#include "SparkFunLSM6DS3.h"
#include "Wire.h"

LSM6DS3 myIMU( I2C_MODE, 0x6B );

void setup()
{
Serial.begin(115200);
delay(1000); //relax...
Serial.println("Processor came out of reset.\n");

//Call .beginCore() to configure the IMU
if ( myIMU.begin() != 0 )
{
Serial.print("Error at beginCore().\n");
}
else
{
Serial.print("\nbeginCore() passed.\n");
}

//Error accumulation variable
uint8_t errorAccumulator = 0;

uint8_t dataToWrite = 0; //Temporary variable

//Setup the accelerometer******************************
dataToWrite = 0; //Start Fresh!
dataToWrite |= LSM6DS3_ACC_GYRO_BW_XL_200Hz;
dataToWrite |= LSM6DS3_ACC_GYRO_FS_XL_2g;
dataToWrite |= LSM6DS3_ACC_GYRO_ODR_XL_416Hz;

// //Now, write the patched together data
errorAccumulator += myIMU.writeRegister(LSM6DS3_ACC_GYRO_CTRL1_XL, dataToWrite);

//Set the ODR bit
errorAccumulator += myIMU.readRegister(&dataToWrite, LSM6DS3_ACC_GYRO_CTRL4_C);
dataToWrite &= ~((uint8_t)LSM6DS3_ACC_GYRO_BW_SCAL_ODR_ENABLED);

// Enable tap detection on X, Y, Z axis, but do not latch output

errorAccumulator += myIMU.writeRegister( LSM6DS3_ACC_GYRO_TAP_CFG1, 0x8E ); // org 0x0E

// Set tap threshold
// Write 0Ch into TAP_THS_6D
errorAccumulator += myIMU.writeRegister( LSM6DS3_ACC_GYRO_TAP_THS_6D, 0x8C ); // 0x03

// Set Duration, Quiet and Shock time windows
// Write 7Fh into INT_DUR2
errorAccumulator += myIMU.writeRegister( LSM6DS3_ACC_GYRO_INT_DUR2, 0x7F );

// Single & Double tap enabled (SINGLE_DOUBLE_TAP = 1)
// Write 80h into WAKE_UP_THS
errorAccumulator += myIMU.writeRegister( LSM6DS3_ACC_GYRO_WAKE_UP_THS, 0x80 );

// Single tap interrupt driven to INT1 pin -- enable latch
// Write 08h into MD1_CFG
errorAccumulator += myIMU.writeRegister( LSM6DS3_ACC_GYRO_MD1_CFG, 0x08 ); // 0x48

if ( errorAccumulator )
{
Serial.println("Problem configuring the device.");
}
else
{
Serial.println("Device O.K.");
}

}

bool checkForDoubleTap()
{
static unsigned long tapWait; // decay value so double taps wont refire right away
uint8_t reg;
myIMU.readRegister(&reg, LSM6DS3_ACC_GYRO_TAP_SRC);

if (tapWait < millis()) {

if (((reg & 0x40) == 0x40) && ((reg & 0x10) == 0x10)) {     // double tap
  Serial.print("double tap ");
  Serial.println(millis());
  tapWait = millis() + 200;
  return true;
}

}

return false;
}

void loop()
{
checkForDoubleTap();
}`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant