Программа 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;
}
Для понимания настройки конфигов Вам поможет прикрепленное изображение