【问题标题】:How to reset a millis() variable back to zero如何将millis()变量重置为零
【发布时间】:2020-08-08 15:13:28
【问题描述】:

所以代码是:

#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 变量重置为零,

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

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

【问题讨论】:

  • 了解如何使用定时器中断,甚至更好地使用 RTC

标签: arduino arduino-uno arduino-ide arduino-c++


【解决方案1】:

您的代码不起作用,因为 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);
        }  
    }
}

【讨论】:

    猜你喜欢
    • 2015-08-16
    • 2012-11-11
    • 2014-10-06
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多