You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino UNO迷你CPR项目:如何将计数器设为每0.5秒计数一次

问题分析与修改方案

你的计数器每0.8秒才触发一次,核心问题出在计数器逻辑的时间基准更新时机错误,加上可能的变量初始化/定义缺失,导致时间判断不准。

关键问题点

  1. intervalCNT变量未明确设置为500(0.5秒对应的毫秒数),如果默认值不是500,会直接导致间隔错误。
  2. 当前逻辑中,只有当重量≥20kg时才更新prevTime,如果重量不达标时时间持续累积,等重量达标时millis()-prevTime可能已经超过0.5秒(比如0.8秒),才会触发计数。
  3. 重量更新的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:01:19