83 lines
2.6 KiB
C++
83 lines
2.6 KiB
C++
/******************************** 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;
|
|
}
|
|
}
|
|
}
|