Library for controlling a strip of Adafruit NeoPixels with WS2812 drivers. Because of the strict timing requirements of the self-clocking data signal, the critical parts of code are written in ARM assembly. Currently, only the NXP LPC1768 platform is supported. More information about NeoPixels can be found at http://learn.adafruit.com/adafruit-neopixel-uberguide/overview

Dependents:   Merged_Demo

Fork of NeoStrip by Allen Wild

NeoStrip.h

Committer:
aswild
Date:
2014-03-12
Revision:
0:9f237b11f0a8

File content as of revision 0:9f237b11f0a8:

/**
 * NeoStrip.h
 *
 * Allen Wild
 * March 2014
 *
 * Library for the control of Adafruit NeoPixel addressable RGB LEDs.
 */


#ifndef NEOSTRIP_H
#define NEOSTRIP_H

#ifndef TARGET_LPC1768
#error NeoStrip only supports the NXP LPC1768!
#endif

// NeoColor struct definition to hold 24 bit
// color data for each pixel, in GRB order
typedef struct _NeoColor
{
	uint8_t green;
	uint8_t red;
	uint8_t blue;
} NeoColor;

/**
 * NeoStrip objects manage the buffering and assigning of
 * addressable NeoPixels
 */
class NeoStrip
{
	public:

		/**
		 * Create a NeoStrip object
		 *
		 * @param pin The mbed data pin name
		 * @param N The number of pixels in the strip
		 */
		NeoStrip(PinName pin, int N);

		/**
		 * Set an overall brightness scale for the entire strip.
		 * When colors are set using setPixel(), they are scaled
		 * according to this brightness.
		 *
		 * Because NeoPixels are very bright and draw a lot of current,
		 * the brightness is set to 0.5 by default.
		 *
		 * @param bright The brightness scale between 0 and 1.0
		 */
		void setBrightness(float bright);

		/**
		 * Set a single pixel to the specified color.
		 *
		 * This method (and all other setPixel methods) uses modulo-N arithmetic
		 * when addressing pixels. If p >= N, the pixel address will wrap around.
		 *
		 * @param p The pixel number (starting at 0) to set
		 * @param color A 24-bit color packed into a single int,
		 * using standard hex color codes (e.g. 0xFF0000 is red)
		 */
		void setPixel(int p, int color);

		/**
		 * Set a single pixel to the specified color, with red, green, and blue
		 * values in separate arguments.
		 */
		void setPixel(int p, uint8_t red, uint8_t green, uint8_t blue);

		/**
		 * Set n pixels starting at pixel p.
		 *
		 * @param p The first pixel in the strip to set.
		 * @param n The number of pixels to set.
		 * @param colors An array of length n containing the 24-bit colors for each pixel
		 */
		void setPixels(int p, int n, const int *colors);

		/**
		 * Reset all pixels in the strip to be of (0x000000)
		 */
		void clear();

		/**
		 * Write the colors out to the strip; this method must be called
		 * to see any hardware effect.
		 *
		 * This function disables interrupts while the strip data is being sent,
		 * each pixel takes approximately 30us to send, plus a 50us reset pulse
		 * at the end.
		 */
		void write();

	protected:
		NeoColor *strip;	// pixel data buffer modified by setPixel() and used by neo_out()
		int N;				// the number of pixels in the strip
		int Nbytes;			// the number of bytes of pixel data (always N*3)
		float bright;		// the master strip brightness
		gpio_t gpio;		// gpio struct for initialization and getting register addresses
};

#endif