NeoPixel Stick use Potentiometer to control LED Brightness





#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif
#define Potpin A1
#define PIN 6

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code
  Serial.begin(9600);

  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {

  rainbowCycle(20);

}



// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;
  int val;

  Serial.println(val);
 
  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      val = analogRead(Potpin);            // reads the value of the potentiometer (value between 0 and 1023)
      val = map(val, 0, 1023, 0, 255);
      strip.setBrightness(val);
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

ความคิดเห็น

  1. Hi! What type of potenciometer you use in this video? 10K?

    ตอบลบ
  2. Hi, can you help with Arduino code? Your totally work, but i wanted to add a button to cycle thru diffrent modes. Problem is I cant get potentiometer to control brightness in real time, like in your code. Probably I dont have int val stuff in the right place, and the animation code is in the way. Here is the code if you have time:

    #include
    #ifdef __AVR__
    #include
    #endif
    #define Potpin A0
    #define PIN 4
    #define BUTTON_PIN 2
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, PIN, NEO_GRB + NEO_KHZ800);

    bool oldState = HIGH;
    int showType = 0;

    void setup() {
    Serial.begin(9600);

    pinMode(BUTTON_PIN, INPUT_PULLUP);
    strip.begin();
    strip.show();
    }
    void loop() {
    int val;
    val = analogRead(Potpin);
    val = map(val, 0, 1023, 0, 255);
    strip.setBrightness(val);


    // Get current button state.
    bool newState = digitalRead(BUTTON_PIN);


    // Check if state changed from high to low (button press).
    if (newState == LOW && oldState == HIGH) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {
    showType++;
    if (showType > 5)
    showType=0;
    startShow(showType);
    }
    }

    // Set the last button state to the old state.
    oldState = newState;
    }

    void startShow(int i) {


    switch(i){
    case 0: colorWipe(strip.Color(0, 0, 0), 50); // black
    break;
    case 1: colorWipe(strip.Color(255, 214, 170), 50); // Cool white
    break;
    case 2: colorWipe(strip.Color(255, 241, 224), 50); // Warm white
    break;
    case 3: colorWipe(strip.Color(255, 183, 76), 50); // HPS
    break;
    case 4: colorWipe(strip.Color(255, 0, 144), 50); // Pink
    break;
    case 5: colorWipe(strip.Color(101, 0, 100), 50); // pink2
    break;
    }
    }

    // Fill the dots one after the other with a color
    void colorWipe(uint32_t c, uint8_t wait) {

    for(uint16_t i=0; i<strip.numPixels(); i++) {


    strip.setPixelColor(i, c);
    strip.show();
    delay(25);
    }
    }

    thanks!

    ตอบลบ

แสดงความคิดเห็น