aboutsummaryrefslogtreecommitdiff
path: root/software/animation.ino
diff options
context:
space:
mode:
Diffstat (limited to 'software/animation.ino')
-rw-r--r--software/animation.ino23
1 files changed, 13 insertions, 10 deletions
diff --git a/software/animation.ino b/software/animation.ino
index edd0c82..dabac0c 100644
--- a/software/animation.ino
+++ b/software/animation.ino
@@ -1,11 +1,13 @@
-#include "software.h"
+#include "animation.h"
-unsigned long clamp_time(unsigned long unclamped_time) {
+unsigned long clamp_time(unsigned long unclamped_time, double framerate) {
+ int frame_time_millis = (double) 1000 / framerate;
return unclamped_time / frame_time_millis * frame_time_millis;
}
-unsigned long get_frame(unsigned long relative_time) {
- return relative_time / frame_time_millis;
+unsigned long get_frame(unsigned long unclamped_time, double framerate) {
+ int frame_time_millis = (double) 1000 / framerate;
+ return unclamped_time / frame_time_millis;
}
unsigned int zigzag(unsigned int size, int index) {
@@ -14,19 +16,20 @@ unsigned int zigzag(unsigned int size, int index) {
return mod < size - 1 ? mod : zigzag_size - mod;
}
-void fill_plane(unsigned int direction, unsigned int offset) {
+const unsigned int weights[3] = {16, 4, 1};
+void fill_plane(unsigned int direction, unsigned int axis3_offset) {
for(int i = 0; i < 16; i++) {
unsigned char axis1_offset = i / 4;
unsigned char axis2_offset = i % 4;
- unsigned int axis1_weight = pow((direction + 1) % 3, 4);
- unsigned int axis2_weight = pow((direction - 1) % 3, 4);
- unsigned int axis3_weight = pow((direction ) % 3, 4);
+ unsigned int axis1_weight = weights[(direction + 1) % 3];
+ unsigned int axis2_weight = weights[(direction - 1) % 3];
+ unsigned int axis3_weight = weights[direction];
led_state[led_map[
- axis1_offset * axis1_weight +
+ (axis1_offset * axis1_weight +
axis2_offset * axis2_weight +
- offset * axis3_weight
+ axis3_offset * axis3_weight) % 64
]] = 1;
}
}