А похвалимся художественной самодеятельностю на WS2812?

sadman41
Offline
Зарегистрирован: 19.10.2016

Так я фантазировал висюльки из обычных светодиодов заменить на адресные. Чтобы эффект в помещение шел. Есть у меня такая - 200 светодиодов на десяти линиях и проводок прозрачный. Смотрится более-менее.... Но вот адресные - все, как на подбор, - монстрообразны. Я бы даже был согласен не на полную яркость.

pasha413
Offline
Зарегистрирован: 27.11.2016

допилил я код, немного изменил эффекты. гирлянда уже на елке, единственное скорость некоторых эффектов высоковата, но у espшки один аналоговый вход. 

#include "FastLED.h"

unsigned long change_time = 30;          // время смены режима секунд
unsigned long last_change;
int modes = 25;                          // Количество режимов
int ledmode = 0;                         // Стартовый режим
int fps = 20;                            // значение скорости еффектов 
int pos = 0;
int pos1 = 0;
bool part_flag = false;
int color_x = 0;
int BRIGHTNESS = 5;     // Стартовое значение яркости

#define DATA_1  1       // Определяем пин для ленты 1
#define DATA_2  3       // Определяем пин для ленты 2
#define DATA_3  5       // Определяем пин для ленты 3
#define DATA_4  4       // Определяем пин для ленты 4
#define DATA_5  0       // Определяем пин для ленты 5
#define DATA_6  2       // Определяем пин для ленты 6
//#define DATA_7  14      // Определяем пин для ленты 7
//#define DATA_8  12      // Определяем пин для ленты 8
//#define DATA_9  13      // Определяем пин для ленты 9
//#define DATA_10  15     // Определяем пин для ленты 10
#define BRIGHT_RES A0   // потенциометр яркости
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS    49
#define NUM_STRIPS  6

CRGB leds[NUM_STRIPS][NUM_LEDS];

void setup() {
  Serial.begin(115200);  // Для отладки
  delay(3000);

  FastLED.addLeds<LED_TYPE,DATA_1,COLOR_ORDER>(leds[0], NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE,DATA_2,COLOR_ORDER>(leds[1], NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE,DATA_3,COLOR_ORDER>(leds[2], NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE,DATA_4,COLOR_ORDER>(leds[3], NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE,DATA_5,COLOR_ORDER>(leds[4], NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE,DATA_6,COLOR_ORDER>(leds[5], NUM_LEDS).setCorrection(TypicalLEDStrip);
//  FastLED.addLeds<LED_TYPE,DATA_7,COLOR_ORDER>(leds[6], NUM_LEDS).setCorrection(TypicalLEDStrip);
//  FastLED.addLeds<LED_TYPE,DATA_8,COLOR_ORDER>(leds[7], NUM_LEDS).setCorrection(TypicalLEDStrip);
//  FastLED.addLeds<LED_TYPE,DATA_9,COLOR_ORDER>(leds[8], NUM_LEDS).setCorrection(TypicalLEDStrip);
//  FastLED.addLeds<LED_TYPE,DATA_10,COLOR_ORDER>(leds[9], NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);

  pinMode(BRIGHT_RES, INPUT);
}

uint8_t gHue = 0; // rotating "base color" used by many of the patterns
  
void loop() {
  BRIGHTNESS = map(analogRead(BRIGHT_RES), 0, 985, 10, 255);
  FastLED.setBrightness(BRIGHTNESS);
  
  if ((millis() - last_change)/1000 > change_time) {
//    ledmode ++;
    ledmode = random(0, modes);
    if (ledmode > modes) ledmode = 0;
    Serial.println(String("Mode: ") + ledmode);
    last_change = millis();
  }
  switch (ledmode) {
    case 0:   rainbow(1, 0, 0);          FastLED.show(); break;
    case 1:   rainbow(12, 0, 0);         FastLED.show(); break;
    case 2:   rainbow(50, 0, 0);         FastLED.show(); break;
    case 3:   rainbow(1, 1, 0);          FastLED.show(); break;
    case 4:   rainbow(12, 1, 0);         FastLED.show(); break;
    case 5:   rainbow(50, 1, 0);         FastLED.show(); break;
    case 6:   rainbow(1, 0, 1);          FastLED.show(); break;
    case 7:   rainbow(1, 1, 1);          FastLED.show(); break;
    case 8:   rainbow(15, 0, 1);         FastLED.show(); break;
    case 9:   rainbow(15, 1, 1);         FastLED.show(); break;
    case 10:  rainbowWithGlitter(0);     FastLED.show(); break;
    case 11:  rainbowWithGlitter(1);     FastLED.show(); break;
    case 12:  confetti();                FastLED.show(); break;  // x-------------я
    case 13:  sinelon();                 FastLED.show(); break;  // вверх/вниз цвета
    case 14:  bpm();                     FastLED.show(); break;  // вверх/вниз цвета больше 
    case 15:  juggle();                  FastLED.show(); break;
    case 16:  horizont_2(100);           FastLED.show(); FastLED.delay(1000/fps); break;
    case 17:  horizont_2(200);           FastLED.show(); FastLED.delay(1000/fps); break;
    case 18:  horizont_2(500);           FastLED.show(); FastLED.delay(1000/fps); break;
    case 19:  horizont_3(100);           FastLED.show(); FastLED.delay(1000/fps); break;
    case 20:  horizont_3(200);           FastLED.show(); FastLED.delay(1000/fps); break;
    case 21:  horizont_3(500);           FastLED.show(); FastLED.delay(1000/fps); break;
    case 22:  snow_1();                  FastLED.show(); break;
    case 23:  snow_2();                  FastLED.show(); break;
    case 24:  up_to_down_circle();       FastLED.show(); break;
    case 25:  up_to_down_circle_color(); FastLED.show(); break;
    case 26:  circular();                FastLED.show(); break;
//    case 27:           FastLED.show(); break;
//    case 28:           FastLED.show(); break;                
//    case 29:           FastLED.show(); break;
//    case 30:           FastLED.show(); break;
//    case 31:           FastLED.show(); break;
//    case 32:           FastLED.show(); break;
  }
//  FastLED.delay(1000/fps_rezistor); 
  EVERY_N_MILLISECONDS( 1 ) { gHue++; } // slowly cycle the "base color" through the rainbow
}

void rainbow(int deltahue, bool t, bool u){
  for(int i=0; i < NUM_STRIPS; i++){
    static uint8_t a = 0;
    if (u == 0) a = gHue;
    else a++;
    if (t == 0) deltahue;
    else deltahue++;
    fill_rainbow(leds[i], NUM_LEDS, a, deltahue);
  }
}

void rainbowWithGlitter(bool t){
  rainbow(1, t, 0);
  addGlitter(80);
}

void addGlitter(fract8 chanceOfGlitter){
  if( random8() < chanceOfGlitter) {
    for(int i=0; i < NUM_STRIPS; i++){
      leds[i][ random16(NUM_LEDS) ] += CRGB::White;
    }
  }
}

void confetti(){
  int pos = random16(NUM_LEDS);
  for(int i=0; i < NUM_STRIPS; i++){
    fadeToBlackBy(leds[i], NUM_LEDS, 10);
    leds[i][pos] += CHSV(gHue + random8(64), 200, 255);
  }
}

void sinelon(){
  int pos = beatsin16(13,0,NUM_LEDS-1);
  for(int i=0; i < NUM_STRIPS; i++){
    fadeToBlackBy(leds[i], NUM_LEDS, 20);
    leds[i][pos] += CHSV(gHue, 255, 192);
  }
}

void bpm(){
  uint8_t BeatsPerMinute = 62;
  CRGBPalette16 palette = PartyColors_p;
  uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
  for(int ii = 0; ii < NUM_LEDS; ii++) { //9948
    for(int i=0; i < NUM_STRIPS; i++){
      leds[i][ii] = ColorFromPalette(palette, gHue+(ii*2), beat-gHue+(ii*10));
    }
  }
}

void juggle(){
  for(int i=0; i < NUM_STRIPS; i++){
    fadeToBlackBy( leds[i], NUM_LEDS, 20);
  }
  byte dothue = 0;
  for(int ii = 0; ii < 8; ii++) {
    for(int i=0; i < NUM_STRIPS; i++){
      leds[i][beatsin16(ii+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 255);
    }
    dothue += 32;
  }
}

void horizont_2(int k){
  for(int i=0; i < NUM_STRIPS; i++){
    fadeToBlackBy(leds[i], NUM_LEDS, k);
  }
  if(pos1 > NUM_STRIPS-1) {pos1 = 0; color_x = color_x+1;}
  if(color_x > 3) color_x = 0;
  CRGB color[] = {CRGB(255, 0, 0), CRGB(0, 255, 0), CRGB(0, 0, 255), CRGB(255, 255, 255),
                  CRGB(255, 0, 255), CRGB(0, 255, 255), CRGB(255, 255, 0), CRGB(255, 150, 150)};
  for (int i=0; i <= NUM_LEDS-1; i++){
    leds[pos1][i] = color[color_x];
  }
  pos1 = pos1+1;
}

void horizont_3(int k){
  for(int i=0; i < NUM_STRIPS; i++){
    fadeToBlackBy(leds[i], NUM_LEDS, k);
  }
  if(pos1 > NUM_STRIPS-1) pos1 = 0;
  for (int i=0; i <= NUM_LEDS-1; i++){
    leds[pos1][i] = CHSV( gHue, 255, 192);
  }
  pos1 = pos1+1;
}

void snow_1(){
  if(pos1 > NUM_LEDS*2-1) pos1 = 0;
  for(int i=0; i < NUM_STRIPS; i++){
    fadeToBlackBy(leds[i], NUM_LEDS, 50);
  }
  for(int i=0; i < NUM_STRIPS; i++){
    leds[i][NUM_LEDS-pos1/2-1] = CRGB(255, 255, 255);
  }
  pos1 = pos1+1;
}

struct snow_line{   // объявляем структуру для ленты снега
    byte pos;
    long end_time;
    int  start_delay;
} type;
snow_line snow_2_vars[NUM_STRIPS];

void snow_2(){  
  for(int i=0; i < NUM_STRIPS; i++){
    fadeToBlackBy(leds[i], NUM_LEDS, 40);
  }
  for(byte i=0; i < NUM_STRIPS; i++){
    if(snow_2_vars[i].pos > NUM_LEDS*2-1){   // Если дошли до конца ленты то...
      snow_2_vars[i].pos = 0;              // Сбрасываем позицию на ноль
      snow_2_vars[i].end_time = millis();  // Записываем время окончания эффекта
      
    }
    if(snow_2_vars[i].pos == 0){           //  Если задана нулевая позиция - значит начало, то...
      snow_2_vars[i].start_delay = random(10, 3000);    // Генерируем врменную задержку запуска эффекта (до 3х секунд)
    }
    if(millis() > snow_2_vars[i].end_time+snow_2_vars[i].start_delay){  // Если вышла задержка перед запуском эффекта, запускаем...
      leds[i][NUM_LEDS-snow_2_vars[i].pos/2-1] = CRGB(255, 255, 200);
      if(NUM_LEDS-snow_2_vars[i].pos/2-1 > 0 && NUM_LEDS-snow_2_vars[i].pos/2-1 < NUM_LEDS){
        leds[i][NUM_LEDS-snow_2_vars[i].pos/2-2] = CRGB(20, 20, 20);
      }
      snow_2_vars[i].pos++; 
    }
  }
}

void up_to_down_circle(){
  if(!part_flag){
    if(pos < pos1){ pos = NUM_LEDS-1; pos1++; }
    if(pos1 >  NUM_LEDS-1){ /*pos1 = 0*/; part_flag = !part_flag; }
    for(int i=0; i < NUM_STRIPS; i++){
      for(int n=NUM_LEDS-1; n >= pos1; n--){
        leds[i][n] = CRGB( 0, 0, 0); // гасим всё кроме собранных внизу
      }
      //fadeToBlackBy( leds[i], NUM_LEDS, 30);
    }
    for (int strip=0; strip < NUM_STRIPS; strip++){
//      leds[strip][pos] = CHSV( gHue, 255, 255);
      leds[strip][pos] = CRGB(200, 150, 50);
    }
    pos = pos-1;
  } else {
    if(pos == 23 && pos1 == 25){pos = 0; pos1 = 24;} // Если старт этой части эффекта, то перезадаём позиции
    for(int i=0; i < NUM_STRIPS; i++){
      for(int n = 0; n < NUM_LEDS-1-pos1; n++){
        leds[i][n] = CRGB(0, 0, 0); // гасим всё кроме собранных ВВЕРХУ
        //Serial.println(n);
        //delay(100);
      }
    }
    for (int strip=0; strip < NUM_STRIPS; strip++){
      leds[strip][pos] = CRGB(200, 150, 50);
    }
    pos--;
    if(pos < 0){ pos = NUM_LEDS-1-pos1; pos1--; }
    if(pos1 <= 0) {part_flag = !part_flag; pos1 = 1; pos = -1;}
  }
}

void up_to_down_circle_color(){
  if(!part_flag){
    if(pos < pos1){ pos = NUM_LEDS-1; pos1++; }
    if(pos1 >  NUM_LEDS-1){ /*pos1 = 0*/; part_flag = !part_flag; }
    for(int i=0; i < NUM_STRIPS; i++){
      for(int n=NUM_LEDS-1; n >= pos1; n--){
        leds[i][n] = CRGB(0, 0, 0); // гасим всё кроме собранных внизу
      }
      //fadeToBlackBy( leds[i], NUM_LEDS, 30);
    }
    for (int strip=0; strip < NUM_STRIPS; strip++){
      leds[strip][pos] = CHSV(gHue, 255, 255);
//      leds[strip][pos] = CHSV(random8(), random8(), random8());
    }
    pos = pos-1;
  } else {
    if(pos == 23 && pos1 == 25){pos = 0; pos1 = 24;} // Если старт этой части эффекта, то перезадаём позиции
    for(int i=0; i < NUM_STRIPS; i++){
      for(int n = 0; n < NUM_LEDS-1-pos1; n++){
        leds[i][n] = CRGB(0, 0, 0); // гасим всё кроме собранных ВВЕРХУ
        //Serial.println(n);
        //delay(100);
      }
    }
    for (int strip=0; strip < NUM_STRIPS; strip++){
      leds[strip][pos] = CHSV(random(0, 256), 255, 255);
    }
    pos--;
    if(pos < 0){ pos = NUM_LEDS-1-pos1; pos1--; }
    if(pos1 <= 0) {part_flag = !part_flag; pos1 = 1; pos = -1;}
  }
}

void circular() {
  for (int i = 0; i < NUM_STRIPS; i++) {
    fadeToBlackBy(leds[i], NUM_LEDS, 100);
  }
  if (pos1 > NUM_LEDS - 1) {
    pos1 = 0;
    color_x = color_x + 1;
  }
  if (color_x > 3) color_x = 0;
  CRGB color[] = {CRGB(255, 0, 0), CRGB(0, 255, 0), CRGB(0, 0, 255), CRGB(255, 255, 255),
                  CRGB(255, 0, 255), CRGB(0, 255, 255), CRGB(255, 255, 0), CRGB(255, 150, 150)
                 };
  for (int i = 0; i <= NUM_STRIPS - 1; i++) {
    leds[i][pos1] = color[color_x];
    delay(5);
    FastLED.show();
  }
  pos1 = pos1 + 1;
}

 

romster
Offline
Зарегистрирован: 15.04.2013

Ну вы Ёлку нам покажите с гирляндой, спасибо за код. Желательно видео.

GennOk
Offline
Зарегистрирован: 30.03.2015

понравилось очень, вот такое решение https://youtu.be/7VZa0Lcj97M сама идея. На Ардуинке собрано похожее https://youtu.be/_d43bXjtRsk

sadman41
Offline
Зарегистрирован: 19.10.2016

Я тоже что-то загорелся давеча этим 1000S, но потом почитал и притух. На led-форумах его разносят в пух и прах, типа схемотехника херовая, FPS неконтролируемо падает, только 16 программ, еще там что-то...  Лучше выглядит K-1000C.

Хотя, на елку корпусированный контроллер за 1300р - это вообще сказочно.

romster
Offline
Зарегистрирован: 15.04.2013

sadman41 пишет:

Хотя, на елку корпусированный контроллер за 1300р - это вообще сказочно.

на ёлку вполне справится arduino или esp.

romster
Offline
Зарегистрирован: 15.04.2013

Вот моя леджия:  ардуино + glediator + лоджия https://youtu.be/Dlhg67HnLFw

sadman41
Offline
Зарегистрирован: 19.10.2016

romster пишет:

sadman41 пишет:

Хотя, на елку корпусированный контроллер за 1300р - это вообще сказочно.

на ёлку вполне справится arduino или esp.

Я четвертый год на проминьке кручу фонарики и могу вам точно сказать, повторившись, что корпусированный контроллер за 1300р - это сказочно ))

А так-то да - свой колхоз всегда милее, даже если он просто обмотан строительным скочтем.

pasha413
Offline
Зарегистрирован: 27.11.2016

Вот ссылки на видео, пока что 6 гирлянд, ещё 4 добавлю когда лента придет, все режимы не снимал...
https://yadi.sk/i/ilNfFziVmPV57Q
https://yadi.sk/i/PYnarbnkWYWJFA
https://yadi.sk/i/xeJ3CJSQkDgONQ
Вот на столе, питание с блока питания ПК, родные провода выпаял, запаяли свои, зелёный сразу на черный.
https://yadi.sk/i/Mxro4ugesQNeiw

romster
Offline
Зарегистрирован: 15.04.2013

sadman41 пишет:

А так-то да - свой колхоз всегда милее, даже если он просто обмотан строительным скочтем.

ну вот у нас в городе можно без проблем в том же кристал-электро купить различного размера коробочки и туда все спрятать и даже дырочек насверлить. конечно контроллер с мотком проводов это только на период отладки.

romster
Offline
Зарегистрирован: 15.04.2013

pasha413 пишет:
зелёный сразу на черный. https://yadi.sk/i/Mxro4ugesQNeiw

я вот тоже буду питать с БП компа, думаю сделать управление БП с ардуины, да и запитать сам контроллер можно от дежурного питалова БП.

pasha413
Offline
Зарегистрирован: 27.11.2016

Тоже так думал, но пока так, времени не хватило, хотел ещё вебинтерфейс для смены режимов, регулировки скорости и яркости

sadman41
Offline
Зарегистрирован: 19.10.2016

romster пишет:

sadman41 пишет:

А так-то да - свой колхоз всегда милее, даже если он просто обмотан строительным скочтем.

ну вот у нас в городе можно без проблем в том же кристал-электро купить различного размера коробочки и туда все спрятать и даже дырочек насверлить. конечно контроллер с мотком проводов это только на период отладки.

В такую и засунул. Вместе с энкодерами, питателем и IR. Уже две реконструкции произвел. Поэтому знаю, о чем говорю ))

romster
Offline
Зарегистрирован: 15.04.2013

эх, 3d принтер уже надо покупать, чтоб корпуса печатать.

romster
Offline
Зарегистрирован: 15.04.2013

pasha413 пишет:
пока что 6 гирлянд, ещё 4 добавлю

красивая ёлка получилась.

pasha413
Offline
Зарегистрирован: 27.11.2016

По крайней мере сын доволен)

romster
Offline
Зарегистрирован: 15.04.2013

А сколькими ws2812b esp8266 способна управлять, думаю заменить Arduino mega на esp8266.

pasha413
Offline
Зарегистрирован: 27.11.2016

Точно не помню, но вроде 512 на канал

romster
Offline
Зарегистрирован: 15.04.2013

pasha413 пишет:
Точно не помню, но вроде 512 на канал

я использую 600 диодов, для этого использую Mega2650, но  esp8266 производительней ведь.

pasha413
Offline
Зарегистрирован: 27.11.2016

romster пишет:
я использую 600 диодов, для этого использую Mega2650, но  esp8266 производительней ведь.

Думаю потянет

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

А я все елачками балуюсь. Наделал на подарки таких.

3 батарейки AAA и конроллер Attiny85
https://youtu.be/V-u19rA-D9Y

Елку делал в прошлом году - 10 метеоров на WS2812 и звезда большая. Контроллер ставил ESP8266. Но пришлось бить все это на сегменты и писать программу для каждого сегментами этакими сценариями

Все таки для больших проектов нормальные контроллеры, где эффекты можно создавать с помощью специальных программ - это сила

koloboc74
Offline
Зарегистрирован: 21.07.2015

Я тут на медне доделал под себя погодную тучу. Типа погоду показывает . И переделал скетч ring clock , на 60 или 120 лампочек.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Как показывает, откеда данные берет?

koloboc74
Offline
Зарегистрирован: 21.07.2015

Время берет с гугла. Вот ссылка одним словом (не маё)  https://www.youtube.com/watch?v=5c7LYEAVJHg

ku-ku
Offline
Зарегистрирован: 14.11.2018

sadman41 пишет:

Учитывается ли в чипе компенсация визуальной силы какого-либо "цвета" (красный ярче синего при равных условиях) - сложно сказать, в даташите я что-то не нашёл такого (хотя сильно и не вчитывался).

это - gamma. Не учитывается. Люди отдельные массивы пишут. Но все равно на 2812 оно корявое.

ku-ku
Offline
Зарегистрирован: 14.11.2018

sadman41 пишет:
могу вам точно сказать, повторившись, что корпусированный контроллер за 1300р - это сказочно ))

