diff --git a/flake.nix b/flake.nix index a673795..fdd91d1 100644 --- a/flake.nix +++ b/flake.nix @@ -46,7 +46,7 @@ mkProgram = { pkgs, gcc, cflags, pname, psrc, pbuildInputs ? [], avr ? false }: let AVR = if avr == true then "1" else ""; - in pkgs.stdenv.mkDerivation rec { + in pkgs.stdenv.mkDerivation rec { name = pname; src = psrc; diff --git a/lantern/lantern.c b/lantern/lantern.c index 37012a4..c31d807 100644 --- a/lantern/lantern.c +++ b/lantern/lantern.c @@ -33,7 +33,7 @@ uint8_t random_step(uint8_t value, uint8_t min, uint8_t max) { animation_t animation_new(void) { return (animation_t) { - .color = { .brightness = 1, .r = 0, .g = 0, .b = 0 }, + .color = { .brightness = 7, .r = 0, .g = 0, .b = 0 }, .red_line = time_line_new(0, 0, 0, 0), .green_line = time_line_new(0, 0, 0, 0), .blue_line = time_line_new(0, 0, 0, 0), @@ -76,6 +76,12 @@ lantern_t lantern_new(sk9822_t lights) { animation_new(), animation_new(), animation_new(), + animation_new(), + animation_new(), + animation_new(), + animation_new(), + animation_new(), + animation_new(), } }; } @@ -89,6 +95,18 @@ void lantern_start_normal(lantern_t *self, int light_idx) { random_step(self->animations[0].color.g, 20, 50), 0, 5); + animation_begin( + &self->animations[3], + random_step(self->animations[3].color.r, 180, 255), + random_step(self->animations[3].color.g, 20, 50), + 0, + 5); + animation_begin( + &self->animations[6], + random_step(self->animations[3].color.r, 180, 255), + random_step(self->animations[3].color.g, 20, 50), + 0, + 5); break; case 1: animation_begin( @@ -97,6 +115,18 @@ void lantern_start_normal(lantern_t *self, int light_idx) { random_step(self->animations[1].color.g, 10, 30), 0, 15); + animation_begin( + &self->animations[4], + random_step(self->animations[4].color.r, 160, 230), + random_step(self->animations[4].color.g, 10, 30), + 0, + 15); + animation_begin( + &self->animations[7], + random_step(self->animations[7].color.r, 160, 230), + random_step(self->animations[7].color.g, 10, 30), + 0, + 15); break; case 2: animation_begin( @@ -105,6 +135,18 @@ void lantern_start_normal(lantern_t *self, int light_idx) { random_step(self->animations[2].color.g, 0, 10), 0, 30); + animation_begin( + &self->animations[5], + random_step(self->animations[5].color.r, 140, 170), + random_step(self->animations[5].color.g, 0, 10), + 0, + 30); + animation_begin( + &self->animations[8], + random_step(self->animations[8].color.r, 140, 170), + random_step(self->animations[8].color.g, 0, 10), + 0, + 30); break; } } @@ -118,6 +160,18 @@ void lantern_start_spooky(lantern_t *self, int light_idx) { random_step(self->animations[0].color.g, 80, 120), 0, 15); + animation_begin( + &self->animations[3], + 0, + random_step(self->animations[3].color.g, 80, 120), + 0, + 15); + animation_begin( + &self->animations[6], + 0, + random_step(self->animations[6].color.g, 80, 120), + 0, + 15); break; case 1: animation_begin( @@ -126,6 +180,18 @@ void lantern_start_spooky(lantern_t *self, int light_idx) { random_step(self->animations[1].color.g, 60, 100), 0, 15); + animation_begin( + &self->animations[4], + 0, + random_step(self->animations[4].color.g, 60, 100), + 0, + 15); + animation_begin( + &self->animations[7], + 0, + random_step(self->animations[7].color.g, 60, 100), + 0, + 15); break; case 2: animation_begin( @@ -134,6 +200,18 @@ void lantern_start_spooky(lantern_t *self, int light_idx) { random_step(self->animations[2].color.g, 20, 40), 0, 15); + animation_begin( + &self->animations[5], + 0, + random_step(self->animations[5].color.g, 20, 40), + 0, + 15); + animation_begin( + &self->animations[8], + 0, + random_step(self->animations[8].color.g, 20, 40), + 0, + 15); break; } } @@ -143,25 +221,61 @@ void lantern_start_eerie(lantern_t *self, int light_idx) { case 0: animation_begin( &self->animations[0], + random_step(self->animations[0].color.r, 20, 40), random_step(self->animations[0].color.g, 20, 40), - random_step(self->animations[0].color.g, 20, 40), - random_step(self->animations[0].color.g, 80, 120), + random_step(self->animations[0].color.b, 80, 120), + 15); + animation_begin( + &self->animations[3], + random_step(self->animations[3].color.r, 20, 40), + random_step(self->animations[3].color.g, 20, 40), + random_step(self->animations[3].color.b, 80, 120), + 15); + animation_begin( + &self->animations[6], + random_step(self->animations[6].color.r, 20, 40), + random_step(self->animations[6].color.g, 20, 40), + random_step(self->animations[6].color.b, 80, 120), 15); break; case 1: animation_begin( &self->animations[1], - random_step(self->animations[0].color.g, 0, 30), - random_step(self->animations[0].color.g, 0, 30), - random_step(self->animations[1].color.g, 60, 100), + random_step(self->animations[1].color.r, 0, 30), + random_step(self->animations[1].color.g, 0, 30), + random_step(self->animations[1].color.b, 60, 100), + 30); + animation_begin( + &self->animations[4], + random_step(self->animations[4].color.r, 0, 30), + random_step(self->animations[4].color.g, 0, 30), + random_step(self->animations[4].color.b, 60, 100), + 30); + animation_begin( + &self->animations[7], + random_step(self->animations[7].color.r, 0, 30), + random_step(self->animations[7].color.g, 0, 30), + random_step(self->animations[7].color.b, 60, 100), 30); break; case 2: animation_begin( &self->animations[2], - random_step(self->animations[0].color.g, 0, 10), - random_step(self->animations[0].color.g, 0, 10), - random_step(self->animations[2].color.g, 20, 40), + random_step(self->animations[2].color.r, 0, 10), + random_step(self->animations[2].color.g, 0, 10), + random_step(self->animations[2].color.b, 20, 40), + 45); + animation_begin( + &self->animations[5], + random_step(self->animations[5].color.r, 0, 10), + random_step(self->animations[5].color.g, 0, 10), + random_step(self->animations[5].color.b, 20, 40), + 45); + animation_begin( + &self->animations[8], + random_step(self->animations[8].color.r, 0, 10), + random_step(self->animations[8].color.g, 0, 10), + random_step(self->animations[8].color.b, 20, 40), 45); break; } diff --git a/lantern/lantern.h b/lantern/lantern.h index 51585cc..4c487ea 100644 --- a/lantern/lantern.h +++ b/lantern/lantern.h @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with thi #ifndef __LANTERN_H__ #define __LANTERN_H__ -#define LIGHT_COUNT 3 +#define LIGHT_COUNT 9 typedef struct { rgb_t color; diff --git a/lantern/main.c b/lantern/main.c index 4d0d5d0..537592d 100644 --- a/lantern/main.c +++ b/lantern/main.c @@ -74,6 +74,8 @@ int main(void) { }; display_init(&display); + display_write_message(&display, "ready"); + _delay_ms(1000); dio_t buttons[4] = { { .ddr = &DDRB, .port = &PORTB, .pin = &PINB, .addr = 5 },