Небольшая заметка на тему, известную всем кто знает JavaScript, но не вполне очевидная для DIY программирования ESP8266.
Задача - опросить датчик, который должен получить запрос на измерение, а ответ будет готов через некоторое время.
Одним из вариантов такого действа будет работа через callback функцию и таймер. Код с пояснениями:
do
-- Эта функция обработает полученный результат
function call(tb)
print('\nПришло от датчика:')
table.foreach(tb, print)
print('Сейчас я это куда-нибудь отправлю!')
-- Здесь дальнейшие действия с данными.
-- .................
end
-- Эта функция работы с датчиком
function askunit(callb)
-- ... То что надо отправить датчику
print('\nОтправил запрос датчику')
-- Ананимный таймер, срабаиывающий один раз
tmr.create():alarm(1500, tmr.ALARM_SINGLE, function(t)
-- Уничтожаем внутреннюю ссылку на таймер
t = nil
print('\nПодождал и спросил результат.')
-- Предположим, это результат:
local res = {temp = 25}
-- Вызываем callback функцию и передаем ей данные
if callb then callb(res) end
end)
end
-- Старт получения данны от датчика
askunit(call)
end
Код для копипасты:
do
function call(tb)
print('\nПришло от датчика:')
table.foreach(tb, print)
print('Сейчас я это куда-нибудь отправлю!')
end
function askunit(callb)
print('\nОтправил запрос датчику')
tmr.create():alarm(1500, tmr.ALARM_SINGLE, function(t)
t = nil
print('\nПодождал и спросил результат.')
local res = {temp = 25}
if callb then callb(res) end
end)
end
askunit(call)
end
Что получилось:
Надеюсь, это решение поможет начинающим любителям Lua быстрее справляться с датчиками.
mayorovp
Во-первых, вещь вполне очевидная для того, кто знает что в языке есть таймеры.
Во-вторых, причём тут JavaScript? Там-то как раз всё куда проще делается.
IgorKKK Автор
Не соглашусь. Заметка не для опытных в программировании, а для начинающих.
Одного знания недостаточно, нужна экономная работа с таймером по памяти.
При упоминании JavaScript как раз и имел в виду то что вы написали.
Спасибо.