Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* sketch 1
- turn on a LED when the button is pressed
- turn it off when the button is not pressed (or released)
- */
- int buttonState = 0;
- int pinButton = 2; //the pin where we connect the button
- int LED = 13; //the pin we connect the LED
- #include <Adafruit_NeoPixel.h>
- // data pin
- #define PIN 13
- // led count
- #define CNT 16
- // Parameter 1 = number of pixels in strip
- // Parameter 2 = pin number (most are valid)
- // Parameter 3 = pixel type flags, add together as needed:
- // NEO_RGB Pixels are wired for RGB bitstream
- // NEO_GRB Pixels are wired for GRB bitstream
- // NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)
- // NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip)
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(CNT, PIN, NEO_GRB + NEO_KHZ800);
- uint32_t fire_color = strip.Color (75, 30, 0);
- uint32_t off_color = strip.Color (0, 0, 0);
- ///
- /// Fire simulator
- ///
- class NeoFire
- {
- Adafruit_NeoPixel &strip;
- public:
- NeoFire(Adafruit_NeoPixel&);
- void Draw();
- void Clear(bool update_afterwards = false);
- void AddColor(uint8_t position, uint32_t color);
- void SubstractColor(uint8_t position, uint32_t color);
- uint32_t Blend(uint32_t color1, uint32_t color2);
- uint32_t Substract(uint32_t color1, uint32_t color2);
- };
- ///
- /// Constructor
- ///
- NeoFire::NeoFire(Adafruit_NeoPixel& n_strip)
- : strip (n_strip)
- {
- }
- ///
- /// Set all colors
- ///
- void NeoFire::Draw()
- {
- Clear();
- for(int i=0;i<strip.numPixels();i++)
- {
- AddColor(i, fire_color);
- int r = random(70);
- uint32_t diff_color = strip.Color ( r, r/2, r/2);
- SubstractColor(i, diff_color);
- }
- strip.show();
- }
- ///
- /// Set color of LED
- ///
- void NeoFire::AddColor(uint8_t position, uint32_t color)
- {
- uint32_t blended_color = Blend(strip.getPixelColor(position), color);
- strip.setPixelColor(position, blended_color);
- }
- ///
- /// Set color of LED
- ///
- void NeoFire::SubstractColor(uint8_t position, uint32_t color)
- {
- uint32_t blended_color = Substract(strip.getPixelColor(position), color);
- strip.setPixelColor(position, blended_color);
- }
- ///
- /// Color blending
- ///
- uint32_t NeoFire::Blend(uint32_t color1, uint32_t color2)
- {
- uint8_t r1,g1,b1;
- uint8_t r2,g2,b2;
- uint8_t r3,g3,b3;
- r1 = (uint8_t)(color1 >> 16),
- g1 = (uint8_t)(color1 >> 8),
- b1 = (uint8_t)(color1 >> 0);
- r2 = (uint8_t)(color2 >> 16),
- g2 = (uint8_t)(color2 >> 8),
- b2 = (uint8_t)(color2 >> 0);
- return strip.Color(constrain(r1+r2, 0, 255), constrain(g1+g2, 0, 255), constrain(b1+b2, 0, 255));
- }
- ///
- /// Color blending
- ///
- uint32_t NeoFire::Substract(uint32_t color1, uint32_t color2)
- {
- uint8_t r1,g1,b1;
- uint8_t r2,g2,b2;
- uint8_t r3,g3,b3;
- int16_t r,g,b;
- r1 = (uint8_t)(color1 >> 16),
- g1 = (uint8_t)(color1 >> 8),
- b1 = (uint8_t)(color1 >> 0);
- r2 = (uint8_t)(color2 >> 16),
- g2 = (uint8_t)(color2 >> 8),
- b2 = (uint8_t)(color2 >> 0);
- r=(int16_t)r1-(int16_t)r2;
- g=(int16_t)g1-(int16_t)g2;
- b=(int16_t)b1-(int16_t)b2;
- if(r<0) r=0;
- if(g<0) g=0;
- if(b<0) b=0;
- return strip.Color(r, g, b);
- }
- ///
- /// Every LED to black
- ///
- void NeoFire::Clear(bool display_afterwards)
- {
- for(uint16_t i=0; i<strip.numPixels(); i++)
- {
- strip.setPixelColor(i, off_color);
- }
- if(display_afterwards)
- {
- strip.show();
- }
- }
- NeoFire fire(strip);
- ///
- /// Setup
- ///
- void setup()
- {
- pinMode(pinButton, INPUT_PULLUP); //set the button pin as INPUT
- pinMode(LED, OUTPUT); //set the LED pin as OUTPUT
- strip.begin();
- strip.show(); // Initialize all pixels to 'off'
- }
- ///
- /// Main loop
- ///
- void loop(){
- buttonState = digitalRead(pinButton);
- if(buttonState == 0) { //if is pressed
- digitalWrite(LED, 1); //write 1 or HIGH to led pin
- fire.Draw();
- } else { //if not pressed
- digitalWrite(LED, 0); //write 0 or low to led pin
- fire.Clear();
- }
- delay(random(5,60));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement