diff options
Diffstat (limited to 'software/animation.ino')
-rw-r--r-- | software/animation.ino | 23 |
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; } } |