Яркость, задержка времни. Аналог Ambilight на Android TV Box (KODI), Arduino UNO R3

ernestoguavaraserna
Offline
Зарегистрирован: 18.01.2016

Прошу помощи(в програмировании Arduino разбераюсь на уровне логики, знаний нет). собрал подсветку на 180 светодеодов но пока для теста 59, запустил и она работает но есть проблемы

Она работает тяжеловато для глаз, регулировку максимальной яркости я дописал (добрые люди подсказали кусок кода) но резкоть смены цветов не удавлетворяет (мня аж голова кружится)

/www.youtube.com/watch?v=0_ukp0PuH2Q моя запись

 

я даже не знаю как эсто сформулировать, можете ли вы дописать кусок кода плавности вспихивания и затухания светодиодовд, регулировка временем может быть. Еще хотелось бы возможность регулировкий шага возгорания ( у меня 40 яркость, 100% за 40, шаг 5%). Или допустим загорается

Скетч 

//////////
// Requires: https://github.com/FastLED/FastLED/releases/tag/3.0.3
//
// Arduino interface for the use of ws2812 operated LEDs
// Uses Adalight protocol and is compatible with Boblight, Prismatik etc
// "Magic Word" for synchronisation is 'Ada' followed by LED High, Low and Checksum
//
#include <FastLED.h>

///// User definitions /////

// Define YOUR number of LEDs
#define NUM_LEDS 59

// Define YOUR Input Pin
#define PIN 6

// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 115200

// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;

// initialise LED-array
CRGB leds[NUM_LEDS];

void setup()
{
  
  FastLED.addLeds<WS2812B, PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(40);
  
  // initial RGB flash
  LEDS.showColor(CRGB(255, 0, 0));
  delay(500);
  LEDS.showColor(CRGB(0, 255, 0));
  delay(500);
  LEDS.showColor(CRGB(0, 0, 255));
  delay(500);
  LEDS.showColor(CRGB(0, 0, 0));
  
  Serial.begin(serialRate);
  Serial.print("Ada\n"); // Send "Magic Word" string to host
  
}

void loop() { 
  // wait for first byte of Magic Word
  for(i = 0; i < sizeof prefix; ++i) {
    waitLoop: while (!Serial.available()) ;;
    // Check next byte in Magic Word
    if(prefix[i] == Serial.read()) continue;
    // otherwise, start over
    i = 0;
    goto waitLoop;
  }
  
  // Hi, Lo, Checksum
  
  while (!Serial.available()) ;;
  hi=Serial.read();
  while (!Serial.available()) ;;
  lo=Serial.read();
  while (!Serial.available()) ;;
  chk=Serial.read();
  
  // if checksum does not match go back to wait
  if (chk != (hi ^ lo ^ 0x55))
  {
    i=0;
    goto waitLoop;
  }
  
  memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
  // read the transmission data and set LED values
  for (uint8_t i = 0; i < NUM_LEDS; i++) {
    byte r, g, b;    
    while(!Serial.available());
    r = Serial.read();
    while(!Serial.available());
    g = Serial.read();
    while(!Serial.available());
    b = Serial.read();
    leds[i].r = r;
    leds[i].g = g;
    leds[i].b = b;
  }
  // shows new values
 FastLED.show();
}

я все перепробовал по настройке скрипта в Android, он неможет это регулировать ИМХО

спасибо

ernestoguavaraserna
Offline
Зарегистрирован: 18.01.2016

Дополнияю схемой расключения

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ernestoguavaraserna пишет:

можете ли вы дописать кусок кода плавности вспихивания и затухания светодиодовд, регулировка временем может быть. Еще хотелось бы возможность регулировкий шага возгорания ( у меня 40 яркость, 100% за 40, шаг 5%). Или допустим загорается

Можем, конечно. Но тут два варианта: либо Вы пишите сами, а здесь задаёте конкретные вопросы по тем местам где работает не так как надо, либо Вы постите свой запрос в другом разделе и там Вам это напишут за некую (по договорённости) денюшку.

ernestoguavaraserna
Offline
Зарегистрирован: 18.01.2016

