【问题标题】:Adafruit: Circuit Playground - Using delay to get accelerometer data after an Tap eventAdafruit:Circuit Playground - 在 Tap 事件后使用延迟获取加速度计数据
【发布时间】:2019-02-26 17:10:39
【问题描述】:

大家好,我正在尝试在 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 内的循环中添加延迟函数。但是使用延迟时似乎会冻结-

  Serial.print("Delaying...");
  delay(2000);
  Serial.print("Delay ready!");

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

【问题讨论】:

    标签: arduino delay accelerometer circuit adafruit


    【解决方案1】:

    我想通了。如果有人遇到类似问题,我会回答这个问题。

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

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多