Surprise! We've been running on hardware provided by BuyVM for a few months and wanted to show them a little appreciation.
Running a paste site comes with unique challenges, ones that aren't always obvious and hard to control. As such, BuyVM offered us a home where we could worry less about the hosting side of things and focus on maintaining a clean and useful service! Go check them out and show them some love!
Submitted on January 2, 2016 at 11:02 AM

Section 1 (Text)

/*
 Beambox - The Tower that Glows to Your Commands
 http://www.instructables.com/id/BeamBox-A-tower-that-glows-to-your-commands/
 By PerfectPixel 2016
 Code by JDC928 (source here: http://doityourselfchristmas.com/forums/showthread.php?31079-Arduino-code-for-driving-RGB-Addressable-pixels-from-Vixen )
 Edited by PerfectPixel
 Requires Adafruits NEOPIXEL library instead of the FastLED library
 Neopixel Library Available Here:
 https://github.com/adafruit/Adafruit_NeoPixel
 
 To Get Started Download Vixen ( http://www.vixenlights.com/ )
 and follow the instructions below          
 */
 /* VIXEN Setup:
 * In Vixen display setup...
 *    - Add an element group containing one element for each pixel attached to arduino
 *    - Configure the 'Color Handling'  as "They can be any color: Full RGB"
 *    - Add a "Generic Serial Controller"
 *    - Name it what you want (Although... Jdc928IsAwesome is great controller name)
 *    - Set the channel count to 3x the number of Pixels you have
 *    - Save, then configure these options
 *    - Com Port: choose the correct port for your arduino's serial
 *    - Baud Rate: 115200 (or whatever you changed it to below)
 *    - Click OK
 *    - Check the box "Send a text header"
 *    - Type "VIXStart" in the header text box
 *    - Click "OK"
 *
 *    - Click and highlight the newly added Element in the elements list
 *    - Click and highlight the newly created controller
 *    - Your "Total Patch Points" and "Output" counts should match
 *    - Click "Patch Elements to Controllers"
 *    - Click OK and you should be ready to go
 *
 *
 *    You should now be able open a Sequence
      add some effects to the new channels
      and see the strips responding accordingly
 
 */
 
 
 
/**
 * Pixel Strip Setup
 *    Strips setups vary but generally as follows
 *    - If your using a large number of strips you will
 *      probably want to power them externally.
 *      
 *    - Connect external V+ to strip Vin
 *    - Connect external Gnd to strip Gnd
 *    - Connect external Gnd to Arduino Gnd
 *    - Connect Strip Data to proper pin on Arduino
 *    - Connect Strip DataClock to proper pin on Arduino if not using ws2812
 */
 
 
 
#include <Adafruit_NeoPixel.h>    //  This is the Neo-Pixel library (ws2812)
                                  //  Change to the library for your pixel types
                                  //  Suggest using a library created by Adafruit
                                  //  so the function names will be the same                              
                                 
                                 
                                 
#define DPIN 9                    //  Change this to the pin# connected to your pixels DataIn
                                  //  Will probably need to define a ClockPin for other pixel
 
 
int   PixelCount = 18;             //  Set this to the number of Pixels connected
 
int   bugLevel  = 0;              //  This is just a way I manage turning debugging over serial on/off
 
 
 
/*  Sets up the NeoPixel Strip object
 Replace with proper Object initiation for your pixel types */
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PixelCount, DPIN, NEO_GRB + NEO_KHZ800);  
 
 
 
void setup()
{
  delay(100);                    //  A delay for a reason I can't remember. I can live with one in the setup.  
  strip.begin();                 //  Get strip started
  strip.show();                  //  Initialize all pixels to 'off'
 
  Serial.begin(115200);          //  Start the Serial communication
 
 
}
 
 
void loop()
{                                       // START LOOP
 
        if (Serial.available()>2)             // Wait for a few bytes to be recieved
  {
 
    waitForVixenHeader();               // Header check function
 
       
        for (int pixCount=0; pixCount<PixelCount;pixCount++)       // Do this for as many Pixels defined in PixelCount
    {
      int RGB[3];                             // Create array to hold this pixels RGB value                  
      for (int color = 0;color<3;color++)     // For the next 3 incoming bytes
      {                      
        while (Serial.available() < 1)        // Wait for bytes to be received
        {
          delay(10);
        }
        RGB[color] = Serial.read();           // Save this byte to the correct RGB value
      }                                       // Repeat until bytes for this pixels RGB value have been recieved
 
      strip.setPixelColor(pixCount,RGB[0],RGB[1],RGB[2]);  //Set this pixels new color
     
    }                                         // Repeat untill all pixels have had new RGB value set
    strip.show();                             // Update the strip and show with new color                            
  }                                           // YAY! DO IT AGAIN!
}                                              // END OF LOOP
 
 
 
/**
 *  FUNC    bugit           [manages printing of debugging based on debugging level]
 *  @param  String  bugstr  [string to be be printed]
 *  @param  int     blevel  [the level at which this debugging should be ignored]
 *    
*/
 
 
 
 
/**
 * I 'borrowed' snippets of this waitForVixenHeader() function from some code I found online
 * Can't find the originator now but thank you. It works well.  
 *
 */
void waitForVixenHeader()
{
 
    char *header="VIXStart";
    char buffer[3];
    int index = 0;
 
    while (true)
    {
 
        int inByte = Serial.read();
        if(inByte==-1)
        {
          continue;
        }
       
        buffer[index] = inByte;
        if(buffer[index]!=header[index])
        {            
            index=-1;                     // not the right sequence restart
        }
       
        buffer[index+1] = 0;              // add null
        index++;
        if(index==8)
        {
          return;
        }
    }
}