/ Kaleidoscope_Eyes_NeoPixel_LED_Goggles / Kaleidoscope_Eyes_NeoPixel_LED_Goggles.ino
Kaleidoscope_Eyes_NeoPixel_LED_Goggles.ino
 1  // SPDX-FileCopyrightText: 2017 Mikey Sklar for Adafruit Industries
 2  //
 3  // SPDX-License-Identifier: MIT
 4  
 5  // Low power NeoPixel goggles example.  Makes a nice blinky display
 6  // with just a few LEDs on at any time.
 7  
 8  #include <Adafruit_NeoPixel.h>
 9  #ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
10   #include <avr/power.h>
11  #endif
12  
13  #define PIN 0
14  
15  Adafruit_NeoPixel pixels = Adafruit_NeoPixel(32, PIN);
16  
17  uint8_t  mode   = 0, // Current animation effect
18           offset = 0; // Position of spinny eyes
19  uint32_t color  = 0xFF0000; // Start red
20  uint32_t prevTime;
21  
22  void setup() {
23  #ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
24    if(F_CPU == 16000000) clock_prescale_set(clock_div_1);
25  #endif
26    pixels.begin();
27    pixels.setBrightness(85); // 1/3 brightness
28    prevTime = millis();
29  }
30  
31  void loop() {
32    uint8_t  i;
33    uint32_t t;
34  
35    switch(mode) {
36  
37     case 0: // Random sparks - just one LED on at a time!
38      i = random(32);
39      pixels.setPixelColor(i, color);
40      pixels.show();
41      delay(10);
42      pixels.setPixelColor(i, 0);
43      break;
44   
45     case 1: // Spinny wheels (8 LEDs on at a time)
46      for(i=0; i<16; i++) {
47        uint32_t c = 0;
48        if(((offset + i) & 7) < 2) c = color; // 4 pixels on...
49        pixels.setPixelColor(   i, c); // First eye
50        pixels.setPixelColor(31-i, c); // Second eye (flipped)
51      }
52      pixels.show();
53      offset++;
54      delay(50);
55      break;
56    }
57  
58    t = millis();
59    if((t - prevTime) > 8000) {      // Every 8 seconds...
60      mode++;                        // Next mode
61      if(mode > 1) {                 // End of modes?
62        mode = 0;                    // Start modes over
63        color >>= 8;                 // Next color R->G->B
64        if(!color) color = 0xFF0000; // Reset to red
65      }
66      for(i=0; i<32; i++) pixels.setPixelColor(i, 0);
67      prevTime = t;
68    }
69  }