首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Arduino: LCD无法关闭

Arduino: LCD无法关闭
EN

Stack Overflow用户
提问于 2019-07-12 22:14:20
回答 1查看 248关注 0票数 0

几天前,我开始和Arduino一起工作。我用DHT22设置了一个小项目来读取温度和湿度,并将其写入液晶屏。这是没有问题的。现在,我只想在按下按钮时打开LCD的背光。这也是最有效的方法:

代码语言:javascript
运行
复制
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语句中可以解决这个问题:

代码语言:javascript
运行
复制
  if (buttonState == HIGH) {
  currentMillisScreen = millis();
  screenOn = true;
  lcd.backlight();
 }

但是,如果我这样做,背光将不会再次关闭,我不明白为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-13 00:30:58

你没有在循环中更新currentMillisScreen,这就是你的问题。你只需要找出currentTime (等于millis())和上一次灯打开的不同之处,如果它超过了阈值,那么就把它关掉。如下所示:

代码语言:javascript
运行
复制
#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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57008784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档