ws2811 problem z kolorami

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
sztajek
Młodszy majsterkowicz
Posty: 3
Rejestracja: 24 wrz 2014, 23:03

ws2811 problem z kolorami

Post autor: sztajek » 13 wrz 2015, 18:10

Witam serdecznie
Chciał bym, aby diody zamiast świecić jednym kolorem, zamigotały różnymi kolorami, a potem delikatnie wygasły. Próbowałem skopiować rozwiązania z przykładów zawartych w bibliotece, ale nie mogę sobie z tym poradzić. Korzystam z kodu przykładowego blink-a.

Kod: Zaznacz cały

#include "FastLED.h"

// How many leds in your strip?
#define NUM_LEDS 2

// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 10


// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() { 
      // Uncomment/edit one of the following lines for your leds arrangement.
      // FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
       FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
  	//  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
      // FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
      
      // FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<SM16716, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<LPD8806, RGB>(leds, NUM_LEDS);

      // FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);

}


void loop() { 
  // Turn the LED on, then pause
  leds[0] = CRGB::Red;
  FastLED.show();
  delay(1000);
  
  leds[0] = CRGB::Black;
  FastLED.show();
  delay(1000);
  
  leds[1] = CRGB::Blue;
  FastLED.show();
  delay(1000);
  
  leds[1] = CRGB::Black;
  FastLED.show();
  delay(1000);

}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


decimus
Młodszy majsterkowicz
Posty: 39
Rejestracja: 27 gru 2014, 09:18

Re: ws2811 problem z kolorami

Post autor: decimus » 15 wrz 2015, 08:51

Proponuje użycie biblioteki Adafruit_NeoPixel.h
Tam jest multum przykładów.Ja na tej podstawie zrobiłem tą lampę z plexi. Program rozbudowałem i musiałem teraz kupić Arduino Mega.Na programowaniu się nie znam,ale jak widzisz wszystko chodzi.Trochę cierpliwości i można modyfikować gotowe programy ,a po jakimś czasie sam dopisałem sporo efektów,których nawet tu nie ma bo musiałbym znów nagrać film.
http://majsterkowo.pl/lampa-rgb-na-diodach-led-ws2812b/

Na tej bibliotece co wpisałeś program chodzi mi mała lampa ,ale tam jest mało przykładów.
Fajny jest program tej biblioteki,która możesz obejrzeć tutaj ,bo też próby poczyniłem.
Jest to efekt "Fire" , który jest akurat lepszy od efektu fire biblioteki Adafruit.
Biblioteka Adafruit jest bardziej zrozumiała i czytelna dla laika, i nowsza dla diod WS2812B

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

Przykład wycięty z mojego zestawu efektów, które mają chyba 15' to płynne przejścia miedzy kolorami:

Kod: Zaznacz cały

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define LICZBADIOD 60

#define DELAY 50 
#define COLSTEP 1 
#define MINCOLOR 0 
#define MAXCOLOR 200 


uint8_t r = MAXCOLOR;
uint8_t g = MINCOLOR;
uint8_t b = MINCOLOR;


Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);


/////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup() {

  strip.begin();
  strip.setBrightness(50);
  strip.show(); 
}
void loop() {
 /// Płynne przejścia między kolorami//////
 
for(int i=0; i<LICZBADIOD; i++)
// Red to Red+Blue to Blue
for (r = MAXCOLOR, b = MINCOLOR; b < MAXCOLOR; r -= COLSTEP, b += COLSTEP) {
   
for(int j=0; j<LICZBADIOD; j++)
strip.setPixelColor(i=j, r, g, b);
strip.show();
delay(DELAY);

}
for(int i=0; i<LICZBADIOD; i++)
// Blue to Blue+Green to Green
for (b = MAXCOLOR, g = MINCOLOR; g < MAXCOLOR; b -= COLSTEP, g += COLSTEP) {
  
for(int j=0; j<LICZBADIOD; j++) 
strip.setPixelColor(i=j, r, g, b);
strip.show();
delay(DELAY);

}
for(int i=0; i<LICZBADIOD; i++)
// Green to Red+Green to Red
for (g = MAXCOLOR, r = MINCOLOR; r < MAXCOLOR; g -= COLSTEP, r += COLSTEP) {
  
for(int j=0; j<LICZBADIOD; j++)   
strip.setPixelColor(i=j, r, g, b);
strip.show();
delay(DELAY); 
 
} 
}
ODPOWIEDZ

Strony partnerskie: