From 090e276bc87bf959f238f0e68c71a746ea6741fe Mon Sep 17 00:00:00 2001 From: Tangent Wantwight Date: Wed, 2 Dec 2020 23:41:00 -0500 Subject: [PATCH] 2020 December start --- harrogate/Cargo.toml | 1 + harrogate/src/december_02_2020.rs | 71 +++++++++++++++++++++++++++++++ harrogate/src/main.rs | 4 ++ 3 files changed, 76 insertions(+) create mode 100644 harrogate/src/december_02_2020.rs diff --git a/harrogate/Cargo.toml b/harrogate/Cargo.toml index 42caf24..0f17ec0 100644 --- a/harrogate/Cargo.toml +++ b/harrogate/Cargo.toml @@ -17,6 +17,7 @@ replace-default = [] december-01-2019 = ["replace-default"] december-21-2019 = ["replace-default"] december-24-2019 = ["replace-default"] +december-02-2020 = ["replace-default"] valentines-2020 = ["replace-default"] st-patricks-day = ["replace-default"] july-4 = ["replace-default"] diff --git a/harrogate/src/december_02_2020.rs b/harrogate/src/december_02_2020.rs new file mode 100644 index 0000000..677a2e2 --- /dev/null +++ b/harrogate/src/december_02_2020.rs @@ -0,0 +1,71 @@ +//! Streamers of white on a shifting color backdrop +use super::delay; +use house::Harrogate; +use lights::rgb::{blend, blend_steps, Rgb}; +use lights::{HardwareRgb, Lights}; + +const OFF: Rgb = Rgb(0, 0, 0); +const GREEN: Rgb = Rgb(0, 200, 0); +const BLUE: Rgb = Rgb(0, 0, 200); +const RED: Rgb = Rgb(200, 0, 0); +const YELLOW: Rgb = Rgb(200, 200, 0); +const WHITE: Rgb = Rgb(255, 255, 255); + +//const PULSE_LEN: usize = 200; +const SEGMENT_LEN: usize = 35; +const ZOOM: usize = 10; +const ZOOM_SEGMENT_LEN: usize = SEGMENT_LEN * ZOOM + ZOOM; + +// center on the pillar +const HALF_PORCH: usize = 75 - 4; +const FULL_PORCH: usize = 150; + +#[allow(dead_code)] +#[inline(always)] +pub fn run(lights: &mut impl Lights) -> ! { + /*let mut lead_pulse = linear_gradient(GREEN, YELLOW, PULSE_LEN) + .chain(linear_gradient(YELLOW, GREEN, PULSE_LEN)) + .cycle(); + let mut trail_pulse = linear_gradient(BLUE, RED, PULSE_LEN) + .chain(linear_gradient(RED, BLUE, PULSE_LEN)) + .cycle();*/ + + let mut t = 0; + + loop { + // advance "time" for pattern + t += 1; + if t > ZOOM_SEGMENT_LEN { + t = 0; + } + //let lead_color = lead_pulse.next().unwrap_or(Rgb(255, 0, 0)); + //let trail_color = trail_pulse.next().unwrap_or(Rgb(255, 0, 0)); + + let half_pattern_func = |i| { + let x = (i * ZOOM) + t; + let x = x % ZOOM_SEGMENT_LEN; + match x { + x if x > SEGMENT_LEN * ZOOM => { + blend_steps(OFF, WHITE, ZOOM, x - SEGMENT_LEN * ZOOM) + } + x => blend_steps(WHITE, OFF, SEGMENT_LEN * ZOOM, x), + } + }; + let pattern_func = |i| match i { + i if i < HALF_PORCH => half_pattern_func(i), + i => half_pattern_func(FULL_PORCH - i), + }; + + Harrogate { + porch_back: (0..FULL_PORCH) + .map(pattern_func) + .map(|b| blend(BLUE, GREEN, b)), + porch_front: (0..FULL_PORCH) + .map(pattern_func) + .map(|b| blend(RED, YELLOW, b)), + } + .render_to(lights); + + delay(300_000); + } +} diff --git a/harrogate/src/main.rs b/harrogate/src/main.rs index 5a41ee9..5932a51 100644 --- a/harrogate/src/main.rs +++ b/harrogate/src/main.rs @@ -8,6 +8,7 @@ pub use lights_hal::delay; mod december_01_2019; mod december_21_2019; mod december_24_2019; +mod december_02_2020; mod valentines_2020; mod st_patricks_day; mod july_4; @@ -28,6 +29,9 @@ fn main() -> ! { #[cfg(feature = "december-24-2019")] december_24_2019::run(&mut lights); + #[cfg(feature = "december-02-2020")] + december_02_2020::run(&mut lights); + #[cfg(feature = "valentines-2020")] valentines_2020::run(&mut lights);