/******************************** SHIFT SQUARES *******************************\ | Three 2x2x2 squares start on the cube each a red green or blue. then they | | randomly move around the cube one at a time, if they crash into each other | | then then both leds turn on and while they occupy the same space they apear | | a different color | | | | Written By: Asher Glick | | Modified By: S. Dugre to use asynchronous timer | \******************************************************************************/ //int animationSpeed = 100; int blx = 2; // blue x int bly = 0; // blue y int blz = 0; // blue z int rdx = 0; // red x int rdy = 2; // red y int rdz = 0; // red z int gnx = 0; // green x int gny = 0; // green y int gnz = 2; // green z int * mover = &blx; int shift_squares_loop; void shift_squares() { if (currentState != lastState) { lastState = currentState; Serial.print("New State = "); Serial.println(currentState); currentTimer = 0; maxTimer = 0.3 * 1000 * 1000 / 16; // 0.5 seconds shift_squares_loop = 0; } if ( timerReset) { switch (shift_squares_loop){ case 0: switch (random(0,9)) { case 0: mover = &blx; break; case 1: mover = &bly; break; case 2: mover = &blz; break; case 3: mover = &rdx; break; case 4: mover = &rdy; break; case 5: mover = &rdz; break; case 6: mover = &gnx; break; case 7: mover = &gny; break; case 8: mover = &gnz; break; } *mover = (((*mover)+2)%4)-1; drawBox(blue ,abs(blx),abs(bly),abs(blz),abs(blx)+1,abs(bly)+1,abs(blz)+1); drawBox(red ,abs(gnx),abs(gny),abs(gnz),abs(gnx)+1,abs(gny)+1,abs(gnz)+1); drawBox(green,abs(rdx),abs(rdy),abs(rdz),abs(rdx)+1,abs(rdy)+1,abs(rdz)+1); flushBuffer(); clearBuffer(); shift_squares_loop = 1; timerReset = false; break; case 1: *mover = (((*mover)+2)%4)-1; drawBox(blue ,abs(blx),abs(bly),abs(blz),abs(blx)+1,abs(bly)+1,abs(blz)+1); drawBox(red ,abs(gnx),abs(gny),abs(gnz),abs(gnx)+1,abs(gny)+1,abs(gnz)+1); drawBox(green,abs(rdx),abs(rdy),abs(rdz),abs(rdx)+1,abs(rdy)+1,abs(rdz)+1); flushBuffer(); clearBuffer(); shift_squares_loop = 2; timerReset = false; break; case 2: shift_squares_loop = 0; timerReset = false; break; } } }