Skip to content

Instantly share code, notes, and snippets.

@adamjezek98
Last active July 10, 2019 19:02
Show Gist options
  • Save adamjezek98/26527618c8f9d370a6a71f710c4531f2 to your computer and use it in GitHub Desktop.
Save adamjezek98/26527618c8f9d370a6a71f710c4531f2 to your computer and use it in GitHub Desktop.
FastLED RGBW
/*
THIS SKETCH TRANSPORMS 4-COLOR RGBW LEDS INTO 2 3-COLOR RGB LEDS,
SO YOU CAN USE FASTLED (WHICH AS OF NOW, HAS NO RGBW SUPPORT), TO
CONTROL RGBW LEDS
*/
#include <FastLED.h>
#define NUM_LEDS 16
/*
for every 3 rgbw leds, we need 4 rgb leds.
to get rgbw count from rgb, do (count/4)*3, and roud it down
to get rgb count from rgbw, do (count/3)*4, and round it up
*/
#define NUM_LEDS_RGBW 10
#define LED_PIN 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, NUM_LEDS);
Serial.begin(115200);
}
void loop() {
for (int i = 0; i < NUM_LEDS_RGBW; i++) {
setRGBW(i, 1, 0, 0, 0);
//leds[i][0] = 5;
//leds[i] = CRGB(5,0,0);
FastLED.show();
delay(100);
}
delay(3000);
//while (1);
for (int i = 0; i < NUM_LEDS_RGBW; i++) {
setRGBW(i, 0, 9, 0, 0);
FastLED.show();
delay(100);
}
delay(3000);
for (int i = 0; i < NUM_LEDS_RGBW; i++) {
setRGBW(i, 0, 0, 9, 0);
FastLED.show();
delay(100);
}
delay(3000);
for (int i = 0; i < NUM_LEDS_RGBW; i++) {
setRGBW(i, 0, 0, 0, 9);
FastLED.show();
delay(100);
}
}
void setRGBW(int led, byte r, byte g, byte b, byte w) {
//takes r,g,b,w for 4-color LEDs and transfers them into 3-color array
//to use with fastled
int segment = int((led / 3.0) * 4.0);
switch ( led % 3) {
case 0: //first
leds[segment][0] = r;
leds[segment][1] = g;
leds[segment][2] = b;
leds[segment + 1][1] = w;
break;
case 1: //second
leds[segment][0] = g;
leds[segment][2] = r;
leds[segment + 1][0] = w;
leds[segment + 1][1] = b;
break;
case 2: //third
leds[segment][2] = g;
leds[segment + 1][0] = b;
leds[segment + 1][1] = r;
leds[segment + 1][2] = w;
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment