Я пытаюсь прочитать информацию IR из NodeMCU, на котором запущен Lua 5.1.4, из основной сборки по состоянию на 19.08.2017.
Возможно, я неправильно понимаю, как работает 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. Если это ожидается, почему прерывания вызываются несколько раз, если низкий / высокий уровни не изменились? И если это кажется неправильным, есть идеи, как это исправить?