/ 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 }