Если достаточно китайских эффектов "абы блымало" - то соглашусь. А если кастомное и с громадными возможностями, то есть более изящные решения, которые в разы функциональней. Если себе собрать парочку, наверно на 1300 и выйдет. Это взять модули готовые, заказать обвязочную плату, напаять чуток деталюшек, ну и залить прошивку. Да, возможно нужен будет и корпусок и так далее. Если переводить каждую свою минуту в бабло, как тут принято иногда - то будет дороже 1300р. Но это уже от рукастости зависит и от наличия ништяков в загашниках )

ku-ku
Offline
Зарегистрирован: 14.11.2018

а коли пошла пъянка меряться пипирками, то вот шо у меня есть:

https://www.youtube.com/watch?v=PDc_siO9afY

Смотреть лучше с серединки, там боль-мень симпотишные эффекты. Это я тупо переключал их подряд, чтобы хоть как-то изобразить что оно такое. Интернет плохой, снято в минимальном качестве, а потом еще и пожато. Эффекты не доигрывают и одного круга, просто для общей картинки снято.

щас без коробка висит в окне. Соседей радует. 70 см в диаметре, 200 диодов.

Кто хочет повторить - инфа в описании. Там не сложно, код не дам, потому как не допилен. Да и по сути весь код - из оригинала. Я лишь допилил массивы для увеличения количества диодов. Долго понимал логику автора, но таки понял )

