GlowHood
Jump to navigation
Jump to search
Software
Blinkadelic fabrikz
Hardware
WS2812B's (144/m)
Code
Test Sketch for 72 Pixel Strip
/* * Serial control interface for LED Strip * * Updated: 20140921 * * Command Summary: * MODE0 == Auto (Rainbeau) * MODE1 == Off * MODE2 == Remote (PC Control) * HH..H == Sequence of Hue values to apply to LEDs * Note: Set "MODE2" before sending hues * S == Set saturation * MODE3 == Center Peak Rainbeau * MODE4 == Center Peak Pastel */ #include "FastLED.h" // How many leds in your strip? #define NUM_LEDS 72 // Spacing between pixel/color #define HSV_PAD 4 // Delay between cycles #define LOOP_DELAY 50 // Strip Data In (DI) #define DATA_PIN 11 // Define the array of leds CRGB leds[NUM_LEDS]; float counter = 0; byte count = 0; byte mode = 4; byte hues[NUM_LEDS]; byte sat = 255; // Saturation 0-255 String inputString = ""; void setup() { pinMode(13, OUTPUT); for (int i = 0; i < NUM_LEDS; i++) { hues[i] = 0; } FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS); // Max brightness 0-255 (64 ~< 100ma for 12 LEDs) FastLED.setBrightness(64); Serial.begin(9600); Serial.setTimeout(50); delay(200); } void loop() { int i; int v; float p; if (mode == 0) { // Rainbeau for (i = 0; i < NUM_LEDS; i++) { leds[i] = CHSV(count + (i * HSV_PAD), sat, 255); } FastLED.show(); count++; delay(LOOP_DELAY); } else if (mode == 1) { // Off for (i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB(0, 0, 0); } FastLED.show(); delay(LOOP_DELAY); } else if (mode == 2) { // Remote +hex } else if (mode == 3) { // Rainbeau for (i = 0; i < NUM_LEDS; i++) { // variable position dimming // Set 'p' to 0.0 - 1.0 so the ends are 0.0 and the center is 1.0 p = (((NUM_LEDS / 2) - abs(i - (NUM_LEDS / 2.0)))) / (NUM_LEDS / 2.0); v = min(255, round(p * 255.0) + 64); // sin function added for oscillating color change counter += 0.000001337; count = sin(counter * 3.14 * 180) * 255 + (i * HSV_PAD); leds[i] = CHSV(count, sat, v);// - (v/1.5), v); } FastLED.show(); count++; delay(LOOP_DELAY); } else if (mode == 4) { // Rainbeau for (i = 0; i < NUM_LEDS; i++) { // variable position dimming // Set 'p' to 0.0 - 1.0 so the ends are 0.0 and the center is 1.0 p = (((NUM_LEDS / 2) - abs(i - (NUM_LEDS / 2.0)))) / (NUM_LEDS / 2.0); v = min(255, round(p * 255.0) + 64); // sin function added for oscillating color change counter += 0.000001337; count = sin(counter * 3.14 * 180) * 255 + (i * HSV_PAD); leds[i] = CHSV(count, sat - (v/1.5), v); } FastLED.show(); count++; delay(LOOP_DELAY); } } void updateHues() { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CHSV(hues[i], 255, 255); } FastLED.show(); // Toggle onboard LED digitalWrite(13, !digitalRead(13)); } void serialEvent() { byte byteCount = 0; byte data; inputString = ""; while(Serial.available()) { data = Serial.read(); inputString += (char)data; if (byteCount < NUM_LEDS) { hues[byteCount++] = byte(data + 90); } // Catch pending bits if (!Serial.available()) delay(20); } if (inputString == "MODE0") { mode = 0; } else if (inputString == "MODE1") { mode = 1; } else if (inputString == "MODE2") { mode = 2; } else if (inputString == "MODE3") { mode = 3; } else if (inputString == "MODE4") { mode = 4; } else if (inputString.length() == NUM_LEDS) { updateHues(); } else if (inputString.length() == 1) { sat = data; } }