Hochschule München
/
WS2812_RS
CCC-2016 Lightshow
main.cpp@0:33a6b0d61b90, 2015-08-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |