blob: dabac0c41217aae3eae075837195535a106c5820 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include "animation.h"
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 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) {
unsigned int zigzag_size = 2 * size - 2;
unsigned int mod = index % zigzag_size;
return mod < size - 1 ? mod : zigzag_size - mod;
}
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 = 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 +
axis2_offset * axis2_weight +
axis3_offset * axis3_weight) % 64
]] = 1;
}
}
|