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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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


Интересные статьи

Интересные статьи

ESP8266 и Lua Читать далее
Маркетплейс – это сервис от 1С-Битрикс, который позволяет разработчикам делиться своими решениями с широкой аудиторией, состоящей из клиентов и других разработчиков.
Привет, Хабр! Эта статья описывает процесс апгрейда самоходной платформы на базе МК esp8266 с micropython, до простейшего робота, оснащённого сканирующим ультразвуковым датчиком препятствий, м...
Однажды, в понедельник, мне пришла в голову мысль — "а покопаюсь ка я в новом ядре" (новым относительно, но об этом позже). Мысль не появилась на ровном месте, а предпосылками для нее стали: ...
Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.