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;
}
大家好,我正在尝试在 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;
}