• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

не работает таймер

привет. вот такой скрипт
Код:
--delay.lua

alertDelay = 600000

tmr.delay(alertDelay)

function restart ()
node.restart()
end

tmr.alarm(0,alertDelay,0,restart)
как я понимаю он должен останавливать модуль на 10 минут, после чего перезагружать. так вот. он работает на gpio2 и не работает на gpio4. то есть если заземлить gpio2 когда работает этот таймер, то ничего не происходит, а если заземлить gpio4, то начинает выполняться программа по gpio.trig из другого скрипта, хотя модуль должен висеть 10 минут и ничего не делать. при условии что кнопка в программе висит на gpio4 или gpio2 разумеется. пробовал на трёх разных модулях с одинаковыми прошивками и скриптами. скажите пожалуйста, почему это? как это исправить?
 

sevic

New member
"а если заземлить gpio4, то начинает выполняться программа по gpio.trig из другого скрипта" - вероятнее всего, как раз этот самый другой скрипт ставит обработчик прерывания (третий аргумент в вызове gpio.trig) на gpio4. Если код не Ваш, разберитесь зачем это делается, может так и надо. Если Ваш, и такое поведение не планировалось, найдите этот самый gpio.trig и закомментите/удалите. Вообще странный функционал, ничего не делать 10 минут, потом перезагрузиться. Да и tmr.delay на 10 минут не лучшая идея...
 
"а если заземлить gpio4, то начинает выполняться программа по gpio.trig из другого скрипта" - вероятнее всего, как раз этот самый другой скрипт ставит обработчик прерывания (третий аргумент в вызове gpio.trig) на gpio4. Если код не Ваш, разберитесь зачем это делается, может так и надо. Если Ваш, и такое поведение не планировалось, найдите этот самый gpio.trig и закомментите/удалите. Вообще странный функционал, ничего не делать 10 минут, потом перезагрузиться. Да и tmr.delay на 10 минут не лучшая идея...
спасибо за ответ)
естественно другой скрипт ставит обработчик прервываний на gpio4. и он там нужен. и мне нужен. скрипт не мой, но я понимаю как он работает. я не понимаю почему если gpio.trig вешать на gpio4, то ему пофиг на tmr.delay, а если на gpio2 - то модуль ведёт себя как и положено - вешается на 10 минут и плюёт на прерывания. читал доки - нигде не написано что gpio4 и gpio2 чем-то отличаются по части прерываний либо обработки tmr.delay, то же и описание tmr.delay, нигде не сказано что gpio4 выводит модуль из зависона. обнаружил это потому что модули разные - у одного маленького только gpio2 и gpio0 выведены. а в скрипте по умолчанию было gpio4. которое для маленького модуля пришлось менять на gpio2
 
Сверху Снизу