Проекты с модулем LED¶
Для проектов использующих модуль LED нам потребуется:
Базовая плата Пионера
Аккумулятор
Важно
Аккумулятор необходим для питания LED модуля, поскольку питания от USB недостаточно для работы LED модуля.
Цифровой уровень на модуле LED¶
Нужно повесить полочку, а под рукой нет уровня, чтобы повесить её ровно? Не беда с данным примером вы сможете создать электронный уровень на базе квадрокоптера «Геоскан Пионер». Установите LED модуль сверху на базовую плату и загрузите приведённый ниже скрипт через Pioneer Station.
1-- Test programm accelerometer show
2
3-- количество светодиодов на основной плате пионера(4) + на модуле LED (25)
4local ledNumber = 29
5-- создание порта управления светодиодами
6local leds = Ledbar.new(ledNumber)
7local offset = 4
8
9local pitchLED = 2 -- начальные координата "заженного" светодиода по X
10local rollLED = 2 -- начальные координата "заженного" светодиода по Y
11
12local function showAccel()
13 leds:set(pitchLED*5 + rollLED + offset, 0, 0, 0)
14
15 roll, pitch = Sensors.orientation()
16 rollLED = math.floor(roll/10)
17 pitchLED = math.floor(pitch/10)
18
19 if rollLED > 2 then
20 rollLED = 2
21 end
22
23 if rollLED < -2 then
24 rollLED = -2
25 end
26
27 if pitchLED > 2 then
28 pitchLED = 2
29 end
30
31 if pitchLED < -2 then
32 pitchLED = -2
33 end
34
35 rollLED = rollLED + 2
36 pitchLED = pitchLED + 2
37 leds:set(pitchLED*5 + rollLED + offset, 0, 0.1, 0)
38end
39
40-- Обязательная функция обработки событий
41function callback(event)
42end
43
44-- Создание таймера, каждую секунду меняющего цвета каждого из 4-х светодиодов на случайные
45timerRandomLED = Timer.new(0.1, function () showAccel() end)
46-- Запуск созданного таймера
47timerRandomLED:start()
Вывод цифр на LED модуль¶
С помощью данного кейса вы сможете выводить цифры на светодиодную матрицу (LED-модуль) квадрокоптера «Геоскан Пионер». Данный скрипт добавлен в примеры Pioneer Station под названием «examle_led».
Подключите LED модуль к Пионеру и загрузите приведённый ниже скрипт через Pioneer Station. После загрузки скрипта запустите его, нажав кнопку старт на базовой плате Пионера.
1-- Скрипт реализует работу со светодиодной матрицей. Есть возможность перевода формата цвета HSV в RGB (светодиоды принимаются информацию в RGB),
2-- а также вывод цифр на матрицу.
3
4local led_count = 29 -- Общее количество светодиодов (4 на плате + 25 на матрице)
5local led_offset = 4 -- Количество светодиодов на плате
6local matrix_count = 25 -- Количество светодиодов на матрице
7local leds = Ledbar.new(led_count) -- Создание порта управления светодиодами
8local unpack = table.unpack -- Ассоциируем функцию распаковки таблиц из модуля table для упрощения
9
10local colors = { red = {1, 0, 0}, -- Таблица цветов в RGB. Яркость цвета задается диапазоном от 0 до 1
11 green = {0, 1, 0},
12 blue = {0, 0, 1},
13 purple = {1, 0, 1},
14 cyan = {0, 1, 1},
15 yellow = {1, 1, 0},
16 white = {1, 1, 1},
17 black = {0, 0, 0}} -- черный = светодиоды выключены
18
19local dig = { {3, 7, 8, 13, 18, 22, 23, 24}, -- 1 Таблица символов цифр
20 {2, 3, 4, 9, 12, 13, 14, 17, 22, 23, 24}, -- 2
21 {2, 3, 4, 9, 12, 13, 14, 19, 22, 23, 24}, -- 3
22 {2, 4, 7, 9, 12, 13, 14, 19, 24}, -- 4
23 {2, 3, 4, 7, 12, 13, 14, 19, 22, 23, 24}, -- 5
24 {3, 4, 7, 12, 13, 14, 17, 19, 22, 23, 24}, -- 6
25 {2, 3, 4, 9, 13, 18, 23}, -- 7
26 {2, 3, 4, 7, 9, 13, 17, 19, 22, 23, 24}, -- 8
27 {2, 3, 4, 7, 9, 12, 13, 14, 19, 22, 23}, -- 9
28 {1, 3, 4, 5, 6, 8, 10, 11, 13, 15, 16, 18, 20, 21, 23, 24, 25}, -- 10
29 [0] = {2, 3, 4, 7, 9, 12, 14, 17, 19, 22, 23, 24} } -- Индексация Lua начинается с 1, поэтому 0 указан в явном виде
30
31local ledMatrix = {} -- Массив для хранения выводимой информации на матрицу
32
33for i = 1, matrix_count + 1, 1 do
34 ledMatrix[i] = colors.black -- Инициализация массива
35end
36
37-- Вывод массива на матрицу
38local function updateMatrix()
39 for i = led_offset, led_count - 1, 1 do
40 leds:set(i, unpack(ledMatrix[i-led_offset + 1]))
41 end
42end
43
44-- Установка цвета на заданный пиксель массива матрицы. x - столбец; y - строка; colors - цвет в RGB
45local function setPixelMatrix( x, y, colors )
46 i = (y - 1) * 5 + x
47 if ledMatrix [i] then
48 ledMatrix [i] = colors
49 end
50end
51
52-- Заполнение массива матрицы цветом. colors - цвет в RGB
53local function fillMatrix( colors )
54 for i = 1, matrix_count + 1, 1 do
55 ledMatrix [i] = colors
56 end
57end
58
59-- Запись символа цифры в массив матрицы. x - цифра; colors - цвет в RGB
60local function setDig( x, colors )
61 for _, v in ipairs(dig[x]) do
62 ledMatrix[v] = colors
63 end
64end
65
66-- Здесь заканчивается описание работы с матрицей
67--------------------------------------------------------------------------------------------------------------------
68
69function callback( event )
70end
71
72-- Пример. Программа выводит цифры от 0 до 9, при этом изменяя цвет от красного к фиолетовому
73function digitOutput()
74 colors_any[1], colors_any[2], colors_any[3] = fromHSV(col, 100, 10) -- Генерация цвета
75 setDig (i, colors_any) -- Запись цифры в массив заданного цвета
76 updateMatrix() -- Вывод массива на матрицу
77 if col < 360 then
78 col = col + 1 -- Изменение значения цвета
79 elseif i < #dig-1 then
80 fillMatrix(colors.black) -- Очистка массива матрицы перед записью новой цифры
81 col = 0 -- Обнуление значения цвета
82 i = i + 1 -- Увеличение переменной цифры
83 else
84 fillMatrix(colors.black)
85 col = 0 -- Обнуление значения цвета
86 i = 0 -- Обнуление значения цифры
87 end
88 Timer.callLater(0.003, function () digitOutput() end) -- Период, через который обновляется цвет
89end
90
91
92colors_any = {0,0,0} -- Переменная цвета в формате RGB
93i = 0 -- Переменная выводимой цифры
94col = 0 -- Переменная цвета в формате HSV
95digitOutput() -- Запуск программы