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