Adafruit:Circuit Playground - 在 Tap 事件后使用延迟获取加速度计数据

Adafruit: Circuit Playground - Using delay to get accelerometer data after an Tap event

大家好,我正在尝试在 Tap 事件后读出加速度计数据。这个想法是在检测到点击事件后,它使用 playTone 函数播放音调,等待 2 秒,然后从加速度计注册 XYZ 数据。 我面临的问题是使用延迟。这似乎不起作用,因为 XYZ 是在 Tap 事件之后直接写入的。 您可以使用下面的代码并检查串行监视器:

代码:

#include <Adafruit_CircuitPlayground.h>
#include <Wire.h>
#include <SPI.h>

#define CLICKTHRESHHOLD 120

int registry=1; //set initial move

void setup(void) {
  while (!Serial);
  Serial.begin(9600);
  CircuitPlayground.begin();
}

void printAxis() {
  float x, y, z;
  x = CircuitPlayground.motionX();
  y = CircuitPlayground.motionY();
  z = CircuitPlayground.motionZ();
  Serial.print("X: ");
  Serial.print(x);
  Serial.print("  Y: ");
  Serial.print(y);
  Serial.print("  Z: ");
  Serial.println(z);

}

void tap() {
  CircuitPlayground.playTone(50, 100);
  Serial.print("Registry Number: " );
  Serial.println(registry);
  printAxis();
  registry++;

}

void loop() {

// Only take action when either button is pressed.
  if ( (CircuitPlayground.leftButton()  == true) ) {
    CircuitPlayground.setAccelRange(LIS3DH_RANGE_2_G);

      // Tapping function
      CircuitPlayground.setAccelTap(1, CLICKTHRESHHOLD);

  // have a procedure called when a tap is detected
    attachInterrupt(digitalPinToInterrupt(7), tap, RISING);
    }
}

我尝试在 printAxis 中的循环中添加延迟函数。但是使用 delay-

时似乎会卡住
  Serial.print("Delaying...");
  delay(2000);
  Serial.print("Delay ready!");

你们有什么提示或建议吗?最好!

我明白了。我正在回答这个问题,以防有人遇到类似问题。

首先我只在设置中设置了中断。

void setup(void) {
while (!Serial);
Serial.begin(9600);
CircuitPlayground.begin();
CircuitPlayground.setAccelRange(LIS3DH_RANGE_2_G);
CircuitPlayground.setAccelTap(1, CLICKTHRESHHOLD);
attachInterrupt(digitalPinToInterrupt(7), isTapped, FALLING);
tapped = false;
}

然后我创建了一个布尔值 'Tapped' 标志,它被设置在中断处理程序中。在循环中,监视 Tapped 标志。如果设置,那么我执行延迟... 循环看起来像这样:

bool tapped;
void isTapped() {
tapped = true;
}
...
if (tapped) {
delay(3000);
Serial.println("Now!" );
tap();
tapped = false;
}