[Lua, Программирование микроконтроллеров, DIY или Сделай сам] ESP8266 и Lua: «оттормаживаем» функцию

Автор Сообщение
news_bot ®

Стаж: 6 лет 3 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
09-Июл-2021 13:34

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

Похожие новости: Теги для поиска: #_lua, #_programmirovanie_mikrokontrollerov (Программирование микроконтроллеров), #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_lua, #_esp, #_esp32, #_callback, #_timer, #_lua, #_programmirovanie_mikrokontrollerov (
Программирование микроконтроллеров
)
, #_diy_ili_sdelaj_sam (
DIY или Сделай сам
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 17-Май 17:58
Часовой пояс: UTC + 5