【发布时间】:2018-01-28 11:26:57
【问题描述】:
我正在尝试从 2017 年 8 月 19 日的主版本中运行 Lua 5.1.4 的 NodeMCU 读取 IR 信息。
我可能误解了 GPIO 的工作原理,而且我很难找到与我正在做的事情相关的示例。
pin = 4
pulse_prev_time = 0
irCallback = nil
function trgPulse(level, now)
gpio.trig(pin, level == gpio.HIGH and "down" or "up", trgPulse)
duration = now - pulse_prev_time
print(level, duration)
pulse_prev_time = now
end
function init(callback)
irCallback = callback
gpio.mode(pin, gpio.INT)
gpio.trig(pin, 'down', trgPulse)
end
-- example
print("Monitoring IR")
init(function (code)
print("omg i got something", code)
end)
我在低电平触发初始中断,然后在trgPulse 中从低电平切换到高电平。在这样做时,我希望水平以完美的模式从 1 交替到 0。但输出显示并非如此:
1 519855430
1 1197
0 609
0 4192
0 2994
1 589
1 2994
1 1198
1 3593
0 4201
1 23357
0 608
0 5390
1 1188
1 4191
1 1198
0 3601
0 3594
1 25147
0 608
1 4781
0 2405
1 3584
0 4799
0 1798
1 1188
1 2994
所以我显然做错了什么,或者根本不了解 GPIO 的工作原理。如果这是预期的,如果低/高电平没有改变,为什么会多次调用中断?如果这看起来确实有问题,有什么想法可以解决它吗?
【问题讨论】:
-
我不熟悉那个平台,但你确定你没有在 IR 输入上听到噪音吗?我要做的第一件事是断开它并将输入连接到地,看看会发生什么。也不确定该平台,但在某些微控制器上,更改中断边沿在中断例程中效果不佳,如果您有备用输入,则可以将两者都连接到 IR 接收器并为每个边沿设置一个。
-
读取 IR 信息是什么意思?你用什么连接到引脚 4?
-
我怀疑我听到了噪音,我只在点击遥控器上的按钮后立即看到数据中断变化。它在我按下按钮的过程中持续,所以它看起来相当稳定。我有一个红外接收器连接到针脚 4。