Проекты с модулем LED

Для проектов использующих модуль LED нам потребуется:

  1. Базовая плата Пионера

  2. Аккумулятор

  3. Pioneer Station

  4. Модуль 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()           -- Запуск программы