|
|
@@ -0,0 +1,78 @@
|
|
|
+#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 PIN 0
|
|
|
+#define NUMPIXELS 25 // 24
|
|
|
+#define CENTER 12.5
|
|
|
+Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
|
|
|
+double hue = 0.0;
|
|
|
+ void setup() {
|
|
|
+ pixels.begin();
|
|
|
+ pinMode(1, OUTPUT); //LED on Model A
|
|
|
+ pinMode(PIN, OUTPUT); //LED on Model A
|
|
|
+ digitalWrite(1, HIGH);
|
|
|
+ delay(500);
|
|
|
+ digitalWrite(1, LOW);
|
|
|
+ }
|
|
|
+
|
|
|
+ // the loop routine runs over and over again forever:
|
|
|
+ void loop() {
|
|
|
+
|
|
|
+ for(int i=0;i<NUMPIXELS;i++){
|
|
|
+ int r,g,b;
|
|
|
+ int hueOffset = (abs(CENTER-i)/(float)CENTER) * 75;
|
|
|
+ HSVtoRGB(hue + hueOffset, 100, 15,r,g,b);
|
|
|
+ pixels.setPixelColor(i, pixels.Color(r,g,b)); // Moderately bright green color.
|
|
|
+ }
|
|
|
+ hue += 0.5;
|
|
|
+ if(hue>=360) {
|
|
|
+ hue -= 360;
|
|
|
+ }
|
|
|
+ pixels.show(); // This sends the updated pixel color to the hardware.
|
|
|
+ delay(15); // Delay for a period of time (in milliseconds).
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|