• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу