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

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

  1. Базовая плата Пионера
  2. Аккумулятор
  3. Pioneer Station
  4. Модуль LED

Важно

Аккумулятор необходим для питания LED модуля, поскольку питания от USB недостаточно для работы LED модуля.

Цифровой уровень на модуле LED

Нужно повесить полочку, а под рукой нет уровня, чтобы повесить её ровно? Не беда с данным примером вы сможете создать электронный уровень на базе квадрокоптера «Геоскан Пионер». Установите LED модуль сверху на базовую плату и загрузите приведённый ниже скрипт через Pioneer Station.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
-- Test programm accelerometer show

-- количество светодиодов на основной плате пионера(4) + на модуле LED (25)
local ledNumber = 29
-- создание порта управления светодиодами
local leds = Ledbar.new(ledNumber)
local offset = 4

local pitchLED = 2 -- начальные координата "заженного" светодиода по X
local rollLED = 2 -- начальные координата "заженного" светодиода по Y

local function showAccel()
    leds:set(pitchLED*5 + rollLED + offset, 0, 0, 0)

    roll, pitch = Sensors.orientation() 
    rollLED = math.floor(roll/10)
    pitchLED = math.floor(pitch/10)
    
    if rollLED > 2 then
        rollLED = 2
    end
    
    if rollLED < -2 then
        rollLED = -2
    end
    
    if pitchLED > 2 then
        pitchLED = 2
    end
    
    if pitchLED < -2 then
        pitchLED = -2
    end
    
    rollLED = rollLED + 2
    pitchLED = pitchLED + 2
    leds:set(pitchLED*5 + rollLED + offset, 0, 0.1, 0)
end

-- Обязательная функция обработки событий
function callback(event)
end

-- Создание таймера, каждую секунду меняющего цвета каждого из 4-х светодиодов на случайные
timerRandomLED = Timer.new(0.1, function () showAccel() end)
-- Запуск созданного таймера
timerRandomLED:start()

Вывод цифр на LED модуль

С помощью данного кейса вы сможете выводить цифры на светодиодную матрицу (LED-модуль) квадрокоптера «Геоскан Пионер». Данный скрипт добавлен в примеры Pioneer Station под названием «examle_led».

Подключите LED модуль к Пионеру и загрузите приведённый ниже скрипт через Pioneer Station. После загрузки скрипта запустите его, нажав кнопку старт на базовой плате Пионера.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
-- Скрипт реализует работу со светодиодной матрицей. Есть возможность перевода формата цвета HSV в RGB (светодиоды принимаются информацию в RGB),
-- а также вывод цифр на матрицу.

local led_count = 29							-- Общее количество светодиодов (4 на плате + 25 на матрице)
local led_offset = 4							-- Количество светодиодов на плате
local matrix_count = 25							-- Количество светодиодов на матрице
local leds = Ledbar.new(led_count)					-- Создание порта управления светодиодами
local unpack = table.unpack						-- Ассоциируем функцию распаковки таблиц из модуля table для упрощения

local colors = {	red = 	 {1, 0, 0},	-- Таблица цветов в RGB. Яркость цвета задается диапазоном от 0 до 1
			green =  {0, 1, 0}, 
			blue = 	 {0, 0, 1},
			purple = {1, 0, 1}, 		
			cyan = 	 {0, 1, 1}, 
			yellow = {1, 1, 0}, 
			white =  {1, 1, 1}, 
			black =  {0, 0, 0}}	-- черный = светодиоды выключены

local dig = {		{3, 7, 8, 13, 18, 22, 23, 24},					-- 1 Таблица символов цифр
			{2, 3, 4, 9, 12, 13, 14, 17, 22, 23, 24},			-- 2
			{2, 3, 4, 9, 12, 13, 14, 19, 22, 23, 24},			-- 3
			{2, 4, 7, 9, 12, 13, 14, 19, 24},				-- 4
			{2, 3, 4, 7, 12, 13, 14, 19, 22, 23, 24},			-- 5
			{3, 4, 7, 12, 13, 14, 17, 19, 22, 23, 24},			-- 6
			{2, 3, 4, 9, 13, 18, 23},					-- 7
			{2, 3, 4, 7, 9, 13, 17, 19, 22, 23, 24},			-- 8
			{2, 3, 4, 7, 9, 12, 13, 14, 19, 22, 23},			-- 9
			{1, 3, 4, 5, 6, 8, 10, 11, 13, 15, 16, 18, 20, 21, 23, 24, 25},	-- 10
			[0] = {2, 3, 4, 7, 9, 12, 14, 17, 19, 22, 23, 24} }		-- Индексация Lua начинается с 1, поэтому 0 указан в явном виде

local ledMatrix = {}			-- Массив для хранения выводимой информации на матрицу

for i = 1, matrix_count + 1, 1 do
	ledMatrix[i] = colors.black	-- Инициализация массива
end

-- Вывод массива на матрицу
local function updateMatrix()
	for i = led_offset, led_count - 1, 1 do
		leds:set(i, unpack(ledMatrix[i-led_offset + 1]))
	end
end

-- Установка цвета на заданный пиксель массива матрицы. x - столбец; y - строка; colors - цвет в RGB
local function setPixelMatrix( x, y, colors )
	i = (y - 1) * 5 + x
	if ledMatrix [i] then 
		ledMatrix [i] = colors
	end
end

-- Заполнение массива матрицы цветом. colors - цвет в RGB
local function fillMatrix( colors )
	for i = 1, matrix_count + 1, 1 do
		ledMatrix [i] = colors
	end
end

-- Запись символа цифры в массив матрицы. x - цифра; colors - цвет в RGB
local function setDig( x, colors )
	for _, v in ipairs(dig[x]) do
		ledMatrix[v] = colors
	end
end 

-- Здесь заканчивается описание работы с матрицей
--------------------------------------------------------------------------------------------------------------------

function callback( event )
end

-- Пример. Программа выводит цифры от 0 до 9, при этом изменяя цвет от красного к фиолетовому
function digitOutput()
	colors_any[1],  colors_any[2], colors_any[3] = fromHSV(col, 100, 10)	-- Генерация цвета
	setDig (i, colors_any)							-- Запись цифры в массив заданного цвета
	updateMatrix()								-- Вывод массива на матрицу
	if col < 360 then                                                       
		col = col + 1                                                   -- Изменение значения цвета
	elseif i < #dig-1 then                                                   
		fillMatrix(colors.black)                                        -- Очистка массива матрицы перед записью новой цифры
		col = 0                                                         -- Обнуление значения цвета
		i = i + 1                                                       -- Увеличение переменной цифры
	else
		fillMatrix(colors.black)
		col = 0                                                         -- Обнуление значения цвета
		i = 0                                                           -- Обнуление значения цифры
	end
	Timer.callLater(0.003, function () digitOutput() end)                   -- Период, через который обновляется цвет
end


colors_any = {0,0,0}    -- Переменная цвета в формате RGB
i = 0                   -- Переменная выводимой цифры
col = 0                 -- Переменная цвета в формате HSV
digitOutput()           -- Запуск программы