charlie-cube/shift_squares.ino
2022-04-17 20:28:42 -04:00

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;
}
}
}