NeoPixel Workshop Instructions

From LVL1
Revision as of 20:20, 10 November 2017 by Bpwagner (talk | contribs) (→‎Code)
Jump to navigation Jump to search

This is the instruction page for the NeoPixel Workshop ran by Andy Miller on 11/11/17

Software to install

You will need to install the following programs and drivers

Download and install the Arduino IDE V 1.8.5 (or newer).

Do not download/install the web IDE!

https://www.arduino.cc/en/Main/Software

There are some step by step instructions here: https://www.arduino.cc/en/Guide/HomePage


Download and install the CH340 USB drivers for the Arduino clones:

https://sparks.gogo.co.nz/ch340.html

Note: The CH340 chip is a USB to serial chip used frequently on Arduino clones. Official Arduinos use the FTDI chip. Those drivers are included in the Arduino software install.


Download the FastLED library from:

https://github.com/FastLED/FastLED/releases Current version is 3.1.6

We will show you how to install this library. The FastLED library is used to control NeoPixels! The official page for the FASTLED library is:

https://github.com/FastLED/FastLED/tree/v3.1.6

Code

Color Pallet

  1. include <FastLED.h>
  1. define LED_PIN 6
  2. define NUM_LEDS 60
  3. define BRIGHTNESS 96
  4. define LED_TYPE WS2811
  5. define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

  1. define UPDATES_PER_SECOND 100


// FastLED provides a few pre-configured color palettes, and makes it // extremely easy to make up your own color schemes with palettes. // // Some notes on the more abstract 'theory and practice' of // FastLED compact palettes are at the bottom of this file.


CRGBPalette16 currentPalette; TBlendType currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette; extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;


void setup() {

   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);

}

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;
   }

}


void ChangePalettePeriodically() {

   uint8_t secondHand = (millis() / 1000) % 60;
   static uint8_t lastSecond = 99;
   
   if( lastSecond != secondHand) {
       lastSecond = secondHand;
       if( secondHand ==  0)  { currentPalette = RainbowColors_p;         currentBlending = LINEARBLEND; }
       if( secondHand == 10)  { currentPalette = RainbowStripeColors_p;   currentBlending = NOBLEND;  }
       if( secondHand == 15)  { currentPalette = RainbowStripeColors_p;   currentBlending = LINEARBLEND; }
       if( secondHand == 20)  { SetupPurpleAndGreenPalette();             currentBlending = LINEARBLEND; }
       if( secondHand == 25)  { SetupTotallyRandomPalette();              currentBlending = LINEARBLEND; }
       if( secondHand == 30)  { SetupBlackAndWhiteStripedPalette();       currentBlending = NOBLEND; }
       if( secondHand == 35)  { SetupBlackAndWhiteStripedPalette();       currentBlending = LINEARBLEND; }
       if( secondHand == 40)  { currentPalette = CloudColors_p;           currentBlending = LINEARBLEND; }
       if( secondHand == 45)  { currentPalette = PartyColors_p;           currentBlending = LINEARBLEND; }
       if( secondHand == 50)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND;  }
       if( secondHand == 55)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; }
   }

}

// 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

};