Button 在1602 LCD上滚动文本,同时监听按钮按下

Button 在1602 LCD上滚动文本,同时监听按钮按下,button,arduino,lcd,Button,Arduino,Lcd,我使用的是Arduino micro,带有ic2模块和1602 LCD。 我已经写了一个函数,可以在LCD上滚动一个字符串,但我想同时听一听按钮的按下 这是我的滚动代码: void ScrollingText(String(StringToScroll)、int(LineToScroll)) { lcd.setCursor(0,LineToScroll); 如果(StringToScroll.length(),您可以监听屏幕上的按钮按下,例如: const byte interruptPin=2

我使用的是Arduino micro,带有ic2模块和1602 LCD。 我已经写了一个函数,可以在LCD上滚动一个字符串,但我想同时听一听按钮的按下

这是我的滚动代码:

void ScrollingText(String(StringToScroll)、int(LineToScroll))
{
lcd.setCursor(0,LineToScroll);

如果(StringToScroll.length(),您可以监听屏幕上的按钮按下,例如:

const byte interruptPin=2;
volatile bool buttonState=false;
无效设置(){
引脚模式(中断引脚、输入\ U上拉);
连接中断(数字插针插入(中断插针)、按钮、更改);
}
void ButtonISR(){
//设置按钮状态
}

然后在循环中检查或使用
按钮state

人类按下按钮对中断函数的使用非常糟糕。一开始听起来很酷。但我不得不为更多的noob修复更多的代码,因为这一操作会使它们以后陷入麻烦。最好的答案是重写该函数,使其不会阻塞。@Delta\G你有什么建议吗g在“阻塞”
loop()
函数中轮询按钮?在这种情况下可能没问题,但如果您想让mcu在电池供电的设备中休眠,该怎么办?为什么您认为使用中断会如此糟糕?您能再解释一点吗?(当然,在这两种情况下,按钮都需要去抖动)没有人说过任何关于睡眠的事情。如果这个按钮是从睡眠中唤醒的,那么是的,一个中断是合适的。从问题的上下文来看,这种情况似乎不太可能发生。而且不是,循环函数不应该被阻塞。代码中没有任何内容应该被阻塞。@Delta\u G至于阻塞
ScrollingText
函数,一个timer interrupt可以用来代替delay(),但我想让答案保持简单。现在的函数是“阻塞”。这意味着,一旦此函数启动,它会认为这是唯一需要发生的事情。因此,当它等待时,它不会返回,让其他事情运行并执行,而是下一次调用它时的下一件事。不,此函数调用delay,只是在它等待它认为唯一重要的事情时阻塞所有内容。您需要重新编写将此函数编写为非阻塞函数。具体执行方式在很大程度上取决于代码的其余部分。但基本上,您需要一个不断被调用并检查millis()的函数。人们会向你抛出中断。这是阻止代码的noobs解决方案。它可以解决你眼前的问题。但它附带了一些严重的警告,这也意味着当你向代码添加下一个内容时,你可能最终不得不撤销它,并以正确的方式重新执行。中断只是一个简单的问题对阻塞代码的帮助。不要使用阻塞延迟。使用中断来设置标志,然后返回到快速主循环。您是正确的。使用中断是没有问题的。我所说的NOOB是使用中断来掩盖阻塞代码。不是任何人使用它是NoOB。我总是使用中断。noobs倾向于在这样不合适的地方使用它们。也请看下面关于中断的答案的评论。我指出了一些很好的原因,为什么它们不是最好的解决方案。如果你愿意,我可以给你更多。