#include #define NONE 0 #define SCROLL_LEFT 1 #define SCROLL_RIGHT 2 #define SWIPE_LEFT 3 #define SWIPE_RIGHT 4 #define EQU 5 #define RAN 6 #define PATTERN 7 #define SEARCH 8 #define RIGHT_SIDE 1 #define LEFT_SIDE 2 #define BOTH_SIDE 3 #define SIDE_ON 1 #define SIDE_MOVE 2 #define SIDE_BOUNCE1 3 #define SIDE_BOUNCE2 4 #define SIDE_SLIDE 5 #define SIDE_ALT 6 #define RIGHT_EAR 1 #define LEFT_EAR 2 #define BOTH_EAR 3 #define EAR_ON 1 #define EAR_SPIN 2 #define EAR_SPIN_CW1 3 #define EAR_SPIN_CCW1 4 #define EAR_STROBE 5 #define EAR_SPIN_CW2 6 #define EAR_SPIN_CCW2 7 typedef void (*displayFunct) (); boolean running = false; boolean autochange = true; unsigned long time; unsigned long btime[3]; char matrix_size = 0; char pattern_offset = 0; char front_pattern_state = 0; char side_pattern_state = 0; char ear_pattern_state = 0; char front_state = 0; unsigned int front_delay = 50; char front_loop = 0; unsigned long front_time = 50; char pattern_type = NONE; static char side_type = NONE; char side_state = 0; unsigned int side_delay = 50; unsigned long side_time = 50; char ear_type = NONE; char ear_state = 0; unsigned int ear_delay = 50; unsigned long ear_time = 50; unsigned char pattern[100]; unsigned char matrix[4][8]; unsigned char slight[3]; unsigned char elight[2]; static LedControl lcf = LedControl(12,11,10,4); static LedControl lcs = LedControl(7,6,5,1); #define FRONT_PATTERN_NUM 10 const displayFunct frontPatterns[] = { slideWave, scrollHalloween, searching, scrollRobot, scrollHuman, scrollDaftPunk, showRandom, flashEyes, scrollArrow, fullEQU, flashHearts }; #define SIDE_PATTERN_NUM 5 const displayFunct sidePatterns[] = { sidesOn, sidesMove, sidesBounce1, sidesBounce2, sidesSlide, sidesAlt }; #define EAR_PATTERN_NUM 6 const displayFunct earPatterns[] = { earOn, earStrobe, earSpinCW1, earSpinCCW1, earSpin, earSpinCW2, earSpinCCW2 }; void setup() { pinMode(2, INPUT); digitalWrite(2, HIGH); pinMode(3, INPUT); digitalWrite(3, HIGH); pinMode(4, INPUT); digitalWrite(4, HIGH); pinMode(13, OUTPUT); digitalWrite(13, LOW); //Clear values clearAll(); setFrontBrightness(8); setSideBrightness(0); frontPatterns[front_pattern_state](); sidePatterns[side_pattern_state](); earPatterns[ear_pattern_state](); display(); delay(50); } void loop(){ while(running == false){ time = millis(); checkButtons(); } startup(); while(running == true) { time = millis(); checkButtons(); runFront(); runSides(); runEars(); display(); } shutdown(); } void runFront(){ get8x8(0,front_state); get8x8(1,front_state); get8x8(2,front_state); get8x8(3,front_state); if(front_time > time){ return; } front_time = time + front_delay; if(pattern_type == EQU){ front_state+=4; } else { front_state++; } if(front_state > matrix_size + pattern_offset){ if(front_loop > 0){ front_state = 0; front_loop--; return; } else { front_loop = 0; } if(autochange == true){ front_pattern_state++; if(front_pattern_state > FRONT_PATTERN_NUM){front_pattern_state = 1;} } frontPatterns[front_pattern_state](); side_pattern_state++; if(side_pattern_state > SIDE_PATTERN_NUM){ side_pattern_state = 1; } sidePatterns[side_pattern_state](); ear_pattern_state++; if(ear_pattern_state > EAR_PATTERN_NUM){ ear_pattern_state = 1; } earPatterns[ear_pattern_state](); if(front_loop > 0){ front_time += 1000; front_state--; } } } void get8x8(int index, int offset){ int i,j; for(i=0; i<8; i++){ matrix[index][i] = 0; } if(pattern_type == SCROLL_LEFT){ for(i=0; i<8; i++){ for(j=7; j>=0; j--){ if(j+offset+(index*8) >= 0 && j+offset+(index*8) < matrix_size){ matrix[index][i] |= (((pattern[j+offset+(index*8)] >> i) & 0x01) << j); } else { matrix[index][i] |= ( 0x00 << j); } } } } else if(pattern_type == SCROLL_RIGHT){ for(i=0; i<8; i++){ for(j=0; j<8; j++){ if(j+offset+((3-index)*8) > 0 && j+offset+((3-index)*8) <= matrix_size){ matrix[index][i] |= (((pattern[matrix_size-(j+offset+((3-index)*8))] >> i) & 0x01) << 7-j); } else { matrix[index][i] |= ( 0x00 << j); } } } } else if(pattern_type == SWIPE_LEFT || pattern_type == SWIPE_RIGHT){ for(i=0; i<8; i++){ if(pattern_type == SWIPE_LEFT){ for(j=7; j>=0 && 7-j <= offset+(index*8); j--){ matrix[index][i] |= (((pattern[j] >> i) & 0x01) << 7-j); } } else { for(j=7; j>=0; j--){ if(j+(index*8) <= offset && j+(index*8) > offset-matrix_size){ matrix[index][i] |= (((pattern[j+(index*8)] >> i) & 0x01) << j); } else { matrix[index][i] |= ( 0x00 << j); } } } } } else if(pattern_type == EQU) { for(i=0; i<8; i++){ for(j=6; j>=1; j--){ if(offset >=0 && offset < matrix_size+index) {matrix[index][i] |= (((pattern[offset+index] >> i) & 0x01) << j);} } } } else if(pattern_type == RAN) { for(i=0; i<8; i++){ for(j=6; j>=1; j--){ matrix[index][i] = (unsigned char)random(256); } } } else if(pattern_type == PATTERN) { for(i=0; i<8; i++){ for(j=0; j<8; j++){ if(offset >=0 && offset < matrix_size+1) {matrix[index][i] |= (((pattern[(j+(32*offset)+((3-index)*8))] >> i) & 0x01) << 7-j);} } } } else if(pattern_type == SEARCH) { int tmpoff = offset; if(offset > 30){tmpoff = 30 - (offset-30);} for(i=0; i<8; i++){ for(j=0; j<8; j++){ if((j+((3-index)*8)) > tmpoff && (j+((3-index)*8)) <= tmpoff+2){ matrix[index][i] |= (((24 >> i) & 0x01) << 7-j); } else { matrix[index][i] |= ( 0x00 << j); } } } } } void startup(){ int i=0; runSides(); runEars(); display(); setFrontStutdown(false); setSideStutdown(false); digitalWrite(13, HIGH); for(i=0; i<12; i++){ setSideBrightness(i); runSides(); runEars(); display(); delay(150); } delay(500); } void shutdown(){ int i=0; clearAll(); front_pattern_state = 0; frontPatterns[front_pattern_state](); side_pattern_state = 0; sidePatterns[side_pattern_state](); ear_pattern_state = 0; earPatterns[ear_pattern_state](); runSides(); runEars(); display(); for(i=12; i>=1; i--){ setSideBrightness(i); runSides(); runEars(); display(); delay(150); } setFrontStutdown(true); setSideStutdown(true); digitalWrite(13, LOW); } void sidesOn(){ side_state = 0; side_type = SIDE_ON; side_delay == 0; side_time = 0; } void sidesMove(){ side_state = 0; side_type = SIDE_MOVE; side_delay = 200; side_time = 0; } void sidesBounce1(){ side_state = 0; side_type = SIDE_BOUNCE1; side_delay = 120; side_time = 0; } void sidesBounce2(){ side_state = 0; side_type = SIDE_BOUNCE2; side_delay = 120; side_time = 0; } void sidesSlide(){ side_state = 0; side_type = SIDE_SLIDE; side_delay = 60; side_time = 0; } void sidesAlt(){ side_state = 0; side_type = SIDE_ALT; side_delay = 90; side_time = 0; } void runSides(){ if(side_time > time){ return; } side_time = time + side_delay; if(side_type == SIDE_ON){ setSides(BOTH_SIDE, true, true, true, true, true, true, true, true, true, true, true, true); } else if(side_type == SIDE_MOVE){ switch(side_state){ case 0: setSides(BOTH_SIDE, true, false, true, false, true, false, false, false, true, false, false, false); side_state++; break; case 1: setSides(BOTH_SIDE, true, false, false, true, true, false, false, false, true, false, false, false); side_state++; break; case 2: setSides(BOTH_SIDE, false, true, true, true, false, true, false, false, false, true, false, false); side_state++; break; case 3: setSides(BOTH_SIDE, false, true, true, false, false, true, false, false, false, true, false, false); side_state++; break; case 4: setSides(BOTH_SIDE, true, false, false, true, false, false, true, false, false, false, true, false); side_state++; break; case 5: setSides(BOTH_SIDE, true, false, true, true, false, false, true, false, false, false, true, false); side_state++; break; case 6: setSides(BOTH_SIDE, false, true, true, false, false, false, false, true, false, false, false, true); side_state++; break; case 7: setSides(BOTH_SIDE, false, true, false, true, false, false, false, true, false, false, false, true); side_state=0; break; } } else if(side_type == SIDE_BOUNCE1){ switch(side_state){ case 0: setSides(BOTH_SIDE, false, false, false, false, false, false, false, true, true, false, false, false); side_state++; break; case 1: setSides(BOTH_SIDE, false, false, false, false, false, false, true, false, true, false, false, false); side_state++; break; case 2: setSides(BOTH_SIDE, false, false, false, false, false, true, false, false, false, true, false, false); side_state++; break; case 3: setSides(BOTH_SIDE, false, false, false, false, true, false, false, false, false, true, false, false); side_state++; break; case 4: setSides(BOTH_SIDE, false, false, false, true, false, false, false, false, false, false, true, false); side_state++; break; case 5: setSides(BOTH_SIDE, false, false, true, false, false, false, false, false, false, false, true, false); side_state++; break; case 6: setSides(BOTH_SIDE, false, false, true, true, false, false, false, false, false, false, false, true); side_state++; break; case 7: setSides(BOTH_SIDE, true, true, false, false, false, false, false, false, false, false, false, true); side_state=0; break; } } else if(side_type == SIDE_BOUNCE2){ switch(side_state){ case 0: setSides(BOTH_SIDE, false, false, false, false, false, false, false, true, true, true, true, true); side_state++; break; case 1: setSides(BOTH_SIDE, false, false, false, false, false, false, true, false, true, true, true, true); side_state++; break; case 2: setSides(BOTH_SIDE, false, false, false, false, false, true, false, false, false, false, false, false); side_state++; break; case 3: setSides(BOTH_SIDE, false, false, false, false, true, false, false, false, false, false, false, false); side_state++; break; case 4: setSides(BOTH_SIDE, false, false, false, true, false, false, false, false, true, true, true, true); side_state++; break; case 5: setSides(BOTH_SIDE, false, false, true, false, false, false, false, false, true, true, true, true); side_state++; break; case 6: setSides(BOTH_SIDE, false, false, true, true, false, false, false, false, false, false, false, true); side_state++; break; case 7: setSides(BOTH_SIDE, true, true, false, false, false, false, false, false, false, false, false, true); side_state=0; break; } } else if(side_type == SIDE_SLIDE){ switch(side_state){ case 0: setSides(BOTH_SIDE, true, false, false, false, false, false, false, false, false, false, false, false); side_state++; break; case 1: setSides(BOTH_SIDE, false, true, false, false, false, false, false, false, false, false, false, false); side_state++; break; case 2: setSides(BOTH_SIDE, false, false, true, false, false, false, false, false, false, false, false, false); side_state++; break; case 3: setSides(BOTH_SIDE, false, false, false, true, false, false, false, false, false, false, false, false); side_state++; break; case 4: setSides(BOTH_SIDE, false, false, false, false, true, false, false, false, false, false, false, false); side_state++; break; case 5: setSides(BOTH_SIDE, false, false, false, false, false, true, false, false, false, false, false, false); side_state++; break; case 6: setSides(BOTH_SIDE, false, false, false, false, false, false, true, false, false, false, false, false); side_state++; break; case 7: setSides(BOTH_SIDE, false, false, false, false, false, false, false, true, false, false, false, false); side_state++; break; case 8: setSides(BOTH_SIDE, false, false, false, false, false, false, false, false, true, false, false, false); side_state++; break; case 9: setSides(BOTH_SIDE, false, false, false, false, false, false, false, false, false, true, false, false); side_state++; break; case 10: setSides(BOTH_SIDE, false, false, false, false, false, false, false, false, false, false, true, false); side_state++; break; case 11: setSides(BOTH_SIDE, false, false, false, false, false, false, false, false, false, false, false, true); side_state=0; break; } } else if(side_type == SIDE_ALT){ switch(side_state){ case 0: setSides(BOTH_SIDE, true, true, true, true, true, true, true, true, false, false, false, false); side_state++; break; case 1: setSides(BOTH_SIDE, false, false, false, false, false, false, false, false, true, true, true, true); side_state=0; break; } } } void earOn(){ ear_state = 0; ear_type = EAR_ON; ear_delay = 0; ear_time = 0; } void earSpinCW1(){ ear_state = 0; ear_type = EAR_SPIN_CW1; ear_delay = 60; } void earSpinCCW1(){ ear_state = 0; ear_type = EAR_SPIN_CCW1; ear_delay = 60; } void earSpinCW2(){ ear_state = 0; ear_type = EAR_SPIN_CW2; ear_delay = 60; } void earSpinCCW2(){ ear_state = 0; ear_type = EAR_SPIN_CCW2; ear_delay = 60; } void earSpin(){ ear_state = 0; ear_type = EAR_SPIN; ear_delay = 60; } void earStrobe(){ ear_state = 0; ear_type = EAR_STROBE; ear_delay = 20; } void runEars(){ if(ear_time > time){ return; } ear_time = time + ear_delay; if(ear_type == EAR_ON){ setEars(BOTH_EAR,true,true,true,true,true,true); }else if(ear_type == EAR_SPIN_CW1){ switch(ear_state){ case 0: setEars(BOTH_EAR,true,false,false,false,false,false); ear_state++; break; case 1: setEars(BOTH_EAR,false,true,false,false,false,false); ear_state++; break; case 2: setEars(BOTH_EAR,false,false,true,false,false,false); ear_state++; break; case 3: setEars(BOTH_EAR,false,false,false,true,false,false); ear_state++; break; case 4: setEars(BOTH_EAR,false,false,false,false,true,false); ear_state++; break; case 5: setEars(BOTH_EAR,false,false,false,false,false,true); ear_state=0; break; } } else if(ear_type == EAR_SPIN_CCW1){ switch(ear_state){ case 0: setEars(BOTH_EAR,false,false,false,false,false,true); ear_state++; break; case 1: setEars(BOTH_EAR,false,false,false,false,true,false); ear_state++; break; case 2: setEars(BOTH_EAR,false,false,false,true,false,false); ear_state++; break; case 3: setEars(BOTH_EAR,false,false,true,false,false,false); ear_state++; break; case 4: setEars(BOTH_EAR,false,true,false,false,false,false); ear_state++; break; case 5: setEars(BOTH_EAR,true,false,false,false,false,false); ear_state=0; break; } } else if(ear_type == EAR_SPIN_CW2){ switch(ear_state){ case 0: setEars(BOTH_EAR,true,false,false,true,false,false); ear_state++; break; case 1: setEars(BOTH_EAR,false,true,false,false,true,false); ear_state++; break; case 2: setEars(BOTH_EAR,false,false,true,false,false,true); ear_state++; break; case 3: setEars(BOTH_EAR,true,false,false,true,false,false); ear_state++; break; case 4: setEars(BOTH_EAR,false,true,false,false,true,false); ear_state++; break; case 5: setEars(BOTH_EAR,false,false,true,false,false,true); ear_state=0; break; } }else if(ear_type == EAR_SPIN_CCW2){ switch(ear_state){ case 0: setEars(BOTH_EAR,false,false,false,false,false,true); ear_state++; break; case 1: setEars(BOTH_EAR,false,false,false,false,true,false); ear_state++; break; case 2: setEars(BOTH_EAR,false,false,false,true,false,false); ear_state++; break; case 3: setEars(BOTH_EAR,false,false,true,false,false,false); ear_state++; break; case 4: setEars(BOTH_EAR,false,true,false,false,false,false); ear_state++; break; case 5: setEars(BOTH_EAR,true,false,false,false,false,false); ear_state=0; break; } }else if(ear_type == EAR_SPIN){ switch(ear_state){ case 0: setEars(BOTH_EAR,true,false,false,false,false,false); ear_state++; break; case 1: setEars(BOTH_EAR,false,true,false,false,false,false); ear_state++; break; case 2: setEars(BOTH_EAR,false,false,true,false,false,false); ear_state++; break; case 3: setEars(BOTH_EAR,false,false,false,true,false,false); ear_state++; break; case 4: setEars(BOTH_EAR,false,false,false,false,true,false); ear_state++; break; case 5: setEars(BOTH_EAR,false,false,false,false,false,true); ear_state++; break; case 6: setEars(BOTH_EAR,false,false,false,false,true,false); ear_state++; break; case 7: setEars(BOTH_EAR,false,false,false,true,false,false); ear_state++; break; case 8: setEars(BOTH_EAR,false,false,true,false,false,false); ear_state++; break; case 9: setEars(BOTH_EAR,false,true,false,false,false,false); ear_state=0; break; } } else if(ear_type == EAR_STROBE){ switch(ear_state){ case 0: setEars(BOTH_EAR,false,false,false,false,false,false); ear_state++; break; case 1: setEars(BOTH_EAR,true,true,true,true,true,true); ear_state++; break; case 2: setEars(BOTH_EAR,false,false,false,false,false,false); ear_state++; break; case 3: setEars(BOTH_EAR,true,true,true,true,true,true); ear_state++; ear_delay=200; break; case 4: setEars(BOTH_EAR,false,false,false,false,false,false); ear_state=0; ear_delay=20; break; } } } void setSides(int side, boolean gv1, boolean gv2, boolean gm, boolean ym, boolean gh1, boolean rh1, boolean gh2, boolean rh2, boolean b, boolean y, boolean r, boolean g){ if(side == RIGHT_SIDE|| side == BOTH_SIDE){ setBit(&slight[0],0,b); setBit(&slight[0],1,y); setBit(&slight[0],2,r); setBit(&slight[0],3,g); setBit(&slight[1],0,rh2); setBit(&slight[1],1,gh2); setBit(&slight[1],2,rh1); setBit(&slight[1],3,gh1); setBit(&slight[2],0,ym); setBit(&slight[2],1,gm); setBit(&slight[2],2,gv1); setBit(&slight[2],3,gv2); } if(side == LEFT_SIDE || side == BOTH_SIDE){ setBit(&slight[0],4,b); setBit(&slight[0],5,y); setBit(&slight[0],6,r); setBit(&slight[0],7,g); setBit(&slight[1],4,rh2); setBit(&slight[1],5,gh2); setBit(&slight[1],6,rh1); setBit(&slight[1],7,gh1); setBit(&slight[2],4,ym); setBit(&slight[2],5,gm); setBit(&slight[2],6,gv1); setBit(&slight[2],7,gv2); } } void setEars(int ear, boolean w, boolean b, boolean g, boolean y, boolean o, boolean r){ if(ear == RIGHT_EAR|| ear == BOTH_EAR){ setBit(&elight[0],2,w); setBit(&elight[0],1,b); setBit(&elight[0],0,g); setBit(&elight[1],2,r); setBit(&elight[1],1,o); setBit(&elight[1],0,y); } if(ear == LEFT_EAR || ear == BOTH_EAR){ setBit(&elight[0],5,w); setBit(&elight[0],4,r); setBit(&elight[0],3,o); setBit(&elight[1],5,y); setBit(&elight[1],4,g); setBit(&elight[1],3,b); } } void slideWave(){ front_state = 0; front_delay = 20; pattern_type = SWIPE_RIGHT; pattern_offset = 32; matrix_size = 32; // --/\/-- pattern[0] = 16; pattern[1] = 16; pattern[2] = 16; pattern[3] = 16; pattern[4] = 16; pattern[5] = 16; pattern[6] = 16; pattern[7] = 16; pattern[8] = 16; pattern[9] = 8; pattern[10] = 4; pattern[11] = 2; pattern[12] = 1; pattern[13] = 2; pattern[14] = 4; pattern[15] = 8; pattern[16] = 16; pattern[17] = 32; pattern[18] = 64; pattern[19] = 128; pattern[20] = 64; pattern[21] = 32; pattern[22] = 16; pattern[23] = 8; pattern[24] = 8; pattern[25] = 8; pattern[26] = 8; pattern[27] = 8; pattern[28] = 8; pattern[29] = 8; pattern[30] = 8; pattern[31] = 8; } void searching(){ front_delay = 30; front_state = 0; pattern_type = SEARCH; pattern_offset = 0; matrix_size = 60; front_loop = 3; pattern[0] = 24; pattern[1] = 24; } void showRandom(){ front_delay = 60; front_state = 0; pattern_type = RAN; pattern_offset = 0; matrix_size = 100; } void scrollHuman(){ front_delay = 35; front_state = -31; pattern_type = SCROLL_LEFT; pattern_offset = 8; matrix_size = 33; // HUMAN pattern[0] = 126; pattern[1] = 8; pattern[2] = 8; pattern[3] = 8; pattern[4] = 126; pattern[5] = 0; pattern[6] = 0; pattern[7] = 62; pattern[8] = 64; pattern[9] = 64; pattern[10] = 64; pattern[11] = 62; pattern[12] = 0; pattern[13] = 0; pattern[14] = 126; pattern[15] = 4; pattern[16] = 8; pattern[17] = 4; pattern[18] = 126; pattern[19] = 0; pattern[20] = 0; pattern[21] = 124; pattern[22] = 18; pattern[23] = 18; pattern[24] = 18; pattern[25] = 124; pattern[26] = 0; pattern[27] = 0; pattern[28] = 126; pattern[29] = 4; pattern[30] = 8; pattern[31] = 16; pattern[32] = 126; } void scrollRobot(){ front_delay = 35; front_state = -31; pattern_type = SCROLL_LEFT; pattern_offset = 8; matrix_size = 33; // ROBOT pattern[0] = 126; pattern[1] = 18; pattern[2] = 18; pattern[3] = 18; pattern[4] = 108; pattern[5] = 0; pattern[6] = 0; pattern[7] = 60; pattern[8] = 66; pattern[9] = 66; pattern[10] = 66; pattern[11] = 60; pattern[12] = 0; pattern[13] = 0; pattern[14] = 126; pattern[15] = 74; pattern[16] = 74; pattern[17] = 74; pattern[18] = 116; pattern[19] = 0; pattern[20] = 0; pattern[21] = 60; pattern[22] = 66; pattern[23] = 66; pattern[24] = 66; pattern[25] = 60; pattern[26] = 0; pattern[27] = 0; pattern[28] = 2; pattern[29] = 2; pattern[30] = 126; pattern[31] = 2; pattern[32] = 2; } void scrollHalloween(){ front_delay = 35; front_state = -31; pattern_type = SCROLL_LEFT; pattern_offset = 8; matrix_size = 100; // HAPPY HALLOWEEN pattern[0] = 126; pattern[1] = 8; pattern[2] = 8; pattern[3] = 8; pattern[4] = 126; pattern[5] = 0; pattern[6] = 0; pattern[7] = 124; pattern[8] = 18; pattern[9] = 18; pattern[10] = 18; pattern[11] = 124; pattern[12] = 0; pattern[13] = 0; pattern[14] = 126; pattern[15] = 18; pattern[16] = 18; pattern[17] = 18; pattern[18] = 12; pattern[19] = 0; pattern[20] = 0; pattern[21] = 126; pattern[22] = 18; pattern[23] = 18; pattern[24] = 18; pattern[25] = 12; pattern[26] = 0; pattern[27] = 0; pattern[28] = 14; pattern[29] = 16; pattern[30] = 112; pattern[31] = 16; pattern[32] = 14; pattern[33] = 0; pattern[34] = 0; pattern[35] = 0; pattern[36] = 0; pattern[37] = 0; pattern[38] = 0; pattern[39] = 126; pattern[40] = 8; pattern[41] = 8; pattern[42] = 8; pattern[43] = 126; pattern[44] = 0; pattern[45] = 0; pattern[46] = 124; pattern[47] = 18; pattern[48] = 18; pattern[49] = 18; pattern[50] = 124; pattern[51] = 0; pattern[52] = 0; pattern[53] = 126; pattern[54] = 64; pattern[55] = 64; pattern[56] = 64; pattern[57] = 64; pattern[58] = 0; pattern[59] = 0; pattern[60] = 126; pattern[61] = 64; pattern[62] = 64; pattern[63] = 64; pattern[64] = 64; pattern[65] = 0; pattern[66] = 0; pattern[67] = 60; pattern[68] = 66; pattern[69] = 66; pattern[70] = 66; pattern[71] = 60; pattern[72] = 0; pattern[73] = 0; pattern[74] = 126; pattern[75] = 32; pattern[76] = 16; pattern[77] = 32; pattern[78] = 126; pattern[79] = 0; pattern[80] = 0; pattern[81] = 126; pattern[82] = 82; pattern[83] = 82; pattern[84] = 82; pattern[85] = 66; pattern[86] = 0; pattern[87] = 0; pattern[88] = 126; pattern[89] = 82; pattern[90] = 82; pattern[91] = 82; pattern[92] = 66; pattern[93] = 0; pattern[94] = 0; pattern[95] = 126; pattern[96] = 4; pattern[97] = 8; pattern[98] = 16; pattern[99] = 126; } void scrollDaftPunk(){ front_delay = 35; front_state = -31; pattern_type = SCROLL_LEFT; pattern_offset = 8; matrix_size = 58; // DAFT PUNK pattern[0] = 126; pattern[1] = 66; pattern[2] = 66; pattern[3] = 66; pattern[4] = 60; pattern[5] = 0; pattern[6] = 0; pattern[7] = 124; pattern[8] = 18; pattern[9] = 18; pattern[10] = 18; pattern[11] = 124; pattern[12] = 0; pattern[13] = 0; pattern[14] = 126; pattern[15] = 10; pattern[16] = 10; pattern[17] = 10; pattern[18] = 2; pattern[19] = 0; pattern[20] = 0; pattern[21] = 2; pattern[22] = 2; pattern[23] = 126; pattern[24] = 2; pattern[25] = 2; pattern[26] = 0; pattern[27] = 0; pattern[28] = 0; pattern[29] = 0; pattern[30] = 0; pattern[31] = 0; pattern[32] = 126; pattern[33] = 18; pattern[34] = 18; pattern[35] = 18; pattern[36] = 12; pattern[37] = 0; pattern[38] = 0; pattern[39] = 62; pattern[40] = 64; pattern[41] = 64; pattern[42] = 64; pattern[43] = 62; pattern[44] = 0; pattern[45] = 0; pattern[46] = 126; pattern[47] = 4; pattern[48] = 8; pattern[49] = 16; pattern[50] = 126; pattern[51] = 0; pattern[52] = 0; pattern[53] = 126; pattern[54] = 24; pattern[55] = 24; pattern[56] = 36; pattern[57] = 66; } void scrollArrow(){ front_delay = 10; front_state = -31; pattern_type = SCROLL_RIGHT; pattern_offset = 8; matrix_size = 33; front_loop = 0; // >>>> pattern[0] = 66; pattern[1] = 102; pattern[2] = 60; pattern[3] = 24; pattern[4] = 0; pattern[5] = 0; pattern[6] = 0; pattern[7] = 66; pattern[8] = 102; pattern[9] = 60; pattern[10] = 24; pattern[11] = 0; pattern[12] = 0; pattern[13] = 0; pattern[14] = 66; pattern[15] = 102; pattern[16] = 60; pattern[17] = 24; pattern[18] = 0; pattern[19] = 0; pattern[20] = 0; pattern[21] = 66; pattern[22] = 102; pattern[23] = 60; pattern[24] = 24; pattern[25] = 0; pattern[26] = 0; pattern[27] = 0; pattern[28] = 66; pattern[29] = 102; pattern[30] = 60; pattern[31] = 24; pattern[32] = 0; } void fullEQU(){ front_delay = 60; front_state = 0; pattern_type = EQU; pattern_offset = -4; matrix_size = 28; front_loop = 10; // || || || || pattern[0] = 252; pattern[1] = 248; pattern[2] = 240; pattern[3] = 254; pattern[4] = 248; pattern[5] = 252; pattern[6] = 224; pattern[7] = 252; pattern[8] = 240; pattern[9] = 248; pattern[10] = 240; pattern[11] = 248; pattern[12] = 248; pattern[13] = 240; pattern[14] = 248; pattern[15] = 252; pattern[16] = 252; pattern[17] = 224; pattern[18] = 252; pattern[19] = 248; pattern[20] = 254; pattern[21] = 240; pattern[22] = 248; pattern[23] = 252; pattern[24] = 252; pattern[25] = 248; pattern[26] = 252; pattern[27] = 254; } void flashHearts(){ front_delay = 900; front_state = 0; pattern_type = PATTERN; pattern_offset = 0; matrix_size = 1; front_loop = 3; // <3 <3 <3 pattern[0] = 14; pattern[1] = 17; pattern[2] = 33; pattern[3] = 66; pattern[4] = 66; pattern[5] = 33; pattern[6] = 17; pattern[7] = 14; pattern[8] = 0; pattern[9] = 0; pattern[10] = 0; pattern[11] = 0; pattern[12] = 14; pattern[13] = 17; pattern[14] = 33; pattern[15] = 66; pattern[16] = 66; pattern[17] = 33; pattern[18] = 17; pattern[19] = 14; pattern[20] = 0; pattern[21] = 0; pattern[22] = 0; pattern[23] = 0; pattern[24] = 14; pattern[25] = 17; pattern[26] = 33; pattern[27] = 66; pattern[28] = 66; pattern[29] = 33; pattern[30] = 17; pattern[31] = 14; pattern[32] = 14; pattern[33] = 31; pattern[34] = 63; pattern[35] = 126; pattern[36] = 126; pattern[37] = 63; pattern[38] = 31; pattern[39] = 14; pattern[40] = 0; pattern[41] = 0; pattern[42] = 0; pattern[43] = 0; pattern[44] = 14; pattern[45] = 31; pattern[46] = 63; pattern[47] = 126; pattern[48] = 126; pattern[49] = 63; pattern[50] = 31; pattern[51] = 14; pattern[52] = 0; pattern[53] = 0; pattern[54] = 0; pattern[55] = 0; pattern[56] = 14; pattern[57] = 31; pattern[58] = 63; pattern[59] = 126; pattern[60] = 126; pattern[61] = 63; pattern[62] = 31; pattern[63] = 14; } void flashEyes(){ front_delay = 1200; front_state = 0; pattern_type = PATTERN; pattern_offset = 0; matrix_size = 1; front_loop = 3; // 0_0 pattern[0] = 8; pattern[1] = 28; pattern[2] = 62; pattern[3] = 96; pattern[4] = 88; pattern[5] = 88; pattern[6] = 96; pattern[7] = 62; pattern[8] = 28; pattern[9] = 8; pattern[10] = 0; pattern[11] = 0; pattern[12] = 0; pattern[13] = 0; pattern[14] = 0; pattern[15] = 0; pattern[16] = 0; pattern[17] = 0; pattern[18] = 0; pattern[19] = 0; pattern[20] = 0; pattern[21] = 0; pattern[22] = 8; pattern[23] = 28; pattern[24] = 62; pattern[25] = 96; pattern[26] = 88; pattern[27] = 88; pattern[28] = 96; pattern[29] = 62; pattern[30] = 28; pattern[31] = 8; pattern[32] = 8; pattern[33] = 28; pattern[34] = 60; pattern[35] = 36; pattern[36] = 24; pattern[37] = 24; pattern[38] = 36; pattern[39] = 60; pattern[40] = 28; pattern[41] = 8; pattern[42] = 0; pattern[43] = 0; pattern[44] = 0; pattern[45] = 0; pattern[46] = 0; pattern[47] = 0; pattern[48] = 0; pattern[49] = 0; pattern[50] = 0; pattern[51] = 0; pattern[52] = 0; pattern[53] = 0; pattern[54] = 0; pattern[55] = 8; pattern[56] = 28; pattern[57] = 36; pattern[58] = 24; pattern[59] = 24; pattern[60] = 36; pattern[61] = 60; pattern[62] = 28; pattern[63] = 8; } void clearAll(){ int i = 0; for(i=0; i 0){ switch(i){ case 0: button1(time - btime[i]); break; case 1: button2(time - btime[i]); break; case 2: button3(time - btime[i]); break; } btime[i] = 0; } else if(digitalRead(2+i) == HIGH){ btime[i] = 0; } } } void button3(unsigned long btime){ if(btime > 50){ autochange = false; if(front_pattern_state == 0){ front_pattern_state = FRONT_PATTERN_NUM; } else {front_pattern_state--;} frontPatterns[front_pattern_state](); } } void button2(unsigned long btime){ if(btime > 1000 && running == false){ running = true; } else if(btime > 1000 && running == true){ running = false; } else if(btime > 50){ autochange = true; } } void button1(unsigned long btime){ if(btime > 50){ autochange = false; front_pattern_state++; if(front_pattern_state > FRONT_PATTERN_NUM){ front_pattern_state=0; } frontPatterns[front_pattern_state](); } } void setBit(unsigned char* val, int bit, boolean on) { if(on == true){ *val |= 1 << bit; } else { *val &= ~(1 << bit); } } char getBit(unsigned char* val, int bit) { char bits = 0; return bits & (0x01 << bit); }