Skip to content

Commit a399e56

Browse files
committed
Added cycles for sin flight
1 parent 9353b01 commit a399e56

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

scripts/sin_flight.lua

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ local sinH = 0.6
5656
local sinNumPerT = 20
5757
-- Направление синусоиды (Y -- вперёд (по-умолчанию), 'X','x' -- вправо)
5858
local sinDir = 'Y'
59+
-- Количество циклов
60+
local sinCyclesNum = 3
61+
5962
----------------------------
6063
-- Шаг точек вдоль синусоиды
6164
local sinStep = sinT/sinNumPerT
@@ -87,22 +90,29 @@ for i = sinNum, 0, -1 do
8790
end
8891

8992
-- Счетчик точек
90-
local curr_point = 1
93+
local currPoint = 1
94+
-- Счетчик циклов
95+
local currCycle = 1
9196

9297
-- Функция, изменяющая цвет светодиодов и выполняющая полет к следующей точке
9398
local function nextPoint()
9499
-- Текущий цвет. % - остаток от деления, # - размер таблицы. Такая конструкция использована,
95100
-- чтобы цвета продолжали меняться, даже если точек больше, чем цветов в таблице
96-
curr_color = ((curr_point - 1) % (#colors - 2)) + 1
101+
currColor = ((currPoint - 1) % (#colors - 2)) + 1
97102
-- Изменение цвета светодиодов
98-
changeColor(colors[curr_color])
103+
changeColor(colors[currColor])
99104
-- Полет к текущей точке, если её номер не больше количества заданных точек
100-
if(curr_point <= #points) then
105+
if (currPoint <= #points) and (currCycle <= sinCyclesNum) then
101106
-- Команда полета к точке в системе позиционирования
102-
ap.goToLocalPoint(unpack(points[curr_point]))
107+
ap.goToLocalPoint(unpack(points[currPoint]))
103108
-- Инкрементация переменной текущей точки
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+
-- Посадка, если номер текущего цикла больше заданного количества циклов
106116
else
107117
Timer.callLater(1, function()
108118
-- Команда на посадку
@@ -114,8 +124,8 @@ end
114124
-- Функция обработки событий, автоматически вызывается автопилотом
115125
function callback(event)
116126
-- Когда коптер приближается к точке, переходим к следующей
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
119129
Timer.callLater(1, function() nextPoint() end)
120130
else
121131
nextPoint()

0 commit comments

Comments
 (0)