如何将 millis() 变量重置为零

How to reset a millis() variable back to zero

所以代码是:

#include <LiquidCrystal.h>

int sec = 0;
int mts = 0;
int hrs = 0;

LiquidCrystal lcd(4, 6, 10, 11, 12, 13);

void setup() {
  lcd.begin(16, 2);
}

void loop() {
  sec = millis() / 1000;
  lcd.clear();
  lcd.setCursor(3, 0);
  lcd.print("Seconds:");
  lcd.setCursor(11, 0);
  lcd.print(sec);
  lcd.setCursor(9, 1);
  lcd.print("Mnt:");
  if (sec >= 59) {
    sec = 0;
    mts = mts + 1;
    lcd.setCursor(13, 1);
    lcd.print(mts);
  } else {
    lcd.setCursor(13,1);
    lcd.print(mts);
  }
  delay(1000)
}

问题是我无法将 sec 变量重置为零,

我尝试了很多方法,但都失败了。

有没有办法让它开始倒计时

您的代码无法正常工作,因为 millis 正在更新 sec 变量。

sec 达到 59 值后,您的 if 语句将 sec 更改为 0。然而 millis 将再次输入最新的时间值,即 60lcd.print(sec) 将打印它。并且循环继续,没有重置 sec 值,因为 millis 正在更新它。

还有一件事,不要使用 delay(1000) 停止控制器 1 秒,你需要利用 millis 的唯一目的,即避免 delays.

这是您的解决方案:

#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 6, 10, 11, 12, 13);
long previousMillis = 0;
unsigned long sec = 0;
unsigned long mts = 0;
unsigned long hrs = 0;

void setup() {
    lcd.begin(16, 2);
}

void loop() {
    unsigned long currentMillis = millis();
    if(currentMillis - previousMillis > 1000) {
        previousMillis = currentMillis;   
        sec +=1;
        lcd.clear();
        lcd.setCursor(3, 0);
        lcd.print("Seconds:");
        lcd.setCursor(11, 0);
        lcd.print(sec);
        lcd.setCursor(7, 1);
        lcd.print("Mnt:");
        if (sec >= 59) {
            sec = 0;
            mts +=1;
        }
        lcd.setCursor(11,1);
        lcd.print(mts);
        }  
    }
}