ясно,  спасибо

Пошол по немного другому пути, нашел скет в котом 2,3 или сколько хочешь светодиодов работают как один

себе сделал 2 за 1

//////////
//
// Arduino interface for the use of ws2812 operated LEDs
// Uses Adalight protocol and is compatible with Boblight, Prismatik etc
// "Magic Word" for synchronisation is 'Ada' followed by LED High, Low and Checksum
//
#include <FastLED.h>

///// User definitions /////

// Define the number of LEDs
#define NUM_LEDS 27

// Define SPI Pin
#define PIN 6

// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 115200

// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;

// initialise LED-array
CRGB leds[59];

void setup()
{
  
  FastLED.addLeds<WS2812, PIN, GRB>(leds, 59).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(  40 );
  
  // initial RGB flash
  LEDS.showColor(CRGB(255, 0, 0));
  delay(500);
  LEDS.showColor(CRGB(0, 255, 0));
  delay(500);
  LEDS.showColor(CRGB(0, 0, 255));
  delay(500);
  LEDS.showColor(CRGB(0, 0, 0));
  
  Serial.begin(serialRate);
  Serial.print("Ada\n"); // Send "Magic Word" string to host
  
}

void loop() { 
  // wait for first byte of Magic Word
  for(i = 0; i < sizeof prefix; ++i) {
    waitLoop: while (!Serial.available()) ;;
    // Check next byte in Magic Word
    if(prefix[i] == Serial.read()) continue;
    // otherwise, start over
    i = 0;
    goto waitLoop;
  }
  
  // Hi, Lo, Checksum
  
  while (!Serial.available()) ;;
  hi=Serial.read();
  while (!Serial.available()) ;;
  lo=Serial.read();
  while (!Serial.available()) ;;
  chk=Serial.read();
  
  // if checksum does not match go back to wait
  if (chk != (hi ^ lo ^ 0x55))
  {
    i=0;
    goto waitLoop;
  }
  
  memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
  // read the transmission data and set LED values
  for (uint8_t i = 0; i < NUM_LEDS; i++) {
    byte r, g, b;    
    while(!Serial.available());
    r = Serial.read();
    while(!Serial.available());
    g = Serial.read();
    while(!Serial.available());
    b = Serial.read();
        if  (i == 0)
    {
    leds[0].r = r;
    leds[0].g = g;
    leds[0].b = b;
    leds[1].r = r;
    leds[1].g = g;
    leds[1].b = b;     
    }
    else if  (i == 1)
    {
    leds[2].r = r;
    leds[2].g = g;
    leds[2].b = b;
    leds[3].r = r;
    leds[3].g = g;
    leds[3].b = b;     
    }
    else if  (i == 2)
    {
    leds[4].r = r;
    leds[4].g = g;
    leds[4].b = b;
    leds[5].r = r;
    leds[5].g = g;
    leds[5].b = b;     
    }
    else if  (i == 3)
    {
    leds[6].r = r;
    leds[6].g = g;
    leds[6].b = b;
    leds[7].r = r;
    leds[7].g = g;
    leds[7].b = b;     
    }
    else if  (i == 4)
    {
    leds[8].r = r;
    leds[8].g = g;
    leds[8].b = b;
    leds[9].r = r;
    leds[9].g = g;
    leds[9].b = b;     
    }
    else if  (i == 5)
    {
    leds[10].r = r;
    leds[10].g = g;
    leds[10].b = b;
    leds[11].r = r;
    leds[11].g = g;
    leds[11].b = b;     
    }
    else if  (i == 6)
    {
    leds[12].r = r;
    leds[12].g = g;
    leds[12].b = b;
    leds[13].r = r;
    leds[13].g = g;
    leds[13].b = b;     
    }
    else if  (i == 7)
    {
    leds[14].r = r;
    leds[14].g = g;
    leds[14].b = b;
    leds[15].r = r;
    leds[15].g = g;
    leds[15].b = b;     
    }    
    else if  (i == 8)
    {
    leds[16].r = r;
    leds[16].g = g;
    leds[16].b = b;
    leds[17].r = r;
    leds[17].g = g;
    leds[17].b = b;     
    }
	else if  (i == 9)
    {
    leds[18].r = r;
    leds[18].g = g;
    leds[18].b = b;
    leds[19].r = r;
    leds[19].g = g;
    leds[19].b = b;     
    }
	else if  (i == 10)
    {
    leds[20].r = r;
    leds[20].g = g;
    leds[20].b = b;
    leds[21].r = r;
    leds[21].g = g;
    leds[21].b = b;     
    }
	else if  (i == 11)
    {
    leds[22].r = r;
    leds[22].g = g;
    leds[22].b = b;
    leds[23].r = r;
    leds[23].g = g;
    leds[23].b = b;      
    }
	else if  (i == 12)
    {
    leds[24].r = r;
    leds[24].g = g;
    leds[24].b = b;
    leds[25].r = r;
    leds[25].g = g;
    leds[25].b = b;     
    }
	else if  (i == 13)
    {
    leds[26].r = r;
    leds[26].g = g;
    leds[26].b = b;
    leds[27].r = r;
    leds[27].g = g;
    leds[27].b = b;     
    }
	else if  (i == 14)
    {
    leds[28].r = r;
    leds[28].g = g;
    leds[28].b = b;
    leds[29].r = r;
    leds[29].g = g;
    leds[29].b = b;     
    }
	else if  (i == 15)
    {
    leds[30].r = r;
    leds[30].g = g;
    leds[30].b = b;
    leds[31].r = r;
    leds[31].g = g;
    leds[31].b = b;     
    }
	else if  (i == 16)
    {
    leds[32].r = r;
    leds[32].g = g;
    leds[32].b = b;
    leds[33].r = r;
    leds[33].g = g;
    leds[33].b = b;     
    }
	else if  (i == 17)
    {
    leds[34].r = r;
    leds[34].g = g;
    leds[34].b = b;
    leds[35].r = r;
    leds[35].g = g;
    leds[35].b = b;     
    }
	else if  (i == 18)
    {
    leds[36].r = r;
    leds[36].g = g;
    leds[36].b = b;
    leds[37].r = r;
    leds[37].g = g;
    leds[37].b = b;     
    }
	else if  (i == 19)
    {
    leds[38].r = r;
    leds[38].g = g;
    leds[38].b = b;
    leds[39].r = r;
    leds[39].g = g;
    leds[39].b = b;     
    }
	else if  (i == 20)
    {
    leds[40].r = r;
    leds[40].g = g;
    leds[40].b = b;
    leds[41].r = r;
    leds[41].g = g;
    leds[41].b = b;     
    }
	else if  (i == 21)
    {
    leds[42].r = r;
    leds[42].g = g;
    leds[42].b = b;
    leds[43].r = r;
    leds[43].g = g;
    leds[43].b = b;     
    }
	else if  (i == 22)
    {
    leds[44].r = r;
    leds[44].g = g;
    leds[44].b = b;
    leds[45].r = r;
    leds[45].g = g;
    leds[45].b = b;     
    }
	else if  (i == 23)
    {
    leds[46].r = r;
    leds[46].g = g;
    leds[46].b = b;
    leds[47].r = r;
    leds[47].g = g;
    leds[47].b = b;     
    }
	else if  (i == 24)
    {
    leds[48].r = r;
    leds[48].g = g;
    leds[48].b = b;
    leds[49].r = r;
    leds[49].g = g;
    leds[49].b = b;     
    }
	else if  (i == 25)
    {
    leds[50].r = r;
    leds[50].g = g;
    leds[50].b = b;
    leds[51].r = r;
    leds[51].g = g;
    leds[51].b = b;     
    }
	else if  (i == 26)
    {
    leds[52].r = r;
    leds[52].g = g;
    leds[52].b = b;
    leds[53].r = r;
    leds[53].g = g;
    leds[53].b = b;     
    }
	else if  (i == 27)
    {
    leds[54].r = r;
    leds[54].g = g;
    leds[54].b = b;
    leds[55].r = r;
    leds[55].g = g;
    leds[55].b = b;     
    }
    }
  // shows new values
 FastLED.show();
}