51

Re: Программируем светодиод

1. Да, девайс N810
2. Да я точно про светодиод на передней панели все того же девайса N810. По своей логике пытался испытать яркость белого цвета. Не получилось.

Nokia N810

52

Re: Программируем светодиод

Про формат паттернов для N810 ниже.
Но в качестве фонарика этот светодиод не пойдёт — он совсем не яркий

==================================================

У N810 формат паттерна такой:
<PatternName>=<Priority>;<ScreenOn>;<Timeout>;<R-pattern>;<G-pattern>;<B-pattern>

PatternName — имя паттерна

Priority — приоритет (0 — высший, 255 — низший). При включении одновременно нескольких паттернов активным будет более приоритетный

ScreenOn — зависимость паттерна от состояния экрана:
    0 — паттерн активен только если экран выключен
    1 — если выключен или включен
    2 — только если экран выключен, включая «acting dead» («прикидываться мёртвым»?)
    3 — если выключен или включен, включая «acting dead»
    4 — если выключен или «acting dead»

Timeout — число секунд перед тем, как паттерн будет выключен. 0 — без ограничения.

Программы для RGB-каналов — самое хитрое.
Цветной светодиод N810 на самом деле состоит из трёх отдельно программируемых светодиодов (красного, зелёного, синего). Общий цвет определяется яркостью этих трёх каналов, задаваемую в единицах 0–255. И для каждого светодиода составляется своя программа поведения.
Программы состоят из двухбайтовых команд, записанных в шестнадцатеричной системе (4 символа на команду):
0000 — начать паттерн с начала
40xx — установить яркость канала в xx
xxyy — увеличить/уменьшить яркость
    xx определяет скорость изменения. Может задаваться в коротких или длинных временных шагах:
        01–3f — количество коротких шагов (шаг равен 0.49мс)
        41–7f — количество длинных шагов (шаг равен 15.6мс)
    yy определяет степерь изменения яркости:
        00–7f — увеличение яркости (0 — не изменять, 7f — увеличить на 127 единиц)
        80–ff — уменьшение яркости (0 — не изменять, ff — уменьшить на 127 единиц)
        0 можно использовать для создания пауз
        Так как за один раз можно изменить яркость не более, чем на 127 шагов, то чтобы делать изменения во всём диапазоне 0–255 понадобятся две команды.
c000 — закончить выполнение паттерна
e002 — послать красный триггер
e004 — послать зелёный триггер
e008 — послать синий триггер
e080 — подождать красного триггера
e100 — подождать зелёного триггера
e200 — подождать синего триггера

Про триггеры дополнительной информации нет. Насколько я помню, их можно использовать для синхронизации паттернов разных каналов между собой.

Пример программы (пробелы вставил для удобочитаемости, на самом деле их не должно быть):
PatternError= 0 ; 1 ; 0 ; 4000 2000 2000 40ff 2000 2000 0000 ; 0000 ; 0000
Паттерн с высшим приоритетом (0), отображается всегда (1), не имеет таймаута (0). Программа для красного канала (быстрое мигание):
4000    Яркость = 0
2000    Пауза в 16 коротких шагов (20×0.49ms = 9.8ms)
2000    Пауза в 16 коротких шагов (20×0.49ms = 9.8ms)
40ff    Яркость = 255
2000    Пауза в 16 коротких шагов (20×0.49ms = 9.8ms)
2000    Пауза в 16 коротких шагов (20×0.49ms = 9.8ms)
0000    Начать сначала
Паттерны для зелёного и синего каналов отсутствуют (вернее представляют собой бесконечный пустой цикл — 0000).

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

53

Re: Программируем светодиод

Большое спасибо!

Nokia N810

54

Re: Программируем светодиод

Но все равно не все понятно. Вот вы написали “40ff Яркость 255”. Как это может быть, когда ff - уменьшение яркости на 175.
Насчет не хватки яркости: у меня нет силиконовой вставки около светодиода поэтому яркости хватает, но настроить белый цвет не получается. Получается цвет с переливом синего и зеленого. Или я опять делую что-то не так.
Настроить белый цвет пытаался на индикаторе активности веб камеры. Получилось так:
PatternWebcamActive=40;1;0;4000027f027fc000;4000027f027fc000;4000027f027fc000

Nokia N810

55

Re: Программируем светодиод

Как это может быть, когда ff - уменьшение яркости на 175.

Нет, команда xxyy является командой изменения яркости только когда 01 ≤ xx ≤ 3f или 41 ≤ xx ≤ 7f. При xx = 40 это команда мгновенного выставления значения яркости. Соответственно, 40ff устанавливает яркость канала равной ff без каких-либо плавных переходов.

Дело в том, что этот светодиод действительно имеет перекос в сторону сине-зелёного, я об этом писал где-то выше в этом топике. Красная составляющая у него недостаточно яркая. Поэтому для получения белого нужно красный выставить в ff, а синий и зелёный — в меньшие значения

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