sadman41
Offline
Зарегистрирован: 19.10.2016

koloboc74 пишет:

Время берет с гугла. Вот ссылка одним словом (не маё)  https://www.youtube.com/watch?v=5c7LYEAVJHg

Не, я про погоду (тучу). Сливает у синоптиков или предсказывает по приборам?

sadman41
Offline
Зарегистрирован: 19.10.2016

ku-ku пишет:

sadman41 пишет:
могу вам точно сказать, повторившись, что корпусированный контроллер за 1300р - это сказочно ))

Если достаточно китайских эффектов "абы блымало" - то соглашусь.

16 кастомных эффектов на ёлку уже в готовой коробке - идеально, на мой взгляд, в 90% случаев.

ku-ku
Offline
Зарегистрирован: 14.11.2018

Еще такое как-то делал, но оно мелкое - не интересно. Надо побольше мудрить, а мне ни к чему. Да и рассеиватели в виде сантехнической гофро-трубы не ахти как выглядят. На большой инсталляции может и будут норм.

https://cloud.mail.ru/public/5RSa/8DG32epF7

Интернет паршивый, это вроде видео с носками вместе )) Где-то было менее корявое и с рассеивателями, но интернет поганый, лень искать куда я его засунул.

koloboc74
Offline
Зарегистрирован: 21.07.2015

А тучу , она берет из http://openweathermap.org 

romster
Offline
Зарегистрирован: 15.04.2013

ku-ku пишет:

а коли пошла пъянка меряться пипирками, то вот шо у меня есть:

https://www.youtube.com/watch?v=PDc_siO9afY

Смотреть лучше с серединки, там боль-мень симпотишные эффекты. Это я тупо переключал их подряд, чтобы хоть как-то изобразить что оно такое. Интернет плохой, снято в минимальном качестве, а потом еще и пожато. Эффекты не доигрывают и одного круга, просто для общей картинки снято.

щас без коробка висит в окне. Соседей радует. 70 см в диаметре, 200 диодов.

Кто хочет повторить - инфа в описании. Там не сложно, код не дам, потому как не допилен. Да и по сути весь код - из оригинала. Я лишь допилил массивы для увеличения количества диодов. Долго понимал логику автора, но таки понял )


Очень красиво и эффектно.

Logik
Offline
Зарегистрирован: 05.08.2014

Ага оч класно!

ku-ku
Offline
Зарегистрирован: 14.11.2018

Logik пишет:
Ага оч класно!

ну так блин-банан - помогите допилить :D
Оно с опенсурса взято и туда же будет покладено. Мож без некоторых плюшек.
Но главный костылек - то есть исходный проект допиленный, он будет выложен. А там бери и добавляй свои эффекты, какие хошь. Сделано-то как раз под те хотелки, что выше озвучивали: вэбморда и прочее. Причем меняем только процедуры в коде, а html, java-script и прочее остаются без изменений.
Размножить туда колорпикера, чтобы была возможность свои палитры генерить и сразу видеть, разнести некоторые настройки специфические в отдельный раздел, да и еще какие-то мелочи. Вы тут сыпете порою в разы сложнее кодом просто чтобы потыкать неуча палкой! И бесплатно! А я даже компенсирую чуток денюжкой. На отдых не хватит, канеш, но и не бесплатно же! ))

Плохо, что нема спойлера. А дабы доказать, что не реклама - то вот дублирую ссыль на маньяков управляемых диодов: https://youtu.be/QpoDb3PEmn8 Не уверен, но если предположить, что там тыщ 50-70 диодов, то не сильно ошибусь.

romster
Offline
Зарегистрирован: 15.04.2013

ku-ku пишет:

Logik пишет:
Ага оч класно!

Плохо, что нема спойлера. А дабы доказать, что не реклама - то вот дублирую ссыль на маньяков управляемых диодов: https://youtu.be/QpoDb3PEmn8 Не уверен, но если предположить, что там тыщ 50-70 диодов, то не сильно ошибусь.

Ого, очень красиво сделано, был бы у меня загородный дом, я бы точно решился бы на такой проект.