From 2b0fc7639efc11cb86481a55dfa3fab961de57ca Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Fri, 29 Dec 2023 17:51:15 -0500 Subject: [PATCH] Debounce buttons, fix colors, and add a new water pattern --- bike-lights/bike/src/main.rs | 2 +- bike-lights/core/src/lib.rs | 31 +++++++++++++++++++++++-------- bike-lights/core/src/patterns.rs | 22 ++++++++++++++++++++++ 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/bike-lights/bike/src/main.rs b/bike-lights/bike/src/main.rs index 962e0dc..c9fa1ad 100644 --- a/bike-lights/bike/src/main.rs +++ b/bike-lights/bike/src/main.rs @@ -54,7 +54,7 @@ impl DebouncedButton

{ } fn set_debounce(&mut self, time: Instant) { - self.debounce = time + Instant((100 as u32).into()); + self.debounce = time + Instant((250 as u32).into()); } } diff --git a/bike-lights/core/src/lib.rs b/bike-lights/core/src/lib.rs index b686d83..3bc79be 100644 --- a/bike-lights/core/src/lib.rs +++ b/bike-lights/core/src/lib.rs @@ -69,13 +69,15 @@ pub trait Animation { fn tick(&mut self, time: Instant) -> (DashboardPattern, BodyPattern); } +/* pub struct DefaultAnimation {} impl Animation for DefaultAnimation { fn tick(&mut self, _: Instant) -> (DashboardPattern, BodyPattern) { - (PRIDE_DASHBOARD, PRIDE_BODY) + (WATER_DASHBOARD, WATER_BODY) } } +*/ pub struct Fade { starting_dashboard: DashboardPattern, @@ -300,8 +302,9 @@ pub enum Event { RightBlinker, } -#[derive(Clone, Copy, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq)] pub enum Pattern { + Water, GayPride, TransPride, } @@ -309,20 +312,23 @@ pub enum Pattern { impl Pattern { fn previous(&self) -> Pattern { match self { - Pattern::GayPride => Pattern::TransPride, + Pattern::Water => Pattern::TransPride, + Pattern::GayPride => Pattern::Water, Pattern::TransPride => Pattern::GayPride, } } fn next(&self) -> Pattern { match self { + Pattern::Water => Pattern::GayPride, Pattern::GayPride => Pattern::TransPride, - Pattern::TransPride => Pattern::GayPride, + Pattern::TransPride => Pattern::Water, } } fn dashboard(&self) -> DashboardPattern { match self { + Pattern::Water => WATER_DASHBOARD, Pattern::GayPride => PRIDE_DASHBOARD, Pattern::TransPride => TRANS_PRIDE_DASHBOARD, } @@ -330,13 +336,14 @@ impl Pattern { fn body(&self) -> BodyPattern { match self { + Pattern::Water => OFF_BODY, Pattern::GayPride => PRIDE_BODY, Pattern::TransPride => TRANS_PRIDE_BODY, } } } -#[derive(Clone, PartialEq)] +#[derive(Clone, Debug, PartialEq)] pub enum State { Pattern(Pattern), Brake, @@ -357,11 +364,19 @@ pub struct App { impl App { pub fn new(ui: Box) -> Self { + let pattern = Pattern::Water; Self { ui, - state: State::Pattern(Pattern::GayPride), - home_pattern: Pattern::GayPride, - current_animation: Box::new(DefaultAnimation {}), + state: State::Pattern(pattern), + home_pattern: pattern, + current_animation: Box::new(Fade::new( + OFF_DASHBOARD, + OFF_BODY, + pattern.dashboard(), + pattern.body(), + DEFAULT_FRAMES, + Instant((0 as u32).into()), + )), dashboard_lights: OFF_DASHBOARD, lights: OFF_BODY, } diff --git a/bike-lights/core/src/patterns.rs b/bike-lights/core/src/patterns.rs index 41b9f99..12fb7ed 100644 --- a/bike-lights/core/src/patterns.rs +++ b/bike-lights/core/src/patterns.rs @@ -73,11 +73,33 @@ pub const TRANS_PINK: RGB = RGB { b: I8F8::lit("0.32"), }; +pub const WATER_1: RGB = RGB { + r: I8F8::lit("0.0"), + g: I8F8::lit("0.0"), + b: I8F8::lit("0.75"), +}; + +pub const WATER_2: RGB = RGB { + r: I8F8::lit("0.8"), + g: I8F8::lit("0.8"), + b: I8F8::lit("0.8"), +}; + +pub const WATER_3: RGB = RGB { + r: I8F8::lit("0.00"), + g: I8F8::lit("0.75"), + b: I8F8::lit("0.75"), +}; + pub const OFF_DASHBOARD: DashboardPattern = [RGB_OFF; 3]; pub const OFF_BODY: BodyPattern = [RGB_OFF; 60]; pub const DEFAULT_FRAMES: U16F0 = U16F0::lit("30"); +pub const WATER_DASHBOARD: DashboardPattern = [WATER_1, WATER_2, WATER_3]; + +pub const WATER_BODY: BodyPattern = [RGB_OFF; 60]; + pub const PRIDE_DASHBOARD: DashboardPattern = [PRIDE_RED, PRIDE_GREEN, PRIDE_INDIGO]; pub const PRIDE_BODY: BodyPattern = [