Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Arduino中,同时在LCD上收听键盘输入和更新时间_Arduino - Fatal编程技术网

在Arduino中,同时在LCD上收听键盘输入和更新时间

在Arduino中,同时在LCD上收听键盘输入和更新时间,arduino,Arduino,我在Arduino上遇到了问题 我想让我的Arduino听从一块12键的键盘输入,这很容易,已经有键盘库可用 我想在16X2 lcd屏幕上显示从RTC模块读取的时间,每秒更新。这也很简单,已经实现了 但是,当我尝试将这两项任务结合起来,让arduino监听键盘并不断更新lcd时,会遇到麻烦:我使用延迟(1000)来告诉arduino每秒循环一次,这可以用于更新lcd上的时间,但它会以某种方式阻止键盘监听 这件事有什么解决办法吗?像多线程或其他聪明的解决方法一样?使用millis()这样控制LCD

我在Arduino上遇到了问题

  • 我想让我的Arduino听从一块12键的键盘输入,这很容易,已经有键盘库可用

  • 我想在16X2 lcd屏幕上显示从RTC模块读取的时间,每秒更新。这也很简单,已经实现了

  • 但是,当我尝试将这两项任务结合起来,让arduino监听键盘并不断更新lcd时,会遇到麻烦:我使用延迟(1000)来告诉arduino每秒循环一次,这可以用于更新lcd上的时间,但它会以某种方式阻止键盘监听


    这件事有什么解决办法吗?像多线程或其他聪明的解决方法一样?

    使用
    millis()
    这样控制LCD更新的时间间隔怎么样

    unsigned long lastRanTime;
    
    void loop() {
      if (millis() - lastRanTime >= 1000) {
        // update the lcd
        lastRanTime = millis();
      }
      // listen for the keypad
    }
    

    正如Pawel所建议的,最佳实践是在关键输入上使用tp中断。你可以谷歌一下中断的概念,有很多

    如果您所处的项目需要一个菜单结构,在该结构中您可以访问数据和触发函数,并且只想通过一个框架来完成任务,我建议您使用LCDMenuLib:


    这是一个德国人写的。arduino.cc论坛上的项目描述大部分是德语,但完整的代码注释和示例是英语。该框架将以非阻塞方式(带中断)为您显示菜单结构和处理关键输入。您可以非常专注于触发哪些功能或在菜单页中显示哪些功能。

    我建议使用中断,而不是使用延迟。这样你就永远不会阻塞。看看我不久前写的一篇文章,它展示了如何做到这一点:与其使用
    delay
    ,不如使用
    millis()
    测量时间,并在
    mills()-lastRunTIme>=1000
    之后运行所需的进程
    lastRunTime
    应该是最后一次调用进程,并通过
    millis()测量