几天前,我开始和Arduino一起工作。我用DHT22设置了一个小项目来读取温度和湿度,并将其写入液晶屏。这是没有问题的。现在,我只想在按下按钮时打开LCD的背光。这也是最有效的方法:
void loop() {
buttonState = digitalRead(BUTTONPIN);
currentMillisScreen = millis();
if (buttonState == HIGH) {
screenOn = true;
lcd.backlight();
}
// DHT22 related code in here
if (currentMillisScreen - previousMillisScreen >= SCREEN_ON_TIME) {
previousMillisScreen = currentMillisScreen;
screenOn = false;
lcd.noBacklight();
}
}问题是,这段代码的背光不会一直亮着5秒。我认为将currentMillisScreen = millis()放在下面的if语句中可以解决这个问题:
if (buttonState == HIGH) {
currentMillisScreen = millis();
screenOn = true;
lcd.backlight();
}但是,如果我这样做,背光将不会再次关闭,我不明白为什么。
发布于 2019-07-13 00:30:58
你没有在循环中更新currentMillisScreen,这就是你的问题。你只需要找出currentTime (等于millis())和上一次灯打开的不同之处,如果它超过了阈值,那么就把它关掉。如下所示:
#define SCREEN_ON_TIME 5000
bool screenOn = false;
void setup()
{
//setup
}
void loop()
{
buttonState = digitalRead(BUTTONPIN);
if (buttonState == HIGH)
{
previousMillisScreen = millis();
lcd.backlight();
screenOn = true;
}
// DHT22 related code in here
// if time passed above SCREEN_ON_TIME after we turned on light
if ((screenOn) && (millis() - previousMillisScreen >= SCREEN_ON_TIME))
{
lcd.noBacklight();
screenOn = false;
}
}https://stackoverflow.com/questions/57008784
复制相似问题