===== Работа с таймерами =====
Платформа Lamda-Mu 2 позволяет использовать системный таймер. Для запуска таймера используется функция **sys.StartTimer() ** (подробнее см. статью "[[:lm2:ce:s_func|Библиотека функций]]")
**Пример:**
запуск таймера
sys.StartTimer('refresh')
обработчик события остановки таймера
function H_refresh(ev)
-- some code
end
AddEventHandler('timer.refresh.finished.', 'H_refresh')
Остановка таймера (событие остановки не наступает)
sys.StopTimer('refresh')
----
Создадим проект, который будет работать с системным таймером. Исполняемые модули находятся в репозитарии [[https://gitlab.com/lambda-mu/lm.ver2/lm2.engine.ce|lm2.engine.ce]]. Файлы для проекта находятся в репозитарии [[https://gitlab.com/lambda-mu/lm.ver2/lm2.examples|lm2.examples]]. Необходимый минимум доступен по ссылкам:
* {{:lm2:ce:win_timer_project_start.zip|win_timer_project_start.zip}}
* {{:lm2:ce:rpi_timer_project_start.zip|rpi_timer_project_start.zip}}
==== Создание структуры директорий ====
Создайте папку empty_project. Это корень проекта. Скопируйте в корень исполняемый модуль (исполняемый файл .exe и динамические библиотеки .dll необходимые для старта платформы в случае Windows или скомпилированный бинарный файл в случаях систем на основе ядра Linux).
Создайте в корне папку images. Это каталог для хранения рендеров. Далее мы укажем к нему путь в главном конфигурационном файле. Скопируйте в этот каталог файлы .png.
Создайте в корне папку configs. Это каталог для хранения конфигурационных файлов (кроме главного конфигурационного файла, он должен быть в корне проекта).
Создайте в корне папку fonts. Это каталог для используемых шрифтов. Далее мы подключим шрифты в главном конфигурационном файле. Скопируйте в этот каталог файл LiberationSerif-Regular.ttf.
==== Создание файлов ====
**Главный конфигурационный файл**
Основная статья «[[https://wiki.lambda-mu.com/lm2/ce/s_config|Главный конфигурационный файл]]». Создайте в корне проекта файл config.xml. Платформа по умолчанию к нему обратиться. Никаких дополнительных действий не требуется. Файл должен содержать следующий код:
**Файл конфигурации окон**
Основная статья «[[https://wiki.lambda-mu.com/lm2/ce/s_win|Конфигурация окон]]». В папку configs создайте viewports.xml. Название файла должно совпадать с названием, указанным в главном конфигурационном файле. Определите окно на первом мониторе (если у вас несколько мониторов) с разрешением 800×480. Файл должен содержать следующий код:
**Файл описания панелей**
Основная статья «[[https://wiki.lambda-mu.com/lm2/ce/s_panels|Описание панелей]]». Создайте в папке configs файл panels.xml. Название файла должно совпадать с названием, указанным в главном конфигурационном файле. Необходимо подключить библиотеку элементов, файл со строковыми данными, описать панель с фоном, двумя кнопками, логотипом и двумя элементами содержащими спрайтшиты лампы и цифр таймера. Файл должен содержать следующий код:
**Файл с библиотекой элементов**
Основная статья «[[https://wiki.lambda-mu.com/lm2/ce/s_templates|Библиотека элементов]]». Создайте в папке configs файл templates.xml. Название файла должно совпадать с названием, указанным в файле описания панелей. Необходимо описать элементы на панели. Файл должен содержать следующий код:
Background
Цифровые часы
= 48 and ch <= 57 then
Set("digit"..i..".SpriteIndex", (ch - 48))
end
end
]]>
**Файл со строковыми данными**
Основная статья "[[:lm2:ce:s_text|Строковые данные]]". Создайте в папке configs файл text.xml. Название файла должно совпадать с названием, указанным в файле описания панелей. Необходимо добавить все строковые поля. Файл должен содержать следующий код:
**Lua-код**
Основная статья"[[:lm2:ce:s_lua|Lua-код]]". Создайте в папке configs файл start.lua. Название файла должно совпадать с названием, указанным в главном конфигурационном файле. Необходимо привязать панель к вьюпорту, описать обработчик кнопкок и таймеров и привязать их к событиям. Файл должен содержать следующий код:
-- start.lua
-- привязка панели
Panel('main_viewport', 'main')
-- подключение файла
Include("timer.lua")
-- обработчик нажатия на кнопку
function H_Exit(_ev)
sys.Exit()
end
-- привязка обработчика к событию
AddEventHandler('main.btExit.Mouse.LeftPress', 'H_Exit')
-- timer.lua
-- в Clock хранится текущее время в виде секунд - seconds и минут - minutes, а также интервал таймера в миллисекундах - interval и статус таймера - on = false|true
Clock = {seconds = 0; -- секунды
minutes = 0; -- минуты
interval = 1000; -- интервал обновления
on = false; -- статус таймера
}
-- При нажатии на кнопку Старт - включается таймеры tick и lamp и текст кнопки становится Стоп
-- При нажатии на кнопку Стоп - таймер tick выключается и текст кнопки становится Старт
function H_startstoptimer(ev)
if Clock.on == false then
Clock.on = true
SetText('main.btStartStop.text.Text', 'txtStop')
-- Включаем таймер на Clock.interval с цикличным срабатыванием (once = false)
sys.StartTimer("tick", Clock.interval, false)
-- Включаем лампу и одноразовый таймер на 5с
Set('main.Lamp.state.', 'on')
sys.StartTimer("lamp", 5000)
else
Clock.on = false
SetText('main.btStartStop.text.Text', 'txtStart')
-- Останавливаем цикличный таймер
sys.StopTimer("tick")
end
end
AddEventHandler('main.btStartStop.Mouse.LeftPress', 'H_startstoptimer')
-- По таймеру tick обновляются часы
function H_refresh(ev)
Clock.seconds = Clock.seconds + Clock.interval/1000
if Clock.seconds> 60 then
Clock.minutes = Clock.minutes + 1
Clock.seconds = Clock.seconds - 60
end
if Clock.minutes> 60 then
Clock.minutes = Clock.minutes - 60
end
-- Устанавливаем значение цифровых часов
Set("main.Clock.value.", string.format("%02d%02d", Clock.minutes, math.floor(Clock.seconds)))
end
AddEventHandler('timer.tick.finished.', 'H_refresh')
-- По таймеру lamp выключается лампа
function H_lamp(ev)
Set('main.Lamp.state.', 'off')
end
AddEventHandler('timer.lamp.finished.', 'H_lamp')
==== Запуск проекта ====
Прямые ссылки на готовый проект:
* {{:lm2:ce:win_timer_project.zip|win_timer_project.zip}}
* {{:lm2:ce:rpi_timer_project.zip|rpi_timer_project.zip}}
В следующих статьях описано как запускать проекты:
* [[https://wiki.lambda-mu.com/lm2/ce/i_win|Установка и запуск платформы на Windows]]
* [[https://wiki.lambda-mu.com/lm2/ce/i_rpi|Установка и запуск платформы на Raspbian]]