Arduino UNO迷你CPR项目:如何将计数器设为每0.5秒计数一次
问题分析与修改方案
你的计数器每0.8秒才触发一次,核心问题出在计数器逻辑的时间基准更新时机错误,加上可能的变量初始化/定义缺失,导致时间判断不准。
关键问题点
intervalCNT变量未明确设置为500(0.5秒对应的毫秒数),如果默认值不是500,会直接导致间隔错误。- 当前逻辑中,只有当重量≥20kg时才更新
prevTime,如果重量不达标时时间持续累积,等重量达标时millis()-prevTime可能已经超过0.5秒(比如0.8秒),才会触发计数。 - 重量更新的
refresh间隔如果过大,会导致重量检测不及时,进一步延迟计数触发。
修改步骤
1. 确保关键变量的定义与初始化
在代码开头的全局变量区域添加:
const unsigned long intervalCNT = 500; // 0.5秒 = 500毫秒 const unsigned long refresh = 200; // 缩短重量更新间隔,确保检测及时 unsigned long prevTime = 0; // 初始化计数时间基准
同时在setup()函数里初始化prevTime:
void setup() { // 保留你的原有初始化代码(LCD、HX711、引脚模式等) prevTime = millis(); }
2. 修正计数器逻辑块
把原有的计数器代码替换为:
// 按0.5秒间隔更新计数器 if (millis() - prevTime >= intervalCNT) { prevTime = millis(); // 无论重量是否达标,都及时更新时间基准 // 仅当重量达标时计数 if (weight >= 20) { counter++; } }
3. 补充代码完整性
你的原代码loop()函数末尾缺失两个闭合括号,补上后才能正常编译:
} } // 闭合计数器的if判断与loop函数
为什么这样修改?
- 固定
intervalCNT为500毫秒,直接明确0.5秒的间隔要求。 - 每次到时间就更新
prevTime,避免时间累积导致的间隔不准。 - 缩短
refresh间隔,让重量检测更及时,确保不会因为重量更新慢而延迟计数。
内容的提问来源于stack exchange,提问作者Neko Lim
相关产品推荐
相关产品推荐

