Результаты опроса: Нужна ли вам такая функция на телевизоре?

Голосовавшие
191. Вы ещё не голосовали в этом опросе
  • Нет.

    28 14.66%
  • Да.

    129 67.54%
  • Нужна , только руки кривые, самому не осилить

    34 17.80%
Показано с 1 по 10 из 921

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Пользователь
    Регистрация
    12.11.2011
    Возраст
    48
    Сообщений
    37
    Вес репутации
    177

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Цитата Сообщение от MAKC Посмотреть сообщение
    Проблемы:
    - непонятно почему мне пришлось изменить порядок чтения цветов. Исходный порядок закомментирован. Рабочий порядок представлен. Если кто-то объяснит почему так? я что-то не понимаю или в лайтпаке такая особенность или еще какая вариант буду очень благодарен.
    на странице FastSPI есть вот такая фраза
    sometimes the strips from china wire oddly, and it may be something like:
    struct CRGB { unsigned char b; unsigned char r; unsigned char g; }
    что по русски значит примерно следующее:
    некоторые китайские ленты сделаны криво и порядок цветов может отличаться.
    Судя по косяку с подписями к пинам Data и Clock это и есть объяснение проблемы.

    После проверки оказалось, что действительно вместо
    strip.setPixelColor(i, Color(red, green, blue));
    надо писать
    strip.setPixelColor(i, Color(blue, red, green));

    Правильный скетч следующий, но делайте поправку на реализацию своей ленточки.
    Надеюсь, что у вас ленточка окажется с меньшим количеством косяков

    Код:
    #include <SPI.h>
    #include <WS2801.h>
    
    unsigned long blank = 0;
    int zones    = 20;
    int dataPin  = 2;
    int clockPin = 3;
    WS2801 strip = WS2801(zones, dataPin, clockPin);
    
    int leds = zones * 3;
    
    void setup()
    {
      strip.begin();
      strip.show();
      Serial.begin(115200);
    }
    
    void loop()
    {
      if (Serial.available() > leds)
      {
        if (Serial.read() == 255)  //проверка префикса
        {
          for (int i = 0; i < zones; i++)
          {
            // прочитать данные о цветах из порта в массив
            byte red   = Serial.read();
            byte green = Serial.read();
            byte blue  = Serial.read();
    
            // так должно быть по правильному
            //strip.setPixelColor(i, Color(red, green, blue));
            
            // но на китайской ленточке перепутан порядок цветов, поэтому так
            strip.setPixelColor(i, Color(blue, red, green));
          }
          blank = 0;
        }
      }
      else
      {
        if (blank > 100000)
        {
          blank = 0;
          for (int i = 0; i < zones; i++)
          {
            strip.setPixelColor(i, Color(0, 0, 0));
          }
        }
        blank++;
      }
      strip.show();
    }
    
    // Create a 24 bit color value from R,G,B
    uint32_t Color(byte r, byte g, byte b)
    {
      uint32_t c;
      c = r;
      c <<= 8;
      c |= g;
      c <<= 8;
      c |= b;
      return c;
    }
    Эх и китайцы
    Последний раз редактировалось MAKC; 26.02.2012 в 17:31.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •