ESP8266 и Lua: «оттормаживаем» функцию

от автора

Небольшая заметка на тему, известную всем кто знает 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 быстрее справляться с датчиками.

ссылка на оригинал статьи https://habr.com/ru/post/566880/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *