• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
WS2812B podział efektu na odcinki
#1
Wink 
Witam szanowne grono po Świętach. Wink 

Mam problem z efektem na WS2812B, biblioteka Neopixel, diody zapalają się z krańców taśmy do środka i to jest ok. Chciałbym móc go podzielić na sekcje, tzn. mając np. 24 diody efekt powtarza się 3 razy na 8 diodach. Powiedzmy, że ilość sekcji i diod będę definiował i stąd moja prośba o pomoc, gdyż za diabła nie mogę sobie z tym poradzić.

Poniżej wklejam kod który używam do testowania pojedynczych efektów, działa on na serialu.

Z góry dzięki za pomoc. Big Grin 

Kod:
char incomingByte;
#include <Adafruit_NeoPixel.h>
#define LED_PIN     9

// How many NeoPixels are attached to the Arduino ?
#define NUMPIXELS       24

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  Serial.println("LED control");
  Serial.println("0 = LED off");
  Serial.println("1 = Do srodka");

  strip.begin();
  strip.show(); // initialize all pixels to "off"
}

void loop() {
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    if (incomingByte == '0') {
      Serial.println("off");
      off();
    }
    if (incomingByte == '1') {
      Serial.println("Do srodka");
      dosrodka();
    }

  }
}

void off() {
  strip.clear();
  strip.show();
}

void calosc() {
  dosrodka();
}

void dosrodka() {
  //Ascend strip
  //for (int i = NUMPIXELS / 2; i >= 0; i--) {
  for (int i = 0; i < (NUMPIXELS / 2) + 1; i++) {
    strip.setPixelColor(i, strip.Color(255, 255, 255));
    strip.setPixelColor(NUMPIXELS - i, strip.Color(255, 255, 255));
    strip.show();
    delay(80);
  }
}
 
Odpowiedź
#2
To co pokazujesz w przykładowym kodzie:
for (int i = 0; i < (NUMPIXELS / 2) + 1; i++) {
strip.setPixelColor(i, strip.Color(255, 255, 255));
strip.setPixelColor(NUMPIXELS - i, strip.Color(255, 255, 255));
to przecież właśnie podział na dwie sekcje o różnych efektach, więc podział na trzy będzie analogicznie oraz trzema definicjami efektu z i+8 i i+16, ewentualnie NUMPIXELS-i*cośtam dla efektu odbitego.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości