使用阈值的加速度计振动检测

时间:2018-07-03 05:22:08

标签: c++ arduino mpu6050 arduino-ultra-sonic

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

1 个答案:

答案 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,这样就可以了...