@@ -56,6 +56,9 @@ local sinH = 0.6
56
56
local sinNumPerT = 20
57
57
-- Направление синусоиды (Y -- вперёд (по-умолчанию), 'X','x' -- вправо)
58
58
local sinDir = ' Y'
59
+ -- Количество циклов
60
+ local sinCyclesNum = 3
61
+
59
62
---- ------------------------
60
63
-- Шаг точек вдоль синусоиды
61
64
local sinStep = sinT / sinNumPerT
@@ -87,22 +90,29 @@ for i = sinNum, 0, -1 do
87
90
end
88
91
89
92
-- Счетчик точек
90
- local curr_point = 1
93
+ local currPoint = 1
94
+ -- Счетчик циклов
95
+ local currCycle = 1
91
96
92
97
-- Функция, изменяющая цвет светодиодов и выполняющая полет к следующей точке
93
98
local function nextPoint ()
94
99
-- Текущий цвет. % - остаток от деления, # - размер таблицы. Такая конструкция использована,
95
100
-- чтобы цвета продолжали меняться, даже если точек больше, чем цветов в таблице
96
- curr_color = ((curr_point - 1 ) % (# colors - 2 )) + 1
101
+ currColor = ((currPoint - 1 ) % (# colors - 2 )) + 1
97
102
-- Изменение цвета светодиодов
98
- changeColor (colors [curr_color ])
103
+ changeColor (colors [currColor ])
99
104
-- Полет к текущей точке, если её номер не больше количества заданных точек
100
- if ( curr_point <= # points ) then
105
+ if ( currPoint <= # points ) and ( currCycle <= sinCyclesNum ) then
101
106
-- Команда полета к точке в системе позиционирования
102
- ap .goToLocalPoint (unpack (points [curr_point ]))
107
+ ap .goToLocalPoint (unpack (points [currPoint ]))
103
108
-- Инкрементация переменной текущей точки
104
- curr_point = curr_point + 1
105
- -- Посадка, если номер текущей точки больше количества заданных точек
109
+ currPoint = currPoint + 1
110
+ -- Переход к следующему циклу, если в текущем цикле пройдены все точки
111
+ elseif (currCycle <= sinCyclesNum ) then
112
+ currPoint = 1
113
+ currCycle = currCycle + 1
114
+ nextPoint ()
115
+ -- Посадка, если номер текущего цикла больше заданного количества циклов
106
116
else
107
117
Timer .callLater (1 , function ()
108
118
-- Команда на посадку
114
124
-- Функция обработки событий, автоматически вызывается автопилотом
115
125
function callback (event )
116
126
-- Когда коптер приближается к точке, переходим к следующей
117
- if (event == Ev .POINT_DECELERATION ) then
118
- if curr_point == 1 then
127
+ if (event == Ev .POINT_DECELERATION or event == Ev . TAKEOFF_COMPLETE ) then
128
+ if currPoint == 1 then
119
129
Timer .callLater (1 , function () nextPoint () end )
120
130
else
121
131
nextPoint ()
0 commit comments