| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #include <Adafruit_NeoPixel.h>
- void HSVtoRGB(float H, float S,float V,int &R, int &G, int &B){
- while(H>360) H-=360;
- if(H>360 || H<0 || S>100 || S<0 || V>100 || V<0){
- return;
- }
- float s = S/100;
- float v = V/100;
- float C = s*v;
- float X = C*(1-abs(fmod(H/60.0, 2)-1));
- float m = v-C;
- float r,g,b;
- if(H >= 0 && H < 60){
- r = C,g = X,b = 0;
- }
- else if(H >= 60 && H < 120){
- r = X,g = C,b = 0;
- }
- else if(H >= 120 && H < 180){
- r = 0,g = C,b = X;
- }
- else if(H >= 180 && H < 240){
- r = 0,g = X,b = C;
- }
- else if(H >= 240 && H < 300){
- r = X,g = 0,b = C;
- }
- else{
- r = C,g = 0,b = X;
- }
- R = (r+m)*255;
- G = (g+m)*255;
- B = (b+m)*255;
- }
- #define PIN1 2
- #define NUMPIXELS 25 // 24
- #define CENTER 12.5
- int mode;
- Adafruit_NeoPixel pixels[] = {
- Adafruit_NeoPixel(NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800),
- };
- int PIN_COUNT = 1;
- double hue = 0.0;
- void setup() {
-
- pinMode(13, OUTPUT); //LED on Model A
- pinMode(10, INPUT); //LED on Model A
- digitalWrite(13, LOW); //LED on Model A
- pinMode(PIN1, OUTPUT);
- pixels[0].begin();
- randomSeed(analogRead(10));
- mode = random(1,4);
- for(int i=0;i<=mode;i++) {
- digitalWrite(13, LOW); //LED on Model A
- delay(100);
- digitalWrite(13, HIGH); //LED on Model A
- delay(100);
- }
- }
- // the loop routine runs over and over again forever:
- void loop() {
- static double power = 1.5;
- static double fac = 0.5/pow(0.5,power);
- for(int i=0;i<NUMPIXELS;i++){
- int r,g,b;
- int hueOffset = (abs(CENTER-i)/(float)CENTER) * 50 * ( pow(mode,4) );
- double h = (hue + hueOffset)/360.,y;
- while(h>1) h-=1;
- if(h<=0.5)
- y = pow(h,power)*fac;
- else
- y = 1-pow(1-h,power)*fac;
- HSVtoRGB(y*360, 100, 20,r,g,b);
- pixels[0].setPixelColor(i, pixels[0].Color(r,g,b)); // Moderately bright green color.
- }
- pixels[0].show(); // This sends the updated pixel color to the hardware.
- hue -= 0.4;
- if(hue>=360) {
- hue -= 360;
- }
- if(hue<=0) {
- hue = 360 + hue;
- }
- // digitalWrite(1, LOW); //LED on Model A
- delay(5); // Delay for a period of time (in milliseconds).
- }
-
|