Вложений: 2
Фоновая, пиксельная подсветка телевизора, Pixelight
Наконец приехала моя светодиодная лента с драйверами WS8201 на каждый пиксель. В пяти метрах этой светодиодной ленты 160 RGB светодиодов
Первым делом кинулся ее проверять, но под рукой не оказалось мощного БП на +5в. Пришлось написать свой код проверки ленты с питанием от +5в Arduino Nano
Вот код этого скетча
PHP код:
#include <SPI.h>
typedef struct {uint8_t b; uint8_t g; uint8_t r;} RGB;
RGB pixel[160];
void setup()
{
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPI.setClockDivider(SPI_CLOCK_DIV16);
delay(1);
}
void loop()
{
run_pix(160); //количество тестируемых светодиодов в ленте
}
void run_pix(uint8_t num)
{
pixel[0].r=0;
pixel[0].g=200;
pixel[0].b=255;
for(uint8_t i=0; i<num; i++)
{
pixel[i+1].r=pixel[i].r;
pixel[i+1].g=pixel[i].g;
pixel[i+1].b=pixel[i].b;
pixel[i].r=0;
pixel[i].g=0;
pixel[i].b=0;
set_pix(num);
// delay(10); //пауза между вспышками светодиодов
}
}
void set_pix(uint8_t num)
{
for(uint8_t i=0; i<num; i++)
{
SPI.transfer(pixel[i].b);
SPI.transfer(pixel[i].g);
SPI.transfer(pixel[i].r);
}
delay(1);
}
Схема подключения Pixelight
Вложение 15818
Вот так выглядит в готовом виде
Вложение 15808
Вложений: 1
Re: Фоновая, пиксельная подсветка телевизора, Pixelight
Программа Pixelight , находится в режиме тестирования. Если есть еще желающие потестить, пишите. Теперь в программе есть только четыре зоны левая, права, вверх и низ. Для каждой зоны можно задавать любое количество точек(светодиодов) от 0 до 255. Для отключении зоны достаточно указать значение 0 в количестве точек отключаемой зоны. Зоны располагаются с лева на право по часовой стрелке, сделано это для того что бы можно было смонтировать светодиодную ленту не разрезая ее. Arduino ничего не знает о зонах и количестве светодиодов, эту информацию плата получает от программы, а это значит что Arduino не нужно перепрошивать при изменении конфигурации или размеров. Программа в отличии от ее предыдущей версии Ardulight претерпела большое количество изменений и исправлений, теперь она работает гораздо быстрей и не требовательна к ресурсам. В программе так же планируется добавить визуальный интерфейс настройки зон, эффекты визуализации в режиме простоя и т.д.Если у
кого то возникнут дельные советы, пишите, рассмотрю
Код для Arduino, пока без наворотов и без эффектов. Библиотека CyberLib в прикрепленном архиве
PHP код:
#include <CyberLib.h>
unsigned long nTime, rTime, t;
void setup()
{
UART_Init(115200);
StartSPI(0, 8, 1);//MODE0, DIV8, MSBFIRST
for(int16_t z=0; z<768; z++) SendSPI(0); //погасить все пикселы ленты
delay_ms(1); //пауза для инициализации ленты
}
void loop()
{ Start
uint8_t data;
t = millis(); //получаем текущее время
UART_SendByte(170); //отправляем байт синхронизации для ПК
if (UART_ReadByte(data)) //ждем от ПК первый байт с колличеством пикселей ленты
{
uint16_t pix_num = data*3; //получаем общее колличество цветовых каналов ленты
uint16_t eTime = micros()-rTime; //получим время с момента окончания загрузки
if( eTime < 900) delay_us(eTime); //ждем полной инициализации (минус 100мкс для загрузки след. байта)
for(uint16_t i=0; i<pix_num; i++) SendSPI(uart_read()); //читаем UART и сразу сбрасываем в ленту пиксели
rTime = micros(); //стартуем счетчик времени инициализации ленты
nTime = t; // //обнулить время простоя
} else {
if((t - nTime) > 4000) ///гасим подсветку если нет потока более 2 сек
{
for(int16_t z=0; z<768; z++) SendSPI(0); //погасить все пикселы ленты
nTime = t;
}
}
End }
//***************************************************************************
unsigned char uart_read(void)
{
uint8_t val;
for (uint8_t i=0; i<255; ++i) //цикл ожидания байта данных из UART порта, время ожидания 2560мкс
{
if(UART_ReadByte(val)) break; //если байт данных получен, то цикл прерывается
delay_us(10); //время ожидания байта
}
return val;
}
Для понимания настройки конфигов Вам поможет прикрепленное изображение
http://compcar.ru/forum/attachment.p...2&d=1367328531
Вложений: 1
Re: Фоновая, пиксельная подсветка телевизора, Pixelight
выкладываю архив с моими наработками...
Постараюсь почаще тут появляться и если кому-то не совсем понятно,объясню для чего каждая функция и блок каждой функции...
Особо много ушло времени на оптимизацию алгоритма преобразования HSV2RGB
но результат того стоил, теперь даже ардуинка может похвастать быстрым преобразованием HSV2RGB.
Много времени уделил оптимизации алгоритма этой фкнкции, потому что она очень хорошо подходит для автономной работы с пультом.... т.к. на вход ее можно подавать точку цвета на палитре насыщенность этой точки, и самое главное яркость
http://www.youtube.com/watch?v=H9iQ66ySrfI#!
Re: Фоновая, пиксельная подсветка телевизора, Pixelight
А для чего тебе HSV?
HSV очень удобна для поиска на изображении объектов по цвету, но для чего ее использовать в ленте я так и не понял.
Для баланса белого?
Re: Фоновая, пиксельная подсветка телевизора, Pixelight
Я же сказал для автономной работы ленты. ;)
ну например, используем ленту в качестве "доп освещеня"....
Например мы можем сделать белый или еще какой либо цыет ленты и спокойно менять яркость ленты... Это просто.... Если надо немного убавить яркость просто меняем значение цветов с 255 на 250 и т.д.
А если у лента в режиме переливающихся цветов. Расчет каждой составляющей цвета R,G,B с учетом установленной яркости немного усложняется... не сильно, но все же... с HSV2RGB это делается легко.
Ну и самый худший случай, примеру бегущие цвета(двигающаяся радуга), как на самом первом видео...
Преимущества при использовании HSV2RGB(пр моему мнению):
1. не нужно делать буфер из 160-255*3 пикселей = 765 байт.(Каждый пиксел спокойно рассчитывается математически прибавлением простого инеримента.
2. Мы можем спокойно подавать на вход значение яркости(изменение с пульта или датчика освещенности) не задумываясь как преобразовать каждое значение RGB.
3. абсолютно так же мы можем спокойно не задумываясь о преобразованиях RGB спокойно менять интенсивность цветовой палитры(насыщенность).
Прям как на телевизоре яркость насыщенность ;)
4. за счет изменения величины инкремента мы можем удлинять или укорачивать длину "радуги" (менять плотность "радуги"). в случае с массивом пришлось бы его перезаполнять.
5. если менять "полярность" инкремента на середине ленты получится водопад из радуги или восходящая радуга. изменение "полярностей" можно сделать в 4х точках это будет еще интереснее.
6.и все это, напомню, спокойно ложится на текущие установленные с пульта(или датчика освещенности) значения яркости и насыщенности.
половина автономных режимов работы ленты очень просто решаются при использовании HSV2RGB
для работы с компом эта функция вообще не нужна....
из всех функций может пригодится только гамма коррекция...
опять же для псевдо случайного выбора цвета(в режиме преливающегося света), мы можем разделить на 2 половинки цветовой круг (0-767 и 768-1536), и каждый раз получать случайное число то из одного, то из другого диапазона, тем самым добиваться постоянного переливания цвета при получении случайного числа... потом это число, а так же значения яркости и насыщенности подаем на функцию, а обратно получаем значения RGB.... все просто и легко! )
Re: Фоновая, пиксельная подсветка телевизора, Pixelight
мне вот интересно, под андроид программу обработки кадров можно написать. хватит ли мощностей обрабатывать видео поток и захватывать кадры. тут уже упоминалось о желании приделать к Mini PC (проц Allwinner A10/ 1GHz Cortex-A8 или двух ядерный RK3066)
Re: Фоновая, пиксельная подсветка телевизора, Pixelight
А как обстоят дела у Android с драйверами под FTDI?
Re: Фоновая, пиксельная подсветка телевизора, Pixelight
как я понял, FTDI необходим для создания виртуального COM порта, вроде начиная с 3 версии они есть. на практике с этим не сталкивался (под андроид не программировал) поэтому со 100% уверенностью не скажу. сам пару дней назад получил этот свисток MK802, ардуино и диоды еще в дороге. планирую на праздники соорудить подсветку
Re: Фоновая, пиксельная подсветка телевизора, Pixelight
Помогите выбрать подсветку - сейчас уже 3 варианта:
1. LightPack
2. PaintPack
С этими понятно, что они примерно одинаковые. Так же понятно как их купить / сделать
3. PixelLight
Кажется, что как-то круче выглядит подсветка, более четко работает - свет является как бы продолжением объекта с экрана. Или я не прав и просто так кажется из-за хорошо подобранной демки и эта подсветка такая же как вышеперечисленные?
Прочитал ветку, не особо понятно что нужно конкретно купить и где?
Кто разрабочик данной подсветки? Chip?
Для того что бы все примеры были рядышком для сравнения
Re: Фоновая, пиксельная подсветка телевизора, Pixelight