Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1754 - 1
//*******************************************************************
2
// Definition of color pattern and sequences
3
//*******************************************************************
4
 
5
// Fade In
6
void fadein( uint8_t r, uint8_t g, uint8_t b, uint8_t wait, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
7
 
8
 uint8_t r2, g2, b2;
9
 
10
for (uint8_t j = 127; j > 10; j--){
11
  uint8_t rh = r-(j*r/127);
12
   if((r || rh) && rh <= r) r2 = rh;
13
   if(rh > r) r2 = r;
14
   if(r == 0) r2 = 0;
15
  uint8_t gh = g-(j*g/127);
16
   if((g || gh) && gh <= g) g2 = gh;
17
   if(gh > g) g2 = g;
18
   if(g == 0) g2 = 0;
19
  uint8_t bh = b-(j*b/127);
20
   if((b || bh) && bh <= b) b2 = bh;
21
   if(bh > b) b2 = b;
22
   if(b == 0) b2 = 0;
23
 for(uint8_t i=0; i<riggerSize; i++) {
24
 strip.setPixelColor(i, r2, g2, b2, ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
25
 }
26
  strip.show();
27
  delay(wait);
28
 }
29
}
30
 
31
// Fade Out
32
void fadeout(uint8_t r, uint8_t g, uint8_t b, uint8_t wait, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
33
 
34
 uint8_t r2, g2, b2;
35
 
36
for (uint8_t j = 10; j < 127; j++){
37
  uint8_t rh = r-(j*r/127);
38
   if((r || 0) && rh < r) r2 = rh;
39
   if(r == 0) r2 = 0;
40
  uint8_t gh = g-(j*g/127);
41
   if((g || 0) && gh < g) g2 = gh;
42
   if(g == 0) g2 = 0;
43
  uint8_t bh = b-(j*b/127);
44
   if((b || 0) && bh < b) b2 = bh;
45
   if(b == 0) b2 = 0;
46
for(int i=0; i<riggerSize; i++) {
47
 strip.setPixelColor(i, r2, g2, b2,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
48
 }
49
  strip.show();
50
  delay(wait);
51
 }
52
for(int i=0; i<riggerSize; i++) {
53
 strip.setPixelColor(i, 0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
54
 }
55
}
56
 
57
// Flashing Light
58
void flashLight(uint8_t wait, uint8_t cyl, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
59
 
60
  for (int j=0; j < cyl; j++) {
61
  for (int x = 0; x<2; x++){
62
    for (int i = 0; i < riggerSize; i++){
63
     strip.setPixelColor(i, 127, 50,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
64
    }
65
   strip.show();
66
   delay(wait);
67
    for (int i = 0; i < riggerSize; i++){
68
     strip.setPixelColor(i, 0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
69
    }
70
   strip.show();
71
   delay(wait);
72
  }
73
  }
74
}
75
 
76
// Two colors flashing on left and right.
77
void police(uint8_t wait, uint8_t cyl, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
78
 
79
  for (int j=0; j < cyl; j++) {
80
  for (int x = 0; x<2; x++){
81
    for (int i = 0; i < (riggerSize/2); i++){
82
     strip.setPixelColor(i, 127,0,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
83
    }
84
   strip.show();
85
   delay(wait);
86
    for (int i = 0; i < (riggerSize/2); i++){
87
     strip.setPixelColor(i, 0, 0,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
88
    }
89
   strip.show();
90
   delay(wait);
91
  }
92
  for (int x = 0; x<2; x++){
93
    for (int i = (riggerSize/2); i < riggerSize; i++){
94
     strip.setPixelColor(i, 0, 0,127,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
95
     }
96
   strip.show();
97
    delay(wait);
98
  for (int i = (riggerSize/2); i < riggerSize; i++){
99
     strip.setPixelColor(i, 0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
100
     }
101
   strip.show();
102
   delay(wait);
103
   }
104
 }
105
}
106
 
107
// Cycle through two colors, equally spaced around the Strip
108
void circlinglights(uint8_t wait, uint8_t cyl, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
109
 uint16_t b=0;
110
 uint16_t r=riggerSize-1;
111
 
112
 for (int j=0; j < stripSize * cyl; j++) {
113
    strip.setPixelColor(b%riggerSize,0,2,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
114
    strip.setPixelColor((b+1)%riggerSize,1,16,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
115
    strip.setPixelColor((b+2)%riggerSize,0,55,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
116
    strip.setPixelColor((b+3)%riggerSize,0,127,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
117
    strip.setPixelColor(r%riggerSize,2,1,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
118
    strip.setPixelColor((r+riggerSize-1)%riggerSize,16,3,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
119
    strip.setPixelColor((r+riggerSize-2)%riggerSize,55,15,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
120
    strip.setPixelColor((r+riggerSize-3)%riggerSize,127,20,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
121
    strip.show();
122
    delay(wait);
123
    strip.setPixelColor(b%riggerSize,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
124
    strip.setPixelColor(r%riggerSize,0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
125
    strip.show();
126
    if (b++==riggerSize) b=0;
127
    if (r--==0) r=riggerSize;
128
    strip.show(); // write all the pixels out
129
  }
130
 clearstrip ();
131
}
132
 
133
 
134
// fill strip dots by dot with selected color
135
void colorWipe( uint8_t r, uint8_t g, uint8_t b, uint8_t wait, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
136
 int i;
137
 
138
 for (i=0; i < riggerSize; i++) {
139
 strip.setPixelColor(i , r, g, b ,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
140
 strip.show();
141
 delay(wait);
142
 }
143
}
144
 
145
// Chase a dot down the strip
146
// good for testing purposes
147
void colorChase( uint8_t r, uint8_t g, uint8_t b, uint8_t wait, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
148
 int pix;
149
 
150
 clearstrip ();
151
 
152
 for (pix=0; pix < riggerSize-1; pix++) {
153
 strip.setPixelColor(pix , r, g, b ,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8); // set one pixel
154
 strip.show(); // refresh strip display
155
 delay(wait); // hold image for a moment
156
 strip.setPixelColor(pix,0,0, 0, ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8); // erase pixel (but don't refresh yet)
157
 }
158
 strip.show(); // for last erased pixel
159
}
160
 
161
// Chase a dot reverse up the strip
162
// good for testing purposes
163
void colorChaseRev( uint8_t r, uint8_t g, uint8_t b, uint8_t wait, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
164
 int i;
165
 
166
 clearstrip ();
167
 
168
 for (i=riggerSize-1; i > 0; i--) {
169
 strip.setPixelColor(i,  r, g, b ,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8); // set one pixel
170
 strip.show(); // refresh strip display
171
 delay(wait); // hold image for a moment
172
 strip.setPixelColor(i,0,0, 0,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8); // erase pixel (but don't refresh yet)
173
 }
174
 strip.show(); // for last erased pixel
175
}
176
 
177
// An "ordered dither" fills every pixel in a sequence that looks
178
// sparkly and almost random, but actually follows a specific order.
179
void dither(uint8_t r, uint8_t g, uint8_t b, uint8_t wait, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
180
 
181
 // Determine highest bit needed to represent pixel index
182
 int hiBit = 0;
183
 int n = (riggerSize/3)+1;
184
 for(int bit=1; bit < 0x8000; bit <<= 1) {
185
 if(n & bit) hiBit = bit;
186
 }
187
 
188
 int bit, reverse;
189
 for(int i=0; i<(hiBit << 1); i++) {
190
 // Reverse the bits in i to create ordered dither:
191
 reverse = 0;
192
 for(bit=1; bit <= hiBit; bit <<= 1) {
193
 reverse <<= 1;
194
 if(i & bit) reverse |= 1;
195
 }
196
 strip.setPixelColor(reverse, r,g,b,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
197
 strip.show();
198
 delay(wait);
199
 }
200
 delay(250); // Hold image for 1/4 sec
201
}
202
 
203
// "Larson scanner" = Cylon/KITT bouncing light effect
204
void scanner(uint8_t r, uint8_t g, uint8_t b, uint8_t wait, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
205
 int i, j, pos, dir;
206
 
207
 pos = 1;
208
 dir = 1;
209
 
210
 for(i=1; i<(riggerSize)*8; i++) {
211
 strip.setPixelColor(pos - 1, strip.Color(r/8, g/8, b/8),ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
212
 strip.setPixelColor(pos, strip.Color(r, g, b),ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
213
 strip.setPixelColor(pos + 1, strip.Color(r/8, g/8, b/8),ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
214
 
215
 strip.show();
216
 delay(wait);
217
 // If we wanted to be sneaky we could erase just the tail end
218
 // pixel, but it's much easier just to erase the whole thing
219
 // and draw a new one next time.
220
 for(j=-1; j<= 1; j++) strip.setPixelColor(pos+j, strip.Color(0,0,0),ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8); // Bounce off ends of strip
221
 
222
 pos += dir;
223
 if(pos < 1) {
224
 pos = 1;
225
 dir = -dir;
226
 } else if(pos >= riggerSize-2) {
227
 pos = riggerSize - 2;
228
 dir = -dir;
229
 }
230
 }
231
}
232
 
233
// Sine wave effect
234
#define PI 3.14159265
235
void wave( uint8_t r, uint8_t g, uint8_t b, uint8_t wait, int stp, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
236
 float y;
237
 uint8_t r2, g2, b2;
238
 
239
 for(int x=0; x<(riggerSize*5); x++)
240
 {
241
 for(int i=0; i<riggerSize; i++) {
242
 y = sin(PI * (float)stp * (float)(x + i) / (float)riggerSize);
243
 if(y >= 0.0) {
244
 // Peaks of sine wave are white
245
 y = 1.0 - y; // Translate Y to 0.0 (top) to 1.0 (center)
246
 r2 = 127 - (byte)((float)(127 - r) * y);
247
 g2 = 127 - (byte)((float)(127 - g) * y);
248
 b2 = 127 - (byte)((float)(127 - b) * y);
249
 } else {
250
 // Troughs of sine wave are black
251
 y += 1.0; // Translate Y to 0.0 (bottom) to 1.0 (center)
252
 r2 = (byte)((float)r * y);
253
 g2 = (byte)((float)g * y);
254
 b2 = (byte)((float)b * y);
255
 }
256
 strip.setPixelColor(i, r2, g2, b2,ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
257
 }
258
 strip.show();
259
 delay(wait);
260
 }
261
}
262
 
263
void rainbowCycle(uint8_t wait, uint8_t cyl, uint8_t ri1, uint8_t ri2, uint8_t ri3, uint8_t ri4, uint8_t ri5, uint8_t ri6, uint8_t ri7, uint8_t ri8) {
264
 uint16_t i, j;
265
 
266
 for (j=0; j < 384 * cyl; j++) { // 5 cycles of all 384 colors in the wheel
267
 for (i=0; i < riggerSize; i++) {
268
 // tricky math! we use each pixel as a fraction of the full 384-color
269
 // wheel (thats the i / strip.numPixels() part)
270
 // Then add in j which makes the colors go around per pixel
271
 // the % 384 is to make the wheel cycle around
272
 strip.setPixelColor(i, Wheel(((i * 384 / riggerSize) + j) % 384),ri1, ri2, ri3, ri4, ri5, ri6, ri7, ri8);
273
 }
274
 strip.show(); // write all the pixels out
275
 delay(wait);
276
 }
277
}
278
/* Helper functions */
279
 
280
//Input a value 0 to 384 to get a color value.
281
//The colours are a transition r - g - b - back to r
282
 
283
uint32_t Wheel(uint16_t WheelPos)
284
{
285
 byte r, g, b;
286
 switch(WheelPos / 128)
287
 {
288
 case 0:
289
 r = 127 - WheelPos % 128; // red down
290
 g = WheelPos % 128; // green up
291
 b = 0; // blue off
292
 break;
293
 case 1:
294
 g = 127 - WheelPos % 128; // green down
295
 b = WheelPos % 128; // blue up
296
 r = 0; // red off
297
 break;
298
 case 2:
299
 b = 127 - WheelPos % 128; // blue down
300
 r = WheelPos % 128; // red up
301
 g = 0; // green off
302
 break;
303
 }
304
 return(strip.Color(r,g,b));
305
}
306
 
307
 // Clear strip
308
 void clearstrip (){
309
   for (int i=0; i < stripSize; i++) {
310
     strip.setPixelColor(i, 0);
311
   }
312
 }
313
 
314
// Set single LED
315
void setLED(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t r1, uint8_t r2, uint8_t r3, uint8_t r4, uint8_t r5, uint8_t r6, uint8_t r7, uint8_t r8){
316
 n=n-1;
317
 strip.setPixelColor(n, strip.Color(r, g, b), r1, r2, r3, r4, r5, r6, r7, r8);
318
}
319