Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于阈值的加速度计振动检测_C++_Arduino_Mpu6050_Arduino Ultra Sonic - Fatal编程技术网

C++ 基于阈值的加速度计振动检测

C++ 基于阈值的加速度计振动检测,c++,arduino,mpu6050,arduino-ultra-sonic,C++,Arduino,Mpu6050,Arduino Ultra Sonic,我对加速度计进行了编程,通过沿所有3轴原始数据设置合理的最小/最大阈值来检测振动。我需要它只计算它检测振动的次数,但是,由于它使用阈值编程的方式,我使用了大约1秒的延迟来防止多次错误计数,当需要读取与加速计同步的距离值时,这会影响超声波模块(HC-SR04)。希望得到一些反馈。据我所知,您正在使用Arduino的功能。坏主意,因为你阻止了应用程序的所有其他部分,好吧,你已经注意到 更好的方法是只检查是否经过了一段时间,例如。G使用函数: static bool isDelay = false;

我对加速度计进行了编程,通过沿所有3轴原始数据设置合理的最小/最大阈值来检测振动。我需要它只计算它检测振动的次数,但是,由于它使用阈值编程的方式,我使用了大约1秒的延迟来防止多次错误计数,当需要读取与加速计同步的距离值时,这会影响超声波模块(HC-SR04)。希望得到一些反馈。

据我所知,您正在使用Arduino的功能。坏主意,因为你阻止了应用程序的所有其他部分,好吧,你已经注意到

更好的方法是只检查是否经过了一段时间,例如。G使用函数:

static bool isDelay = false;
static unsigned long timestamp;

if(detect())
{
    isDelay = true;
    timestamp = millis();
}

if(isDelay && millis() - timestamp > 1000)
{
    isDelay = false;
}
if(!isDelay)
{
    // actions to be taken...
}
始终在时间戳和当前时间之间使用减法-时间计数器可能溢出,但减法结果不受影响,并且您是安全的

如果您确信相关事件在溢出期(大约50天)之间至少会发生一次,则可以跳过
isDelay
变量:


两种变量:静态变量,假设您在Arduino的
循环
函数中有此代码(或从
循环
调用一个)。然而,你更喜欢用宏替换魔法数字1000,这样你就没事了……

你忽略树梢下所有符号的方式会导致1秒的延迟吗?怎么用?您是否希望在靠近屏幕的位置显示代码?
static unsigned long timestamp = millis() - 1000;

if(detect())
{
    timestamp = millis();
}
if(millis() - timestamp > 1000)
{
    // actions to be taken...
}