#include MATRIX7219 mx(4,10,13,4); int scan_timer=0, sw_old=0, sw_new, expand=0, pat_no=0; int frame_timer[3], speed_data[3], pattern[2][23][8]; int loop_lim[] = {23,16,16,15,15,15,15}; int mesh[15][8] = { { 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0 }, { 2, 3, 0, 0, 0, 0, 0, 0 }, { 5, 4, 7, 0, 0, 0, 0, 0 }, { 10, 11, 8, 15, 0, 0, 0, 0 }, { 21, 20, 23, 16, 31, 0, 0, 0 }, { 42, 43, 40, 47, 32, 63, 0, 0 }, { 0x55, 0x54, 0x57, 0x50, 0x5f, 0x40, 0x7f, 0 }, { 0xaa, 0xab, 0xa8, 0xaf, 0xa0, 0xbf, 0x80, 0xff }, { 0x54, 0x54, 0x57, 0x50, 0x5f, 0x40, 0x7f, 0 }, { 0xa8, 0xa8, 0xa8, 0xaf, 0xa0, 0xbf, 0x80, 0xff }, { 0x50, 0x50, 0x50, 0x50, 0x5f, 0x40, 0x7f, 0 }, { 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xbf, 0x80, 0xff }, { 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7f, 0 }, { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff }, }; void setup(){ mx.begin(); mx.clear(); mx.setBrightness(3); mx.setReverse(false); randomSeed(analogRead(4)); pattern_making(); } void loop(){ if(++scan_timer > 200){ scan_timer = 0; sw_scan(); int dat = analogRead(A0); speed_data[0] = map(dat, 0, 1023, 900, 10); speed_data[1] = analogRead(A1) / 64; speed_data[2] = analogRead(A2) / 64; } if(++frame_timer[0] > speed_data[0]){ frame_timer[0] = 0; if(++frame_timer[1] > 50){ frame_timer[1] = 0; display_patterns(frame_timer[2]); if(++frame_timer[2] >= loop_lim[pat_no] ) frame_timer[2] = 0; } } } void sw_scan(){ sw_new = ! (analogRead(A3)/512); if(sw_new != sw_old){ sw_old = sw_new; if(sw_new == 1){ frame_timer[2] = 0; pat_no = random(10); if(pat_no > 6) pat_no=0; pattern_making(); } } } int bit_reverse(int k){ return( ((k&1)<<7)|((k&2)<<5)|((k&4)<<3)|((k&8)<<1)|((k&16)>>1)|((k&32)>>3)|((k&64)>>5)|((k&128)>>7) ); } void display_patterns(int frame){ int i,j; mx.clear(); j = frame; for(i=0; i<8; i++) mx.setRow(i+1, pattern[0][j][i], 1); j = ( frame + speed_data[1] ) % loop_lim[pat_no]; for(i=0; i<8; i++) mx.setRow(i+1, bit_reverse(pattern[0][j][i]), 2); j = ( frame + speed_data[2] ) % loop_lim[pat_no]; for(i=0; i<8; i++) mx.setRow(8-i, pattern[0][j][i], 3); j = ( frame + speed_data[1] + speed_data[2] ) % loop_lim[pat_no]; for(i=0; i<8; i++) mx.setRow(8-i, bit_reverse(pattern[0][j][i]), 4); } void expand_set(){ int j,k; expand = (expand + 1 + random(3)) % 4; switch(expand){ case 0: for(j=0; j>k) >> (7-j); } for(j=8; j<15; j++){ for(k=0; k<8; k++){ if((j-8) < k) pattern[1][j][k] = 255 >> (k-(j-7)); else pattern[1][j][k] = 256 - (2 << ((j-8)-k)); } } for(j=15; j<22; j++){ for(k=0; k<8; k++){ if((j-15) < k) pattern[1][j][k] = 256 - (2 << (j-8-k) ); else pattern[1][j][k] = 0; } } for(k=0; k<8; k++) pattern[1][22][k] = 0; break; case 1: // pattern loop = 16 for(k=0; k<8; k++) pattern[1][0][k] = 0; for(j=1; j<8; j++){ for(k=0; k<8; k++){ if((j-1) < k) pattern[1][j][k] = 0; else pattern[1][j][k] = (2 << (j-1)) - 1; } } for(k=0; k<8; k++) pattern[1][8][k] = 255; for(j=9; j<16; j++){ for(k=0; k<8; k++){ if((j-9) < k) pattern[1][j][k] = 255; else pattern[1][j][k] = 255 - ( (2 << (j-9) ) - 1 ); } } break; case 2: // pattern loop = 16 for(k=0; k<8; k++) pattern[0][0][k] = 0; for(j=1; j<8; j++){ for(k=0; k<8; k++){ if((j-1) < k) pattern[0][j][k] = 0; else pattern[0][j][k] = (2 << (j-1)) - 1; } } for(k=0; k<8; k++) pattern[0][8][k] = 255; for(j=9; j<16; j++){ for(k=0; k<8; k++){ if((j-9) < k) pattern[0][j][k] = 255; else pattern[0][j][k] = 255 - ( (2 << (j-9) ) - 1 ); } } for(j=0; j