我已对加速度计进行编程,以通过沿所有3轴原始数据设置合理的最小/最大阈值来检测振动。我需要它仅计数它检测到振动的次数,但是,由于使用阈值进行编程的方式,我使用了大约1秒钟的延迟,以防止多次错误计数,该计数有效但会干扰超声波模块(HC -SR04)需要读取距离值时,与加速度计同步。想获得一些反馈。
答案 0 :(得分:0)
据我了解,您正在使用Arduino的delay()
函数。当您阻止所有其余应用程序时,这是一个坏主意,好了,您已经注意到...
更好的方法是仅检查是否已过一些时间,例如G。使用millis
函数:
ArrayStoreException
在时间戳和当前时间之间始终使用减法-时间计数器可能溢出,但是减法结果不受影响,并且您很安全...
如果您足够确定相关事件在两次溢出之间(大约50天)始终至少发生一次,则可以直接跳过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...
}
变量:
isDelay
两个变体:静态变量,假设您在Arduino的static unsigned long timestamp = millis() - 1000;
if(detect())
{
timestamp = millis();
}
if(millis() - timestamp > 1000)
{
// actions to be taken...
}
函数中有此代码(或从loop
调用了此代码)。但是更喜欢用宏替换魔术数字1000,这样就可以了...