Skocz do zawartości

Sterowanie serial FastLED


wiktorqwe

Pomocna odpowiedź

#include <FastLED.h>
int b2 = 100;
#define LED_PIN     5
#define NUM_LEDS    99
int BRIGHTNESS;
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

int UPDATES_PER_SECOND = 100;
char inSerial[15];
CRGBPalette16 currentPalette;
TBlendType    currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;


void setup() {
  Serial.begin(9600);
 
  pinMode(0, INPUT);
  BRIGHTNESS=b2;
    delay( 3000 ); // power-up safety delay
    FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
    FastLED.setBrightness(  BRIGHTNESS );
    
    currentPalette = RainbowColors_p;
    currentBlending = LINEARBLEND;

}

void loop() {
   ChangePalettePeriodically();
    
    static uint8_t startIndex = 0;
    startIndex = startIndex + 1; /* motion speed */
    
    FillLEDsFromPaletteColors( startIndex);
    
    FastLED.show();
    FastLED.delay(1000 / UPDATES_PER_SECOND);

      int i=0;
    int m=0;                                      
    if (Serial.available() > 0) {             
       while (Serial.available() > 0) {
         inSerial[i]=Serial.read(); 
         i++;      
       }
       inSerial[i]='\0';
      Check_Protocol(inSerial);}

}

void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
    uint8_t brightness = 255;
    
    for( int i = 0; i < NUM_LEDS; ++i) {
        leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
        colorIndex += 3;
    }
}


// There are several different palettes of colors demonstrated here.
//
// FastLED provides several 'preset' palettes: RainbowColors_p, RainbowStripeColors_p,
// OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p, and PartyColors_p.
//
// Additionally, you can manually define your own color palettes, or you can write
// code that creates color palettes on the fly.  All are shown here.

void ChangePalettePeriodically()
{
  
      
       
      

       
       
        
       
       
        
     
    
}

// This function fills the palette with totally random colors.
void SetupTotallyRandomPalette()
{
    for( int i = 0; i < 16; ++i) {
        currentPalette[i] = CHSV( random8(), 255, random8());
    }
}

// This function sets up a palette of black and white stripes,
// using code.  Since the palette is effectively an array of
// sixteen CRGB colors, the various fill_* functions can be used
// to set them up.
void SetupBlackAndWhiteStripedPalette()
{
    // 'black out' all 16 palette entries...
    fill_solid( currentPalette, 16, CRGB::Black);
    // and set every fourth one to white.
    currentPalette[0] = CRGB::White;
    currentPalette[4] = CRGB::White;
    currentPalette[8] = CRGB::White;
    currentPalette[12] = CRGB::White;
    
}

// This function sets up a palette of purple and green stripes.
void SetupPurpleAndGreenPalette()
{
    CRGB purple = CHSV( HUE_PURPLE, 255, 255);
    CRGB green  = CHSV( HUE_GREEN, 255, 255);
    CRGB black  = CRGB::Black;
    
    currentPalette = CRGBPalette16(
                                   green,  green,  black,  black,
                                   purple, purple, black,  black,
                                   green,  green,  black,  black,
                                   purple, purple, black,  black );
}


// This example shows how to set up a static color palette
// which is stored in PROGMEM (flash), which is almost always more
// plentiful than RAM.  A static PROGMEM palette like this
// takes up 64 bytes of flash.
const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM =
{
    CRGB::Red,
    CRGB::Gray, // 'white' is too bright compared to red and blue
    CRGB::Blue,
    CRGB::Black,
    
    CRGB::Red,
    CRGB::Gray,
    CRGB::Blue,
    CRGB::Black,
    
    CRGB::Red,
    CRGB::Red,
    CRGB::Gray,
    CRGB::Gray,
    CRGB::Blue,
    CRGB::Blue,
    CRGB::Black,
    CRGB::Black
};


void Check_Protocol(char inStr[]){   
  int i=0;
  int m=0;
  
  if(!strcmp(inStr,"p1")){
   currentPalette = RainbowColors_p;        
   currentBlending = LINEARBLEND;
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       
  if(!strcmp(inStr,"p2")){
     currentPalette = RainbowStripeColors_p;   currentBlending = NOBLEND;  
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
   
   if(!strcmp(inStr,"p3")){ 
     currentPalette = RainbowStripeColors_p;   currentBlending = LINEARBLEND;
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       if(!strcmp(inStr,"p4")){ 
        SetupPurpleAndGreenPalette();             currentBlending = LINEARBLEND;
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       if(!strcmp(inStr,"p5")){ 
     SetupTotallyRandomPalette();              currentBlending = LINEARBLEND; 
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       if(!strcmp(inStr,"p6")){ 
    SetupBlackAndWhiteStripedPalette();       currentBlending = NOBLEND; 
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       if(!strcmp(inStr,"p7")){ 
    SetupBlackAndWhiteStripedPalette();       currentBlending = LINEARBLEND; 
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       
    
       if(!strcmp(inStr,"p8")){ 
 { currentPalette = CloudColors_p;           currentBlending = LINEARBLEND; 
   for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}}
       if(!strcmp(inStr,"p9")){ 
  currentPalette = PartyColors_p;           currentBlending = LINEARBLEND; 
   for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       if(!strcmp(inStr,"p10")){ 
 currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND;  
   for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       if(!strcmp(inStr,"p11")){ 
      currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; 
        for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}

if(!strcmp(inStr,"b+")){
   b2=b2+1;
   Serial.print("Bightness:");
   Serial.print(b2);
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       
       if(!strcmp(inStr,"b-")){
   b2=b2-1;
      Serial.print("Bightness:");
   Serial.print(b2);
    for(m=0;m<11;m++){
      inStr[m]=0;}
       i=0;}
       
    else{
    for(m=0;m<11;m++){
      inStr[m]=0;
    }
    i=0;

}}

Witam

Chciałbym sterować ledami adresowalnymi WS2811. Powyższy kod ma za zadanie odbierać wiadomości z portu szeregowego i ustawiać różne palety kolorów. Problem w tym, że nie mogę go zmusić aby działał. Jest to zmieniona wersja przykładu biblioteki Fast LED ColorPalette. Czy ktoś miałby pomysł jak temu zaradzić?

Link do komentarza
Share on other sites

@wiktorqwe A próbowałeś metodą "dziel i zwyciężaj"? Czy minimum w postaci: właczenia 1 diody, napisanie coś na serial, itp działają Ci? Nigdy nie łap się za gotowca jak nie rozumiesz z czego się składa.

Link do komentarza
Share on other sites

@wiktorqwe a jakbyś zamiast tego dał coś prostszego, to będzie działać?

    if (Serial.available() > 0) {             
       while (Serial.available() > 0) {
         inSerial[i]=Serial.read(); 
         i++;      
       }
       inSerial[i]='\0';
      Check_Protocol(inSerial);}

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Przerabiałem kod od tego projektu:

https://www.instructables.com/Remote-Bluetooth-Firework-Igniter/

Przez aplikację i ten kod steruję już lampą i zwykłymi ledami RGB. Nie wiem, dlaczego nie chce działać. Jestem początkujący jeśli chodzi o komunikację szeregową, i tylko z nią mam jakiś problem, dlatego jak znalazłem rozwiązanie, które działa(w innych projektach), i jest łatwe w modyfikacji to starałem się robić na jego podstawie.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.