Показать сообщение отдельно
Старый 01.06.2013, 22:38   #444
OsDima
Старший Пользователь
 
Регистрация: 25.06.2011
Возраст: 54
Город: Красноярск
Регион: 24
Машина: Nissan Wingroad WFY-11 2003
Сообщений: 166
OsDima will become famous soon enough
По умолчанию

Цитата:
Сообщение от admin Посмотреть сообщение
Думаю что возможно, http://compcar.ru/forum/showthread.php?t=9462
Тема хорошая. Но про мой чип в светодиодах - 2811 там нет. Библиотека дугая и скейтч надо переделывать под неё. SPI уже распаян на реле и поэтому попробывать немогу. Надо еще UNO покупать (это не сейчас). Тем более что мне надо всего одна цифровая линия и опыта пока мало в написании и подгонки программ. LED.showRGB - пока не понимаю как организовать аргументы для неё. Хоть программа по логике очень проста но застрял на этом:

#include "FastSPI_LED2.h"

WS2811Controller800Mhz<5> LED; // задаём через какую ногу выводятся данные для светодиодов
unsigned long nTime, rTime, t;

void setup()
{
// инициализация ленты
{ LED.init(); }
delay(1); //пауза для инициализации ленты
//--------------------
Serial.begin(115200);
}

void loop()
{
uint8_t data;
t = millis(); //получаем текущее время
Serial.write(170); //отправляем байт синхронизации для ПК
if (Serial.read()) //ждем от ПК первый байт с колличеством пикселей ленты
{
uint16_t pix_num = data*3; //получаем общее колличество цветовых каналов ленты
uint16_t eTime = micros()-rTime; //получим время с момента окончания загрузки
if( eTime < 900) delay(eTime); //ждем полной инициализации (минус 100мкс для загрузки след. байта)
for(uint16_t i=0; i<pix_num; i++)
{ int num = 5; LED.showRGB(num, Serial.read()); //читаем UART и сразу сбрасываем в ленту пиксели
__________________________________________________ ________________________________________________
rTime = micros(); //стартуем счетчик времени инициализации ленты
nTime = t; // //обнулить время простоя
} else {
if((t - nTime) > 4000) ///гасим подсветку если нет потока более 2 сек
{
for(int16_t z=0; z<768; z++) LED.init(); //погасить все пикселы ленты
nTime = t;
}
}
}
//************************************************** *************************
unsigned char uart_read(void)
{ uint8_t val;
for (uint8_t i=0; i<255; ++i) //цикл ожидания байта данных из UART порта, время ожидания 2560мкс
{
if(Serial.read()>0) break; //если байт данных получен, то цикл прерывается
delay(10); //время ожидания байта
}
return val;
}
OsDima вне форума   Ответить с цитированием