NeoPixel: Difference between revisions
m (added another link for the arduino library used) |
No edit summary |
||
| Line 1: | Line 1: | ||
== Presentation slides === | |||
Class slides here: | |||
== Bill of Materials == | == Bill of Materials == | ||
Adafruit Metro Mini: https://www.adafruit.com/product/2590 | Adafruit Metro Mini: https://www.adafruit.com/product/2590 | ||
Revision as of 23:59, 20 March 2017
Presentation slides =
Class slides here:
Bill of Materials
Adafruit Metro Mini: https://www.adafruit.com/product/2590
NeoPixel Strip (60 LEDs per meter): https://www.adafruit.com/products/2842
Install the Arduino IDE
Grab the appropriate Arduino software from their website: https://www.arduino.cc/en/Main/Software
Follow the installation instructions for your operating system: https://www.arduino.cc/en/Guide/HomePage
Product link to Metro Mini
Technical details on the Metro Mini microcontroller from Adafruit: https://www.adafruit.com/product/2590
FastLED.io Documentation
Available on github: https://github.com/FastLED/FastLED/wiki/Overview
Color specific information: https://github.com/FastLED/FastLED/wiki/Pixel-reference#setting-rgb-colors
Class demo source code
Below, you will find the demo source code for the Hive76 NeoPixel class. Copy and paste this into the Arduino IDE to get started!
#include "FastLED.h" // Loads FastLED library
#define NUM_LEDS 20 // How many NeoPixels on your strip?
#define DATA_PIN 3 // Data pin from microcontroller connected to LED strip
#define BUTTON_PIN 4 // Data pin to read button state
#define BUTTON_GND 6 // Data pin providing ground source to button, since we have limited mounting options for the Metro-Mini
#define KNOB_PIN A0 // analog input pin that is connected to the center pin of potentiometer, where pot position will be measured
#define KNOB_GND A1 // analog input pin that is connected to one side of potentiometer, and will be needed to supply ground
int buttonPressed = 1; // initial state of push button, since input is pulled high and we need to declare variable scope.
CRGB leds[NUM_LEDS]; // Tells the Library how many pixels we have
void setup() {
// put your setup code here, to run once:
FastLED.addLeds<NEOPIXEL,DATA_PIN>(leds, NUM_LEDS); // this specifies the configuration for the FastLED library
pinMode(KNOB_GND, OUTPUT); // configures Analog pin to be an output...
digitalWrite(KNOB_GND, LOW); // ...and writes a zero/low, to supply ground to the potentiometer
pinMode(BUTTON_PIN, INPUT_PULLUP); // configures the digital pin for the button to be an input, and enable the internal pullup resistor
pinMode(BUTTON_GND, OUTPUT); // configures the digital pin for the button ground to be an output...
digitalWrite(BUTTON_GND, LOW); // ...and writes a zero/low, to supply ground to the button
}
void loop() {
// put your main code here, to run repeatedly:
int val = analogRead(KNOB_PIN); // reads the analog voltage of the potentiometer
int colorOfLed = map(val, 0, 1023, 0, 255); // this map function takes the 10-bit value read from potentiometer and converts to 8-bit value that can be used for the hue
leds[0].setHSV( colorOfLed, 255, 200); // sets the first NeoPixel to the hue of the potentiometer, with full color saturation and 200 brightness
FastLED.show(); // sends the above data to the NeoPixels
buttonPressed = digitalRead(BUTTON_PIN); // read and store button state
if (buttonPressed == LOW) { // logic check if button is currently pressed
for (int i = 1; i < NUM_LEDS; i++) { // this for loop starts at second pixel (1), then increments pixels until until it reachs the last LED on the strip
leds[i] = CHSV( colorOfLed, 255, 200); // sets the incremented pixel to the hue set by pot, full color saturation, 200 brightness
FastLED.show(); // writes data to the NeoPixels
leds[i-1] = CRGB::Black; // blanks out the previous pixel
FastLED.show(); // writes data to the NeoPixels
FastLED.delay(15); // delays 15ms between movement of each pixel
}
FastLED.clear(); // turns off the pixels, and writes immediately, when the pixel animation loop above completes
}
}