Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Adafruit_NeoPixel.h>
- #define PIN 9
- #define NUM_OF_PIX 64
- #define STEP 11
- // 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)
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_OF_PIX, 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.
- uint32_t startPix = 0;
- uint8_t bright[NUM_OF_PIX];
- uint8_t redMax;
- uint8_t greenMax;
- uint8_t blueMax;
- void setup() {
- strip.begin();
- strip.show(); // Initialize all pixels to 'off'
- for (int i=0; i<NUM_OF_PIX; i++) {
- bright[i] = 0;
- }
- redMax = 63;
- greenMax = 63;
- blueMax = 63;
- }
- void loop() {
- startPix = starlight(redMax, greenMax, blueMax, startPix, 50);
- }
- uint32_t starlight (uint8_t redMax, uint8_t greenMax, uint8_t blueMax, uint32_t startPixel, int wait) {
- uint32_t ret = startPixel;
- bool newStar = false;
- int i = startPixel;
- uint8_t minBright = 31;
- while (!newStar) {
- minBright = 31;
- for (int j=0; j<NUM_OF_PIX; j++) {
- if ((bright[j] != 0) && (bright[j] < minBright)) {
- minBright = bright[j];
- }
- }
- if ((bright[i] == 0) && (minBright > 8)) {
- bright[i] = 1;
- newStar = true;
- }
- else {
- if (bright[i] == 31) {
- bright[i] = 0;
- ret = (i+STEP)%NUM_OF_PIX;
- }
- else if (bright[i] != 0) {
- bright[i]++;
- }
- else {
- newStar = true;
- }
- i += STEP;
- }
- i = i % NUM_OF_PIX;
- }
- for (int i=0; i<strip.numPixels(); i++) {
- uint32_t color;
- uint8_t red;
- uint8_t green;
- uint8_t blue;
- if (bright[i] <= 16) {
- red = (redMax >> 4) * bright[i];
- green = (greenMax >> 4) * bright[i];
- blue = (blueMax >> 4) * bright[i];
- }
- else {
- red = (redMax >> 4) * (32 - bright[i]);
- green = (greenMax >> 4) * (32 - bright[i]);
- blue = (blueMax >> 4) * (32 - bright[i]);
- }
- color = strip.Color(red, green, blue);
- strip.setPixelColor(i, color);
- }
- strip.show();
- delay(wait);
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement