Инструменты пользователя

Инструменты сайта


lm2:ce:timer

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
lm2:ce:timer [2020/08/05 20:53]
ruben
lm2:ce:timer [2020/11/30 14:12] (текущий)
Строка 36: Строка 36:
 Создадим проект, который будет работать с системным таймером. Исполняемые модули находятся в репозитарии [[https://gitlab.com/lambda-mu/lm.ver2/lm2.engine.ce|lm2.engine.ce]]. Файлы для проекта находятся в репозитарии [[https://gitlab.com/lambda-mu/lm.ver2/lm2.examples|lm2.examples]]. Необходимый минимум доступен по ссылкам: Создадим проект, который будет работать с системным таймером. Исполняемые модули находятся в репозитарии [[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.zip|win_timer_project.zip}}+  * {{:lm2:ce:win_timer_project_start.zip|win_timer_project_start.zip}}
   * {{:lm2:ce:rpi_timer_project_start.zip|rpi_timer_project_start.zip}}   * {{:lm2:ce:rpi_timer_project_start.zip|rpi_timer_project_start.zip}}
 ==== Создание структуры директорий ==== ==== Создание структуры директорий ====
Строка 143: Строка 143:
  
 Основная статья «[[https://wiki.lambda-mu.com/lm2/ce/s_templates|Библиотека элементов]]». Создайте в папке configs файл templates.xml. Название файла должно совпадать с названием, указанным в файле описания панелей. Необходимо описать элементы на панели. Файл должен содержать следующий код: Основная статья «[[https://wiki.lambda-mu.com/lm2/ce/s_templates|Библиотека элементов]]». Создайте в папке configs файл templates.xml. Название файла должно совпадать с названием, указанным в файле описания панелей. Необходимо описать элементы на панели. Файл должен содержать следующий код:
-<code xml> 
  
 +<code xml>
 <!-- объявление xml --> <!-- объявление xml -->
 <?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-< !-- корневой элемент -->+<!-- корневой элемент -->
 <root> <root>
   <!-- объявление библиотеки -->   <!-- объявление библиотеки -->
Строка 162: Строка 162:
         размеры элемента                                                          -->         размеры элемента                                                          -->
     <Element ID="button" Width="200" Height="80">     <Element ID="button" Width="200" Height="80">
-      < !-- подэлемент прямоугольник, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент прямоугольник, задаются следующие свойства: уникальный идентификатор,
            размеры и положение, цвет, цвет заливки, толщина контура, радиус закругления углов -->            размеры и положение, цвет, цвет заливки, толщина контура, радиус закругления углов -->
       <Rectangle ID="bg" Rect="full" Color="white" BGColor="black" Thickness="2" CornerRadius="5"/>       <Rectangle ID="bg" Rect="full" Color="white" BGColor="black" Thickness="2" CornerRadius="5"/>
-      < !-- подэлемент текстовое поле, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент текстовое поле, задаются следующие свойства: уникальный идентификатор,
            размер и положение, идентификатор строковых данных, шрифт, кегль, выравнивание -->            размер и положение, идентификатор строковых данных, шрифт, кегль, выравнивание -->
       <TextBox ID="text" Rect="full" TextTID="txtExit" Font="Default" Size="30" Align="Center" VAlign="Center"/>       <TextBox ID="text" Rect="full" TextTID="txtExit" Font="Default" Size="30" Align="Center" VAlign="Center"/>
     </Element>     </Element>
-    < !-- элемент библиотеки, задаются следующие свойства: уникальный идентификатор,+    <!-- элемент библиотеки, задаются следующие свойства: уникальный идентификатор,
          размеры элемента, масштаб                                                   -->          размеры элемента, масштаб                                                   -->
     <Element ID="logo" Width="369" Height="595" Scale="0.25">     <Element ID="logo" Width="369" Height="595" Scale="0.25">
-      < !-- подэлемент изображение, задаются следующие свойства: размеры и положение, путь к рендеру -->+      <!-- подэлемент изображение, задаются следующие свойства: размеры и положение, путь к рендеру -->
       <Image Rect="full" Source="logo.png"/>       <Image Rect="full" Source="logo.png"/>
     </Element>     </Element>
-    < !-- элемент библиотеки, задаются следующие свойства: уникальный идентификатор,+    <!-- элемент библиотеки, задаются следующие свойства: уникальный идентификатор,
          размеры элемента,                                                          -->          размеры элемента,                                                          -->
     <Element ID="clock" Width="300" Height="130">     <Element ID="clock" Width="300" Height="130">
       <Comment>Цифровые часы</Comment>       <Comment>Цифровые часы</Comment>
-      < !-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,
            размеры и положение, путь к рендеру                                             -->            размеры и положение, путь к рендеру                                             -->
       <Image ID="face" Rect="full" Source="clock2Face.png"/>       <Image ID="face" Rect="full" Source="clock2Face.png"/>
-      < !-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,
            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->
       <Image ID="digit1" Rect="20,33,38,64" Source="digits.png" SpriteIndex="0" Visible="true"/>       <Image ID="digit1" Rect="20,33,38,64" Source="digits.png" SpriteIndex="0" Visible="true"/>
-      < !-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,
            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->
       <Image ID="digit2" Rect="80,33,38,64" Source="digits.png" SpriteIndex="0" Visible="true"/>       <Image ID="digit2" Rect="80,33,38,64" Source="digits.png" SpriteIndex="0" Visible="true"/>
-      < !-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,
            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->
       <Image ID="digit3" Rect="170,33,38,64" Source="digits.png" SpriteIndex="0" Visible="true"/>       <Image ID="digit3" Rect="170,33,38,64" Source="digits.png" SpriteIndex="0" Visible="true"/>
-      < !-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,
            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->
       <Image ID="digit4" Rect="230,33,38,64" Source="digits.png" SpriteIndex="0" Visible="true"/>       <Image ID="digit4" Rect="230,33,38,64" Source="digits.png" SpriteIndex="0" Visible="true"/>
-      < !-- задается свойство lua-кодом>+      <!-- задается свойство lua-кодом -->
       <Property PropertyID="value" Default="0000">       <Property PropertyID="value" Default="0000">
         <LUA><![CDATA[         <LUA><![CDATA[
Строка 208: Строка 208:
       </Property>       </Property>
     </Element>     </Element>
-    < !-- элемент библиотеки, задаются следующие свойства: уникальный идентификатор,+    <!-- элемент библиотеки, задаются следующие свойства: уникальный идентификатор,
          размеры элемента,                                                          -->          размеры элемента,                                                          -->
     <Element ID="lamp" Width="130" Height="130">     <Element ID="lamp" Width="130" Height="130">
-      < !-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,
            размеры и положение, путь к рендеру, индекс спрайта                            -->            размеры и положение, путь к рендеру, индекс спрайта                            -->
       <Image ID="off" Rect="full" Source="lamp.png" SpriteIndex="0"/>       <Image ID="off" Rect="full" Source="lamp.png" SpriteIndex="0"/>
-      < !-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,+      <!-- подэлемент изображение, задаются следующие свойства: уникальный идентификатор,
            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->            размеры и положение, путь к рендеру, индекс спрайта, видимость                  -->
       <Image ID="on" Rect="full" Source="lamp.png" SpriteIndex="1" Visible="false"/>       <Image ID="on" Rect="full" Source="lamp.png" SpriteIndex="1" Visible="false"/>
-      < !-- задается свойство lua-кодом>+      <!-- задается свойство lua-кодом -->
       <Property PropertyID="state" Default="off">       <Property PropertyID="state" Default="off">
         <LUA><![CDATA[         <LUA><![CDATA[
Строка 254: Строка 254:
     </Library>     </Library>
 </root> </root>
 +
  
 </code> </code>
 +
 +**Файл со строковыми данными**
 +
 +Основная статья "[[:lm2:ce:s_text|Строковые данные]]". Создайте в папке configs файл text.xml. Название файла должно совпадать с названием, указанным в файле описания панелей. Необходимо добавить все строковые поля. Файл должен содержать следующий код:
 +
 +<code xml>
 +<!-- объявление xml -->
 +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 +<!-- корневой элемент -->
 +<root>
 +  <!-- строковые данные, задается следующее свойство: уникальный идентификатор -->
 +  <Text ID="txtEmptyProject">
 +    <!-- языковая версия, задается следующие свойства: язык, текст -->
 +    <Entry Lang="ru" Value="Пустой проект" />
 +    <Entry Lang="en" Value="Empty project" />
 +  </Text>
 +  <!-- строковые данные, задается следующее свойство: уникальный идентификатор -->
 +  <Text ID="txtExit">
 +    <!-- языковая версия, задается следующие свойства: язык, текст -->
 +    <Entry Lang="ru" Value="Выход" />
 +    <Entry Lang="en" Value="Exit" />
 +  </Text>
 +  <!-- строковые данные, задается следующее свойство: уникальный идентификатор -->
 +  <Text ID="txtStart">
 +    <!-- языковая версия, задается следующие свойства: язык, текст -->
 +    <Entry Lang="ru" Value="Старт" />
 +    <Entry Lang="en" Value="Start" />
 +  </Text>
 +  <!-- строковые данные, задается следующее свойство: уникальный идентификатор -->
 +  <Text ID="txtStop">
 +    <!-- языковая версия, задается следующие свойства: язык, текст -->
 +    <Entry Lang="ru" Value="Стоп" />
 +    <Entry Lang="en" Value="Stop" />
 +  </Text>
 +</root>
 +
 +
 +</code>
 +
 +**Lua-код**
 +
 +Основная статья"[[:lm2:ce:s_lua|Lua-код]]". Создайте в папке configs файл start.lua. Название файла должно совпадать с названием, указанным в главном конфигурационном файле. Необходимо привязать панель к вьюпорту, описать обработчик кнопкок и таймеров и привязать их к событиям. Файл должен содержать следующий код:
 +
 +<code lua>
 +-- start.lua
 +-- привязка панели
 +Panel('main_viewport', 'main')
 +-- подключение файла
 +Include("timer.lua")
 +
 +-- обработчик нажатия на кнопку
 +function H_Exit(_ev)
 +  sys.Exit()
 +end
 +-- привязка обработчика к событию
 +AddEventHandler('main.btExit.Mouse.LeftPress', 'H_Exit')
 +
 +
 +</code>
 +
 +<code lua>
 +-- 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')
 +
 +
 +</code>
 +
 +==== Запуск проекта ====
 +
 +Прямые ссылки на готовый проект:
 +
 +  * {{: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]]
  
  
lm2/ce/timer.1596650030.txt.gz · Последнее изменение: 2020/11/30 14:12 (внешнее изменение)