目標: Xの動きが検出されるとすぐにLED_X(高)をトリガーし、Xの動きが止まるまで高を維持する
しきい値とデバウンスの設定に問題がある
製品 FRDM-STBI-A8974 シールドを Arduino Uno (3.3V) にコネクテッドFXLS8974CF、3軸低g加速度センサ、データシート
FXLS89xx_Arduino ライブラリの使用FXLS89xx_Arduino/README.md (メイン) · ryraki/FXLS89xx_Arduino · GitHub
シリアルで見たもの:
WHO_AM_I = 0x86
19
19
E0
0x86 - 良好
19、19、E0 はライブラリから出力されたエラーだと思いますが、その情報はシリアルに送信されていません。
src 変数に正しい情報が返されません。何が足りないのか分かりません。
Z 軸に変更すると、LED はハイのままになり、Y 軸にスイッチすると LED は時々点滅します。_XYZ では、LED が非常に速くオン/オフに点滅しますが、_X__ では何も表示されません。何かを適切に初期化していないようです。正しい方向へのどんな刺激でも大歓迎です。
コード:
#include "FXLS89xx_Arduino.h"
#include
#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);
} こんにちは、グレン。
SDCD を使用して X 軸の動きを検出するには、SDCD_INT_SRC1 レジスタの正しいビットを確認してください。
- OT_EAは閾値外イベント情報がアクティブであることを示します
- X_OT_EFはX軸が原因であることを確認します
また、割り込みを有効にして適切にルーティングします。
- INT_EN[SDCD_OT_EN] = 1 を設定し、INT_PIN_SEL 経由で INT1 にルーティングします。
- SENS_CONFIG4 をアクティブハイ、プッシュプル出力用に設定する(またはハードウェアに合わせて設定する)
最後に、fxls89xx.run() を呼び出します。スタンバイ モードを終了するには、構成後に行います。Arduino ライブラリのしきい値は mg 単位で、デバウンス数は ODR 期間に基づいています。SDCD_INT_SRC1 を読み取ると、ラッチされたフラグがクリアされます。
お役に立てれば幸いです。
BRs、トーマス