diff --git a/src/main.rs b/src/main.rs index 78758bf..f1692d7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,17 +3,28 @@ pub mod util; use util::lights::*; use std::sync::{Arc, RwLock}; use std::thread; -use rs_ws281x::RawColor; +use rs_ws281x::{RawColor, Controller, ControllerBuilder, ChannelBuilder, StripType}; -pub const LED_SIZE: usize = 450; +pub const LED_SIZE: i32 = 450; +pub const BRIGHTNESS: u8 = 255; fn main() { let p: RawColor = [0, 0, 0, 0]; let lock = Arc::new(RwLock::new([p; LED_SIZE])); let lock_c = Arc::clone(&lock); + + let controller = ControllerBuilder::new() + .channel(ChannelBuilder::new() + .pin(18) + .count(LED_SIZE) + .strip_type(StripType::Ws2812) + .brightness(BRIGHTNESS) + .build() + ) + .build(); thread::spawn(move || loop { let lights = lock_c.read().unwrap(); - run_lights(&lights); + run_lights(&controller, &lights); }); let mut x: u8 = 0; loop { diff --git a/src/util/lights.rs b/src/util/lights.rs index 98c8a7f..821acb3 100644 --- a/src/util/lights.rs +++ b/src/util/lights.rs @@ -1,5 +1,15 @@ use rs_ws281x::RawColor; +use rs_ws281x::Controller; +use rs_ws281x::WS2811Error; -pub fn run_lights(strip: &[RawColor; crate::LED_SIZE]) { - println!("Value: {:?}", strip[0]); +pub fn run_lights(controller: &Controller, values: &[RawColor; crate::LED_SIZE]) -> Result<(), WS2811Error> { + // println!("Value: {:?}", strip[0]); + let channels: Vec = controller.channels(); + let mut strip = controller.leds_mut(channels[0]); + for x in 0..strip.len() { + strip[i] = values[i]; + } + + controller.render(); + controller.wait() } \ No newline at end of file