Fastled library and RGB LED Strip Driver Module



  • I cant find any build instructions for rgb strip, i have this module
    it is very cheap and it is very easy to use this module with Fastled library. Chip is P9813
    Can someone help me to get this runing with my sensors i use domoticz led strip is rgb 5050



  • i found this code from node red but i cant see device in domticz

    #define MY_DEBUG
    #define MY_RADIO_NRF24
    #define MY_NODE_ID 9
    #include <SPI.h>
    #include <MySensor.h>
    
    #include "FastLED.h"
    FASTLED_USING_NAMESPACE
    
    #if defined(FASTLED_VERSION) && (FASTLED_VERSION < 3001000)
    #warning "Requires FastLED 3.1 or later; check github for latest code."
    #endif
    
    #define DATA_PIN    3
    //#define CLK_PIN   4
    #define LED_TYPE    WS2811
    #define COLOR_ORDER GRB
    #define NUM_LEDS    38
    CRGB leds[NUM_LEDS];
    
    // globals for cool color functions
    uint8_t gHue = 0;
    uint8_t colour ;
    int step = -1;
    int center = 0; 
    
    
    unsigned int currentSpeed = 0 ;
    int brightness = 96;
    unsigned int requestedMode = 0 ;
    int messageType = 0 ;
    int previousMessageType = -1;
    
    String hexColor = "000000" ;
    
    unsigned long previousTime = 0 ;
    
    void setup() {
      delay(1000);
      Serial.begin(115200);
      FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
      FastLED.setBrightness(brightness);
      FastLED.show();
    }
    
    void presentation() {
      sendSketchInfo("FastLED Node", "1.0");
      present(0, S_RGB_LIGHT, "Makes strip said color", false);
    }
    
    void loop() {
      switch (messageType) {
    
        //************** CASE 1 **************
        case (1):
          Serial.print("Hex color override: "); Serial.println(hexColor);
          colorWipe();
          messageType = 0 ;
          break;
    
        //************** CASE 2 **************
        case (2):
          if ( (previousTime + (long) currentSpeed ) < millis() ) {
            if (requestedMode == 2) {rainbow(); FastLED.show(); }
            if (requestedMode == 3) {rainbowWithGlitter();FastLED.show(); }
            if (requestedMode == 4) {ripple();FastLED.show(); }
            if (requestedMode == 5) {confetti();FastLED.show(); }
            if (requestedMode == 6) {sinelon();FastLED.show(); }
            if (requestedMode == 7) {bpm();FastLED.show(); }
            if (requestedMode == 8) {juggle();FastLED.show(); }
            previousTime = millis();
          }
          break;
    
        //************** CASE 3 **************
        case (3):   // Adjust timing of case 2 using non-blocking code (no DELAYs)
          Serial.print("Case 3 received. Speed set to: "); Serial.print(currentSpeed); Serial.println(" ms.");
          messageType = 2; 
          break;
    
        //************** CASE 4 **************
        case (4):   // Adjust brightness of whole strip of case 2 using non-blocking code (no DELAYs)
          Serial.print("Case 4 received. Brightness set to: "); Serial.println(brightness);
          FastLED.setBrightness(brightness); FastLED.show();
          messageType = previousMessageType ; // We get off type 4 ASAP
          break;
    
    
    
      }
    }
    
    void receive(const MyMessage &message) {
      Serial.println("Message received: ");
    
      if (message.type == V_RGB) { 
        messageType = 1 ;
        hexColor = message.getString();
        Serial.print("RGB color: "); Serial.println(hexColor);
        }
        
      if (message.type == V_VAR1) { 
        requestedMode = message.getInt();
        Serial.println(requestedMode);
        messageType = 2 ;
        Serial.print("Neo mode: "); Serial.println(requestedMode);
      }
    
      if (message.type == V_VAR2) { // This line is for the speed of said mode
        currentSpeed = message.getInt() ;
        Serial.println(currentSpeed);
        messageType = 3 ;
        Serial.print("Neo speed: "); Serial.println(currentSpeed);
      }
    
      if (message.type == V_VAR3) { // This line is for the brightness of said mode
        brightness = message.getInt() ;
        //if(brightness > 255) {brightness = 255;}
        //if(brightness < 0) {brightness = 0;}
        Serial.println(brightness);
        previousMessageType = messageType;
        messageType = 4 ;
        Serial.print("Neo brightness: "); Serial.println(brightness);
      }
    }
    
    
    //********************** FastLED FUNCTIONS ***********************
    
    
    void colorWipe() {
      for (int i = 0; i < NUM_LEDS ; i++) {
        leds[i] = strtol( &hexColor[0], NULL, 16);
        FastLED.show();
      }
    }
    
    void rainbow()
    {
      // FastLED's built-in rainbow generator
      fill_rainbow( leds, NUM_LEDS, gHue++, 7);
    }
    
    void rainbowWithGlitter()
    {
      // built-in FastLED rainbow, plus some random sparkly glitter
      fill_rainbow( leds, NUM_LEDS, gHue++, 7);
      FastLED.show();
      addGlitter(80);
    }
    
    void ripple() {
      for (int i = 0; i < NUM_LEDS; i++) leds[i] = CHSV(gHue++, 255, 15);  // Rotate background colour.
      switch (step) {
        case -1:                                                          // Initialize ripple variables.
          center = random(NUM_LEDS);
          colour = random8();
          step = 0;
          break;
    
        case 0:
          leds[center] = CHSV(colour, 255, 255);                          // Display the first pixel of the ripple.
          step ++;
          break;
    
        case 16:                                                    
          step = -1;
          break;
    
        default:
          leds[(center + step + NUM_LEDS) % NUM_LEDS] += CHSV(colour, 255, 255/step*2);
          leds[(center - step + NUM_LEDS) % NUM_LEDS] += CHSV(colour, 255, 255/step*2);
          step ++;                                                        
          break;  
      }
    }
    
    
    void addGlitter( fract8 chanceOfGlitter)
    {
      if ( random8() < chanceOfGlitter) {
        leds[ random16(NUM_LEDS) ] += CRGB::White;
      }
    }
    
    void confetti()
    {
      // random colored speckles that blink in and fade smoothly
      fadeToBlackBy( leds, NUM_LEDS, 10);
      int pos = random16(NUM_LEDS);
      leds[pos] += CHSV( gHue + random8(64), 200, 255);
    }
    
    void sinelon()
    {
      // a colored dot sweeping back and forth, with fading trails
      fadeToBlackBy( leds, NUM_LEDS, 20);
      int pos = beatsin16(13, 0, NUM_LEDS);
      leds[pos] += CHSV( gHue, 255, 192);
    }
    
    void bpm()
    {
      // colored stripes pulsing at a defined Beats-Per-Minute (BPM)
      uint8_t BeatsPerMinute = 62;
      CRGBPalette16 palette = PartyColors_p;
      uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
      for ( int i = 0; i < NUM_LEDS; i++) { //9948
        leds[i] = ColorFromPalette(palette, gHue + (i * 2), beat - gHue + (i * 10));
      }
    }
    
    void juggle() {
      // eight colored dots, weaving in and out of sync with each other
      fadeToBlackBy( leds, NUM_LEDS, 20);
      byte dothue = 0;
      for ( int i = 0; i < 8; i++) {
        leds[beatsin16(i + 7, 0, NUM_LEDS)] |= CHSV(dothue, 200, 255);
        dothue += 32;
      }
    }
    

Log in to reply
 

Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.