FXLS8974CF, FXLS8974_Arduino Lib and how to set thresholds and debounce values

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

FXLS8974CF, FXLS8974_Arduino Lib and how to set thresholds and debounce values

102件の閲覧回数
YellowJacket
Contributor I

Goal: Trigger LED_X (high) as soon as X motion is detected, stay high until X motion stops 

Having an issues setting the Threshold and debounce

Product FRDM-STBI-A8974 Shield connected to Arduino Uno (3.3v) FXLS8974CF, 3-Axis Low-g Accelerometer, data sheet

Using FXLS89xx_Arduino Lib FXLS89xx_Arduino/README.md at main · ryraki/FXLS89xx_Arduino · GitHub

What I see on serial:

WHO_AM_I = 0x86

19

19

E0

 

0x86 - Good

19, 19, E0 I believe is an error kicked out from the lib, I'm not sending that info to the Serial.

I'm not getting the correct info back on the src variable. I'm not sure what I am missing.

If I change to the Z axes, the LED stays high, if I switch to the Y axes the LED will blink every now and then, the _XYZ the LED flickers ON/OFF really fast but _X__ gives me nothing. I'm sure I'm not initializing something properly. Any kick in the right direction would be great.

Code:

#include "FXLS89xx_Arduino.h"
#include <Wire.h>

#define FXLS8974CF_ADDR 0x18
FXLS89xx fxls89xx;

int LED_X = 8;
int INT1_PIN = 2;

void setup() 
{
  pinMode(LED_X, OUTPUT);
  pinMode(INT1_PIN, INPUT);

  Serial.begin(115200);
  Wire.begin();

  uint8_t whoami = fxls89xx.init();
  Serial.print("WHO_AM_I = 0x");
  Serial.println(whoami, HEX);

  fxls89xx.wake_odr = FXLS89xx::_6_25HZ;
  fxls89xx.wake_pm  = FXLS89xx::_HPM;
  fxls89xx.sensor_range = FXLS89xx::_2G;
  
  
  // Absolute mode, X-axis, ±25 mg thresholds, debounce=5 samples
  fxls89xx.sdcd(FXLS89xx::_ABSOLUTE, FXLS89xx::_X__, 25.0f, 25.0f, 5);
}

void loop()
{
  // Poll INT1 pin
  if (digitalRead(INT1_PIN))
  {
    uint8_t src=fxls89xx.reg_r(FXLS89xx::_SDCD_INT_SRC1);
    //Serial.println(src);
    if (src & 0x01)
    {
      digitalWrite(LED_X, HIGH);
      Serial.println("Motion detected on X-axis!");
    }
  if (src & 0x08)
    {
      digitalWrite(LED_X, LOW);
      Serial.println("Motion ended on X-axis.");
    }
  }
   delay(50); 
}
0 件の賞賛
返信
1 返信

9件の閲覧回数
TomasVaverka
NXP TechSupport
NXP TechSupport

Hello Glenn,

To detect motion on the X-axis using SDCD, make sure you check the correct bits in the SDCD_INT_SRC1 register:
- OT_EA indicates an outside-of-threshold event is active
- X_OT_EF confirms the X-axis caused it

Also enable and route the interrupt properly:
- set INT_EN[SDCD_OT_EN] = 1 and route it to INT1 via INT_PIN_SEL
- configure SENS_CONFIG4 for active-high, push-pull output (or match your HW)

Finally, call fxls89xx.run() after configuration to leave Standby mode. Thresholds in the Arduino library are in mg and debounce counts are based on ODR periods. Reading SDCD_INT_SRC1 clears latched flags.

Hope it helps.

BRs, Tomas

0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-2261807%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EFXLS8974CF%E3%80%81FXLS8974_Arduino%20Lib%E3%80%81%E3%81%97%E3%81%8D%E3%81%84%E5%80%A4%E3%81%A8%E3%83%87%E3%83%90%E3%82%A6%E3%83%B3%E3%82%B9%E5%80%A4%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2261807%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E7%9B%AE%E6%A8%99%3A%20X%E3%81%AE%E5%8B%95%E3%81%8D%E3%81%8C%E6%A4%9C%E5%87%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%81%A8%E3%81%99%E3%81%90%E3%81%ABLED_X%EF%BC%88%E9%AB%98%EF%BC%89%E3%82%92%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%81%97%E3%80%81X%E3%81%AE%E5%8B%95%E3%81%8D%E3%81%8C%E6%AD%A2%E3%81%BE%E3%82%8B%E3%81%BE%E3%81%A7%E9%AB%98%E3%82%92%E7%B6%AD%E6%8C%81%E3%81%99%E3%82%8B%3C%2FP%3E%3CP%3E%E3%81%97%E3%81%8D%E3%81%84%E5%80%A4%E3%81%A8%E3%83%87%E3%83%90%E3%82%A6%E3%83%B3%E3%82%B9%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AB%E5%95%8F%E9%A1%8C%E3%81%8C%E3%81%82%E3%82%8B%3C%2FP%3E%3CP%3E%E8%A3%BD%E5%93%81%20FRDM-STBI-A8974%20%E3%82%B7%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%20Arduino%20Uno%20(3.3V)%20%E3%81%AB%E3%82%B3%E3%83%8D%E3%82%AF%E3%83%86%E3%83%83%E3%83%89%3CA%20href%3D%22https%3A%2F%2Fwww.nxp.com%2Fdocs%2Fen%2Fdata-sheet%2FFXLS8974CF.pdf%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3EFXLS8974CF%E3%80%813%E8%BB%B8%E4%BD%8Eg%E5%8A%A0%E9%80%9F%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B7%E3%83%BC%E3%83%88%3C%2FA%3E%3C%2FP%3E%3CP%3EFXLS89xx_Arduino%20%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E4%BD%BF%E7%94%A8%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Fryraki%2FFXLS89xx_Arduino%2Fblob%2Fmain%2FREADME.md%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3EFXLS89xx_Arduino%2FREADME.md%20(%E3%83%A1%E3%82%A4%E3%83%B3)%20%C2%B7%20ryraki%2FFXLS89xx_Arduino%20%C2%B7%20GitHub%3C%2FA%3E%3C%2FP%3E%3CP%3E%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%A7%E8%A6%8B%E3%81%9F%E3%82%82%E3%81%AE%3A%3C%2FP%3E%3CP%3EWHO_AM_I%20%3D%200x86%3C%2FP%3E%3CP%3E19%3C%2FP%3E%3CP%3E19%3C%2FP%3E%3CP%3EE0%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E0x86%20-%20%E8%89%AF%E5%A5%BD%3C%2FP%3E%3CP%3E19%E3%80%8119%E3%80%81E0%20%E3%81%AF%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%8B%E3%82%89%E5%87%BA%E5%8A%9B%E3%81%95%E3%82%8C%E3%81%9F%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A0%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%81%9D%E3%81%AE%E6%83%85%E5%A0%B1%E3%81%AF%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%AB%E9%80%81%E4%BF%A1%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FP%3E%3CP%3Esrc%20%E5%A4%89%E6%95%B0%E3%81%AB%E6%AD%A3%E3%81%97%E3%81%84%E6%83%85%E5%A0%B1%E3%81%8C%E8%BF%94%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E4%BD%95%E3%81%8C%E8%B6%B3%E3%82%8A%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B%E5%88%86%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FP%3E%3CP%3EZ%20%E8%BB%B8%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81LED%20%E3%81%AF%E3%83%8F%E3%82%A4%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%AB%E3%81%AA%E3%82%8A%E3%80%81Y%20%E8%BB%B8%E3%81%AB%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%81%99%E3%82%8B%E3%81%A8%20LED%20%E3%81%AF%E6%99%82%E3%80%85%E7%82%B9%E6%BB%85%E3%81%97%E3%81%BE%E3%81%99%E3%80%82_XYZ%20%E3%81%A7%E3%81%AF%E3%80%81LED%20%E3%81%8C%E9%9D%9E%E5%B8%B8%E3%81%AB%E9%80%9F%E3%81%8F%E3%82%AA%E3%83%B3%2F%E3%82%AA%E3%83%95%E3%81%AB%E7%82%B9%E6%BB%85%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81_X__%20%E3%81%A7%E3%81%AF%E4%BD%95%E3%82%82%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E4%BD%95%E3%81%8B%E3%82%92%E9%81%A9%E5%88%87%E3%81%AB%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%A7%E3%81%99%E3%80%82%E6%AD%A3%E3%81%97%E3%81%84%E6%96%B9%E5%90%91%E3%81%B8%E3%81%AE%E3%81%A9%E3%82%93%E3%81%AA%E5%88%BA%E6%BF%80%E3%81%A7%E3%82%82%E5%A4%A7%E6%AD%93%E8%BF%8E%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%9A%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-cpp%22%3E%3CCODE%20translate%3D%22no%22%3E%23include%20%22FXLS89xx_Arduino.h%22%0A%23include%20%3CWIRE.H%3E%0A%0A%23define%20FXLS8974CF_ADDR%200x18%0AFXLS89xx%20fxls89xx%3B%0A%0Aint%20LED_X%20%3D%208%3B%0Aint%20INT1_PIN%20%3D%202%3B%0A%0Avoid%20setup()%20%0A%7B%0A%20%20pinMode(LED_X%2C%20OUTPUT)%3B%0A%20%20pinMode(INT1_PIN%2C%20INPUT)%3B%0A%0A%20%20Serial.begin(115200)%3B%0A%20%20Wire.begin()%3B%0A%0A%20%20uint8_t%20whoami%20%3D%20fxls89xx.init()%3B%0A%20%20Serial.print(%22WHO_AM_I%20%3D%200x%22)%3B%0A%20%20Serial.println(whoami%2C%20HEX)%3B%0A%0A%20%20fxls89xx.wake_odr%20%3D%20FXLS89xx%3A%3A_6_25HZ%3B%0A%20%20fxls89xx.wake_pm%20%20%3D%20FXLS89xx%3A%3A_HPM%3B%0A%20%20fxls89xx.sensor_range%20%3D%20FXLS89xx%3A%3A_2G%3B%0A%20%20%0A%20%20%0A%20%20%2F%2F%20Absolute%20mode%2C%20X-axis%2C%20%C2%B125%20mg%20thresholds%2C%20debounce%3D5%20samples%0A%20%20fxls89xx.sdcd(FXLS89xx%3A%3A_ABSOLUTE%2C%20FXLS89xx%3A%3A_X__%2C%2025.0f%2C%2025.0f%2C%205)%3B%0A%7D%0A%0Avoid%20loop()%0A%7B%0A%20%20%2F%2F%20Poll%20INT1%20pin%0A%20%20if%20(digitalRead(INT1_PIN))%0A%20%20%7B%0A%20%20%20%20uint8_t%20src%3Dfxls89xx.reg_r(FXLS89xx%3A%3A_SDCD_INT_SRC1)%3B%0A%20%20%20%20%2F%2FSerial.println(src)%3B%0A%20%20%20%20if%20(src%20%26amp%3B%200x01)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20digitalWrite(LED_X%2C%20HIGH)%3B%0A%20%20%20%20%20%20Serial.println(%22Motion%20detected%20on%20X-axis!%22)%3B%0A%20%20%20%20%7D%0A%20%20if%20(src%20%26amp%3B%200x08)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20digitalWrite(LED_X%2C%20LOW)%3B%0A%20%20%20%20%20%20Serial.println(%22Motion%20ended%20on%20X-axis.%22)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20%20delay(50)%3B%20%0A%7D%3C%2FWIRE.H%3E%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E