如何将 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
将再次输入最新的时间值,即 60
和 lcd.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);
}
}
}
所以代码是:
#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
将再次输入最新的时间值,即 60
和 lcd.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);
}
}
}