CCC-2016 Lightshow

Dependencies:   WS2812 mbed

Committer:
HMFK03LST1
Date:
Mon Aug 17 16:56:30 2015 +0000
Revision:
0:33a6b0d61b90
unreadable code competition CCC-Camp 2016

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HMFK03LST1 0:33a6b0d61b90 1 #include "mbed.h"
HMFK03LST1 0:33a6b0d61b90 2 #include "WS2812.h"
HMFK03LST1 0:33a6b0d61b90 3
HMFK03LST1 0:33a6b0d61b90 4 const int size = 300; //number of LED´s
HMFK03LST1 0:33a6b0d61b90 5 int line = 25; //length of Flash
HMFK03LST1 0:33a6b0d61b90 6 DigitalOut myled(LED1);
HMFK03LST1 0:33a6b0d61b90 7 WS2812 strip (p5,size,6,17,9,14); //mbed 4088: 10,24,20,22 see https://developer.mbed.org/users/bridadan/code/WS2812/
HMFK03LST1 0:33a6b0d61b90 8
HMFK03LST1 0:33a6b0d61b90 9 //Ticker speed;
HMFK03LST1 0:33a6b0d61b90 10 //Ticker baum;
HMFK03LST1 0:33a6b0d61b90 11
HMFK03LST1 0:33a6b0d61b90 12
HMFK03LST1 0:33a6b0d61b90 13 int Buffer[size + 70]; //a buffer is never to big
HMFK03LST1 0:33a6b0d61b90 14 int dir = 1;
HMFK03LST1 0:33a6b0d61b90 15 int spe = 5;
HMFK03LST1 0:33a6b0d61b90 16 int spe_2 = 70;
HMFK03LST1 0:33a6b0d61b90 17 int nd = 1;
HMFK03LST1 0:33a6b0d61b90 18 int run_i = 1;
HMFK03LST1 0:33a6b0d61b90 19
HMFK03LST1 0:33a6b0d61b90 20 // Short Light {Startposition,Direktion} Startposition must > 10 and < (size-10)
HMFK03LST1 0:33a6b0d61b90 21 int single[5][2]={{9,1},{140,1},{280,1},{120,-1},{260,-1}};
HMFK03LST1 0:33a6b0d61b90 22
HMFK03LST1 0:33a6b0d61b90 23
HMFK03LST1 0:33a6b0d61b90 24
HMFK03LST1 0:33a6b0d61b90 25
HMFK03LST1 0:33a6b0d61b90 26
HMFK03LST1 0:33a6b0d61b90 27 int color_set(uint8_t rot,uint8_t gruen, uint8_t blau, uint8_t alpha)
HMFK03LST1 0:33a6b0d61b90 28 {
HMFK03LST1 0:33a6b0d61b90 29 return ((alpha<<24) + (rot<<16) + (gruen<<8) + blau);
HMFK03LST1 0:33a6b0d61b90 30 }
HMFK03LST1 0:33a6b0d61b90 31
HMFK03LST1 0:33a6b0d61b90 32
HMFK03LST1 0:33a6b0d61b90 33 //change speed
HMFK03LST1 0:33a6b0d61b90 34 void do_speed()
HMFK03LST1 0:33a6b0d61b90 35 {
HMFK03LST1 0:33a6b0d61b90 36 spe_2 = spe_2 + dir;
HMFK03LST1 0:33a6b0d61b90 37 if (spe_2 > 180) dir = -1;
HMFK03LST1 0:33a6b0d61b90 38 if (spe_2 < 60) dir = 1;
HMFK03LST1 0:33a6b0d61b90 39 spe = spe_2/20;
HMFK03LST1 0:33a6b0d61b90 40 }
HMFK03LST1 0:33a6b0d61b90 41
HMFK03LST1 0:33a6b0d61b90 42
HMFK03LST1 0:33a6b0d61b90 43 void do_single(int num,int c)
HMFK03LST1 0:33a6b0d61b90 44 {
HMFK03LST1 0:33a6b0d61b90 45 Buffer[single[num][0]] = color_set(((c&0x00FF0000)>>16)-nd%30,
HMFK03LST1 0:33a6b0d61b90 46 ((c&0x0000FF00)>>8)+nd%35,(c&0x000000FF)+nd%10,250);
HMFK03LST1 0:33a6b0d61b90 47 double ran = rand()%2;
HMFK03LST1 0:33a6b0d61b90 48 single[num][0] = single[num][0] + ((ran)* single[num][1]);
HMFK03LST1 0:33a6b0d61b90 49 if (single[num][0] > (size-13)) single[num][1]= -1;
HMFK03LST1 0:33a6b0d61b90 50 if (single[num][0] < 8 ) single[num][1] = 1;
HMFK03LST1 0:33a6b0d61b90 51 Buffer[single[num][0]-3] = color_set(0,0,0,0);
HMFK03LST1 0:33a6b0d61b90 52 Buffer[single[num][0]-4] = color_set(0,0,0,0);
HMFK03LST1 0:33a6b0d61b90 53 Buffer[single[num][0]+3] = color_set(0,0,0,0);
HMFK03LST1 0:33a6b0d61b90 54 Buffer[single[num][0]+4] = color_set(0,0,0,0);
HMFK03LST1 0:33a6b0d61b90 55 }
HMFK03LST1 0:33a6b0d61b90 56
HMFK03LST1 0:33a6b0d61b90 57
HMFK03LST1 0:33a6b0d61b90 58 void do_baum()
HMFK03LST1 0:33a6b0d61b90 59 {
HMFK03LST1 0:33a6b0d61b90 60 for (int i = size - line; i < size; i++)
HMFK03LST1 0:33a6b0d61b90 61 {
HMFK03LST1 0:33a6b0d61b90 62 Buffer[i] &= color_set(124+spe*12+nd%60,255-spe*27+nd%45,124-spe*13-nd%35,240-nd%200);
HMFK03LST1 0:33a6b0d61b90 63 nd+=12;
HMFK03LST1 0:33a6b0d61b90 64 }
HMFK03LST1 0:33a6b0d61b90 65 }
HMFK03LST1 0:33a6b0d61b90 66
HMFK03LST1 0:33a6b0d61b90 67 void do_run()
HMFK03LST1 0:33a6b0d61b90 68 {
HMFK03LST1 0:33a6b0d61b90 69 if (run_i < line)
HMFK03LST1 0:33a6b0d61b90 70 {
HMFK03LST1 0:33a6b0d61b90 71 for (int j = 0; j < spe; j++) Buffer[run_i+j] = color_set(spe*20-nd%15,253-spe*20,124-spe*13+nd%25,240);
HMFK03LST1 0:33a6b0d61b90 72 }
HMFK03LST1 0:33a6b0d61b90 73 else
HMFK03LST1 0:33a6b0d61b90 74 {
HMFK03LST1 0:33a6b0d61b90 75 for (int j = 0; j < spe; j++) Buffer[run_i+j] = color_set(spe*27-nd%25,253-spe*27,124-spe*13+nd%55,240);
HMFK03LST1 0:33a6b0d61b90 76 for (int j = 0; j < spe; j++) Buffer[run_i+j-line] = color_set(0,0,0,0);
HMFK03LST1 0:33a6b0d61b90 77 }
HMFK03LST1 0:33a6b0d61b90 78
HMFK03LST1 0:33a6b0d61b90 79 run_i+=spe;
HMFK03LST1 0:33a6b0d61b90 80
HMFK03LST1 0:33a6b0d61b90 81 if(run_i > size) run_i = 0;
HMFK03LST1 0:33a6b0d61b90 82 }
HMFK03LST1 0:33a6b0d61b90 83
HMFK03LST1 0:33a6b0d61b90 84 void show(bool i)
HMFK03LST1 0:33a6b0d61b90 85 {
HMFK03LST1 0:33a6b0d61b90 86 do_single(0,0x00ff0000);
HMFK03LST1 0:33a6b0d61b90 87 do_single(1,0x0006de08);
HMFK03LST1 0:33a6b0d61b90 88 do_single(2,0x000000df);
HMFK03LST1 0:33a6b0d61b90 89 do_single(3,0xdeadbeef);
HMFK03LST1 0:33a6b0d61b90 90 do_single(4,0x00442288);
HMFK03LST1 0:33a6b0d61b90 91 do_baum();
HMFK03LST1 0:33a6b0d61b90 92 do_speed();
HMFK03LST1 0:33a6b0d61b90 93 do_run();
HMFK03LST1 0:33a6b0d61b90 94 if (i>0) for (int a=0; a<size;a++){ Buffer[a]^= 4294967295;};
HMFK03LST1 0:33a6b0d61b90 95 strip.write(Buffer);
HMFK03LST1 0:33a6b0d61b90 96 }
HMFK03LST1 0:33a6b0d61b90 97
HMFK03LST1 0:33a6b0d61b90 98 int main()
HMFK03LST1 0:33a6b0d61b90 99 {
HMFK03LST1 0:33a6b0d61b90 100 while(1)
HMFK03LST1 0:33a6b0d61b90 101 {
HMFK03LST1 0:33a6b0d61b90 102 show(0);
HMFK03LST1 0:33a6b0d61b90 103 myled = !myled;
HMFK03LST1 0:33a6b0d61b90 104 }
HMFK03LST1 0:33a6b0d61b90 105 }