Arduino的怪异行为

Arduino的怪异行为,arduino,avr,Arduino,Avr,我意识到这是一个非常具体的问题,但这里是 我使用图书馆可以用遥控器控制LED屏幕。这是我对loop()的实现 请注意,最后一行已注释掉。这就是造成问题的原因。。。不知何故,当我调用这个函数时,解码器返回的IR代码很少有意义。该函数中没有发生任何有趣的事情。在这个函数中没有与IRemote库的任何交互 当我对调用进行注释时,我得到以下输出: FF30CF FF30CF FF30CF FF30CF FF30CF FF30CF FF30CF FF30CF 解码器在任何情况下都能正确解码。但是,在调用

我意识到这是一个非常具体的问题,但这里是

我使用图书馆可以用遥控器控制LED屏幕。这是我对
loop()
的实现

请注意,最后一行已注释掉。这就是造成问题的原因。。。不知何故,当我调用这个函数时,解码器返回的IR代码很少有意义。该函数中没有发生任何有趣的事情。在这个函数中没有与IRemote库的任何交互

当我对调用进行注释时,我得到以下输出:

FF30CF
FF30CF
FF30CF
FF30CF
FF30CF
FF30CF
FF30CF
FF30CF
解码器在任何情况下都能正确解码。但是,在调用未注释的情况下,我得到以下输出:

661CB9CF   // WRONG
2DE59485   // WRONG
E007A367   // WRONG
FF         // WRONG
FF30CF     // OK
FF         // WRONG
FF30C      // WRONG
FF30CF     // OK
33         // WRONG
FF30CF     // OK
700EEBE2   // WRONG
E007A367   // WRONG
FF30CF     // OK
FF30CF     // OK
E7         // WRONG
5E55E51A   // WRONG
真是一团糟


但这不是我的第一个问题。以前,我将库调用封装在类成员中。出于某种原因,这导致解码完全中断。每按一次按钮都会有1秒的延迟,代码永远不会正确。幕后发生了什么可能导致这种行为?

远程库被中断。显然

controller.iterate();
正在阻止这些中断,导致irrecv中断的计时

IRremote有几个分支,其中原始分支基于轮询输入引脚的周期性中断。它有一个配置文件,可以调整周期,使其更有损耗,但更能容忍延迟中断

此外,还有其他分叉(如microtherion),它们交替使用可能更具响应性的PCINT更改


除此之外,最好的解决方案是深入研究控制器对象的类,以确定它阻止中断的原因。

Serial.println()
将字符放在缓冲区中,然后通过中断发送字符。您的iterate()函数是否以某种方式干扰中断?@UncleO我认为它与
println
语句无关。这不是值打印错误的问题,因为
takeAction
所采取的操作也反映了值本身是错误的。。。mpflaga在下面给出的答案也表明是中断导致了这种情况,因此您可能走上了正确的道路。无论如何谢谢:-)谢谢你的建议!我现在无法访问我的设置,但我将查看配置和forks。我自己编写了控制器类,以及支持它的类,它们都没有使用中断。如果正在使用中断,则必须由在
iterate
函数中调用的FastLED库执行。然而,FastLED也被
takeAction
调用,它不会把事情搞砸。它仍然没有加起来…IRremote库将每个IR切换的更改之间的时间间隔推送到一个数组(在shirriff的原始fork中)或50个周期或位。这可能是因为LED移位路由在重新发送IR数据包之间花费的时间超过了一段时间。导致缓冲区过度运行。
controller.iterate();