added asynchronous timer
This commit is contained in:
parent
53879d6546
commit
62666ebb8c
6 changed files with 608 additions and 505 deletions
|
|
@ -1,21 +1,17 @@
|
||||||
// WIP. 3/28/2022: added test state machine. Need to re-write moving to next state
|
// WIP. 4/4/2022: started to implement delay timer asyncronously using existing timer2 interrupt.
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "cubeplex.h"
|
#include "cubeplex.h"
|
||||||
#include <timer.h>
|
#include <timer.h>
|
||||||
|
|
||||||
Timer animationDelay;
|
|
||||||
bool animationDelayTiming = false;
|
|
||||||
|
|
||||||
int color = red;
|
int color = red;
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
Serial.println("start program...");
|
Serial.println("start program...");
|
||||||
initCube();
|
initCube();
|
||||||
timerInit();
|
//timerInit();
|
||||||
|
|
||||||
currentState = CHASETHEDOT;
|
currentState = CHASETHEDOT;
|
||||||
lastState = -1;
|
lastState = -1;
|
||||||
|
|
||||||
|
|
@ -29,13 +25,14 @@ void loop() {
|
||||||
|
|
||||||
case CHASETHEDOT:
|
case CHASETHEDOT:
|
||||||
chaseTheDot();
|
chaseTheDot();
|
||||||
//currentState = PLANARFLOP3D;
|
break;
|
||||||
|
|
||||||
|
case RANDOMRAINBOW:
|
||||||
|
rainbow_random();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLANARFLOP3D:
|
case PLANARFLOP3D:
|
||||||
planarFlop3D();
|
planarFlop3D();
|
||||||
//currentState = CHASETHEDOT;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
animationDelay.update();
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
/******************************** CHASE THE DOT *******************************\
|
/******************************** CHASE THE DOT *******************************\
|
||||||
| A single point of light moves around the cube randomly and changes colors |
|
| A single point of light moves around the cube randomly and changes colors |
|
||||||
| when it tries to go out of bounds |
|
| when it tries to go out of bounds |
|
||||||
| |
|
| |
|
||||||
| Inspired By: Jonah Glick |
|
| Inspired By: Jonah Glick |
|
||||||
| Written By: Asher Glick |
|
| Written By: Asher Glick |
|
||||||
|
| |
|
||||||
|
| Modified By: S. Dugre to use asynchronous timer |
|
||||||
\******************************************************************************/
|
\******************************************************************************/
|
||||||
|
|
||||||
int xpos = 0;
|
int xpos = 0;
|
||||||
|
|
@ -13,21 +15,23 @@ int zpos = 0;
|
||||||
int animationSpeed = 100;
|
int animationSpeed = 100;
|
||||||
|
|
||||||
void chaseTheDot() {
|
void chaseTheDot() {
|
||||||
//continuePattern = true;
|
|
||||||
|
|
||||||
if (currentState != lastState) {
|
if (currentState != lastState) {
|
||||||
|
|
||||||
lastState = currentState;
|
lastState = currentState;
|
||||||
Serial.print("last State = ");
|
Serial.print("New State = ");
|
||||||
Serial.println(lastState);
|
Serial.println(currentState);
|
||||||
xpos = 0;
|
xpos = 0;
|
||||||
ypos = 0;
|
ypos = 0;
|
||||||
zpos = 0;
|
zpos = 0;
|
||||||
|
|
||||||
|
currentTimer = 0;
|
||||||
|
maxTimer = 6250; // 100 ms
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//while (continuePattern) {
|
//while (continuePattern) {
|
||||||
if ( not animationDelayTiming) {
|
if ( timerReset) {
|
||||||
switch (random(0, 6)) {
|
switch (random(0, 6)) {
|
||||||
case 0:
|
case 0:
|
||||||
if (xpos > 0) {
|
if (xpos > 0) {
|
||||||
|
|
@ -75,8 +79,12 @@ void chaseTheDot() {
|
||||||
flushBuffer();
|
flushBuffer();
|
||||||
clearBuffer();
|
clearBuffer();
|
||||||
//delay(animationSpeed);
|
//delay(animationSpeed);
|
||||||
animationDelay.start();
|
|
||||||
animationDelayTiming = true;
|
//animationDelay.start();
|
||||||
Serial.println("start timer");
|
//animationDelayTiming = true;
|
||||||
|
//Serial.println("start timer");
|
||||||
|
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
3
config.h
3
config.h
|
|
@ -3,7 +3,10 @@
|
||||||
|
|
||||||
typedef enum STATE {
|
typedef enum STATE {
|
||||||
CHASETHEDOT,
|
CHASETHEDOT,
|
||||||
|
RANDOMRAINBOW,
|
||||||
PLANARFLOP3D
|
PLANARFLOP3D
|
||||||
};
|
};
|
||||||
|
|
||||||
STATE currentState, lastState;
|
STATE currentState, lastState;
|
||||||
|
|
||||||
|
bool timerReset = true;
|
||||||
|
|
|
||||||
848
cubeplex.h
848
cubeplex.h
File diff suppressed because it is too large
Load diff
218
planarFlop3D.ino
218
planarFlop3D.ino
|
|
@ -1,91 +1,159 @@
|
||||||
/******************************* PLANAR FLOP 3D *******************************\
|
/******************************* PLANAR FLOP 3D *******************************\
|
||||||
| Version 2 of the planar flop, doing more complicated maths and 3D vectors |
|
| Version 2 of the planar flop, doing more complicated maths and 3D vectors |
|
||||||
| 'n stuff. Making this function found the bug of reversed z axis line drawing |
|
| 'n stuff. Making this function found the bug of reversed z axis line drawing |
|
||||||
|
| |
|
||||||
|
| Modified By: S. Dugre to use asynchronous timer |
|
||||||
\******************************************************************************/
|
\******************************************************************************/
|
||||||
|
|
||||||
|
int planarCase;
|
||||||
|
|
||||||
void planarFlop3D() {
|
void planarFlop3D() {
|
||||||
continuePattern = true;
|
|
||||||
int animationSpeed = 50;
|
|
||||||
while (continuePattern) {
|
|
||||||
|
|
||||||
for (int y = 3; y > 0; y--) {
|
if (currentState != lastState) {
|
||||||
for (int z = 0; z < 4; z++) drawLine(color, 0, 3, z, 3, y, z);
|
|
||||||
flushBuffer();
|
lastState = currentState;
|
||||||
clearBuffer();
|
Serial.print("New State = ");
|
||||||
delay(animationSpeed);
|
Serial.println(currentState);
|
||||||
}
|
|
||||||
for (int x = 3; x > 0; x--) {
|
|
||||||
for (int z = 0; z < 4; z++) drawLine(color, 0, 3, z, x, 0, z);
|
|
||||||
flushBuffer();
|
|
||||||
clearBuffer();
|
|
||||||
delay(animationSpeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
currentTimer = 0;
|
||||||
|
maxTimer = 3125; // 50 ms
|
||||||
|
|
||||||
for (int x = 0; x < 3; x++) {
|
planarCase = 0;
|
||||||
for (int y = 0; y < 4; y++) drawLine(color, 0, y, 0, x, y, 3);
|
}
|
||||||
flushBuffer();
|
|
||||||
clearBuffer();
|
|
||||||
delay(animationSpeed);
|
|
||||||
}
|
|
||||||
for (int z = 3; z > 0; z--) {
|
|
||||||
for (int y = 0; y < 4; y++) drawLine(color, 0, y, 0, 3, y, z);
|
|
||||||
flushBuffer();
|
|
||||||
clearBuffer();
|
|
||||||
delay(animationSpeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int z = 0; z < 3; z++) {
|
if (timerReset) {
|
||||||
for (int x = 0; x < 4; x++) drawLine(color, x, 0, 0, x, 3, z);
|
switch (planarCase) {
|
||||||
flushBuffer();
|
case 0:
|
||||||
clearBuffer();
|
for (int y = 3; y > 0; y--) {
|
||||||
delay(animationSpeed);
|
for (int z = 0; z < 4; z++) drawLine(color, 0, 3, z, 3, y, z);
|
||||||
}
|
flushBuffer();
|
||||||
for (int y = 3; y > 0; y--) {
|
clearBuffer();
|
||||||
for (int x = 0; x < 4; x++) drawLine(color, x, 0, 0, x, y, 3);
|
//delay(animationSpeed);
|
||||||
flushBuffer();
|
planarCase++;
|
||||||
clearBuffer();
|
currentTimer = 0;
|
||||||
delay(animationSpeed);
|
timerReset = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int y = 0; y < 3; y++) {
|
case 1:
|
||||||
for (int z = 0; z < 4; z++) drawLine(color, 3, 0, z, 0, y, z);
|
for (int x = 3; x > 0; x--) {
|
||||||
flushBuffer();
|
for (int z = 0; z < 4; z++) drawLine(color, 0, 3, z, x, 0, z);
|
||||||
clearBuffer();
|
flushBuffer();
|
||||||
delay(animationSpeed);
|
clearBuffer();
|
||||||
}
|
//delay(animationSpeed);
|
||||||
for (int x = 0; x < 3; x++) {
|
planarCase++;
|
||||||
for (int z = 0; z < 4; z++) drawLine(color, 3, 0, z, x, 3, z);
|
currentTimer = 0;
|
||||||
flushBuffer();
|
timerReset = false;
|
||||||
clearBuffer();
|
}
|
||||||
delay(animationSpeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int x = 3; x > 0; x--) {
|
case 2:
|
||||||
for (int y = 0; y < 4; y++) drawLine(color, 3, y, 3, x, y, 0);
|
for (int x = 0; x < 3; x++) {
|
||||||
flushBuffer();
|
for (int y = 0; y < 4; y++) drawLine(color, 0, y, 0, x, y, 3);
|
||||||
clearBuffer();
|
flushBuffer();
|
||||||
delay(animationSpeed);
|
clearBuffer();
|
||||||
}
|
//delay(animationSpeed);
|
||||||
for (int z = 0; z < 3; z++) {
|
planarCase++;
|
||||||
for (int y = 0; y < 4; y++) drawLine(color, 3, y, 3, 0, y, z);
|
currentTimer = 0;
|
||||||
flushBuffer();
|
timerReset = false;
|
||||||
clearBuffer();
|
}
|
||||||
delay(animationSpeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int z = 3; z > 0; z--) {
|
case 3:
|
||||||
for (int x = 0; x < 4; x++) drawLine(color, x, 3, 3, x, 0, z);
|
for (int z = 3; z > 0; z--) {
|
||||||
flushBuffer();
|
for (int y = 0; y < 4; y++) drawLine(color, 0, y, 0, 3, y, z);
|
||||||
clearBuffer();
|
flushBuffer();
|
||||||
delay(animationSpeed);
|
clearBuffer();
|
||||||
}
|
//delay(animationSpeed);
|
||||||
for (int y = 0; y < 3; y++) {
|
planarCase++;
|
||||||
for (int x = 0; x < 4; x++) drawLine(color, x, 3, 3, x, y, 0);
|
currentTimer = 0;
|
||||||
flushBuffer();
|
timerReset = false;
|
||||||
clearBuffer();
|
}
|
||||||
delay(animationSpeed);
|
|
||||||
}
|
case 4:
|
||||||
|
for (int z = 0; z < 3; z++) {
|
||||||
|
for (int x = 0; x < 4; x++) drawLine(color, x, 0, 0, x, 3, z);
|
||||||
|
flushBuffer();
|
||||||
|
clearBuffer();
|
||||||
|
//delay(animationSpeed);
|
||||||
|
planarCase++;
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
for (int y = 3; y > 0; y--) {
|
||||||
|
for (int x = 0; x < 4; x++) drawLine(color, x, 0, 0, x, y, 3);
|
||||||
|
flushBuffer();
|
||||||
|
clearBuffer();
|
||||||
|
//delay(animationSpeed);
|
||||||
|
planarCase++;
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
for (int y = 0; y < 3; y++) {
|
||||||
|
for (int z = 0; z < 4; z++) drawLine(color, 3, 0, z, 0, y, z);
|
||||||
|
flushBuffer();
|
||||||
|
clearBuffer();
|
||||||
|
//delay(animationSpeed);
|
||||||
|
planarCase++;
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
for (int x = 0; x < 3; x++) {
|
||||||
|
for (int z = 0; z < 4; z++) drawLine(color, 3, 0, z, x, 3, z);
|
||||||
|
flushBuffer();
|
||||||
|
clearBuffer();
|
||||||
|
//delay(animationSpeed);
|
||||||
|
planarCase++;
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
for (int x = 3; x > 0; x--) {
|
||||||
|
for (int y = 0; y < 4; y++) drawLine(color, 3, y, 3, x, y, 0);
|
||||||
|
flushBuffer();
|
||||||
|
clearBuffer();
|
||||||
|
//delay(animationSpeed);
|
||||||
|
planarCase++;
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
|
}
|
||||||
|
case 9:
|
||||||
|
for (int z = 0; z < 3; z++) {
|
||||||
|
for (int y = 0; y < 4; y++) drawLine(color, 3, y, 3, 0, y, z);
|
||||||
|
flushBuffer();
|
||||||
|
clearBuffer();
|
||||||
|
//delay(animationSpeed);
|
||||||
|
planarCase++;
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
for (int z = 3; z > 0; z--) {
|
||||||
|
for (int x = 0; x < 4; x++) drawLine(color, x, 3, 3, x, 0, z);
|
||||||
|
flushBuffer();
|
||||||
|
clearBuffer();
|
||||||
|
//delay(animationSpeed);
|
||||||
|
planarCase++;
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 11:
|
||||||
|
for (int y = 0; y < 3; y++) {
|
||||||
|
for (int x = 0; x < 4; x++) drawLine(color, x, 3, 3, x, y, 0);
|
||||||
|
flushBuffer();
|
||||||
|
clearBuffer();
|
||||||
|
//delay(animationSpeed);
|
||||||
|
planarCase = 0;
|
||||||
|
currentTimer = 0;
|
||||||
|
timerReset = false;
|
||||||
|
}
|
||||||
color = nextColor(color);
|
color = nextColor(color);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
|
/*
|
||||||
void timerInit() {
|
void timerInit() {
|
||||||
animationDelay.setTimeout(100);
|
animationDelay.setTimeout(100);
|
||||||
animationDelay.setCallback(animationDelayCallback);
|
animationDelay.setCallback(animationDelayCallback);
|
||||||
|
|
@ -9,3 +9,4 @@ void animationDelayCallback() {
|
||||||
animationDelayTiming = false;
|
animationDelayTiming = false;
|
||||||
//Serial.println("timed out");
|
//Serial.println("timed out");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue