use std::error::Error;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
use std::time::Duration;
use std::{mem, thread};
use simple_signal::{self, Signal};
use blinkt::Blinkt;
fn main() -> Result<(), Box<dyn Error>> {
let mut blinkt = Blinkt::new()?;
let running = Arc::new(AtomicBool::new(true));
simple_signal::set_handler(&[Signal::Int, Signal::Term], {
let running = running.clone();
move |_| {
running.store(false, Ordering::SeqCst);
}
});
let (red, green, blue) = (&mut 255, &mut 0, &mut 0);
while running.load(Ordering::SeqCst) {
blinkt.set_all_pixels(*red, *green, *blue);
blinkt.show()?;
thread::sleep(Duration::from_millis(250));
mem::swap(red, green);
mem::swap(red, blue);
}
Ok(())
}