blink strip state
This commit is contained in:
parent
33da38381a
commit
908a512c31
21
src/main.rs
21
src/main.rs
|
@ -1,3 +1,6 @@
|
|||
mod patterns;
|
||||
|
||||
use patterns::{PixelColor, Strip};
|
||||
use bluer::{AdapterEvent, Device};
|
||||
use bluer::gatt::remote::Characteristic;
|
||||
use futures::{pin_mut, StreamExt};
|
||||
|
@ -57,19 +60,17 @@ async fn main() -> bluer::Result<()> {
|
|||
async fn send_seq(char: &Characteristic) -> bluer::Result<()> {
|
||||
println!(" Characteristic flags : {:?}, ", char.flags().await?);
|
||||
|
||||
let mut base_data: Vec<u8> = vec![0x00, 0x00, 0x01];
|
||||
let mut off_data: Vec<u8> = vec![0x00, 0x00, 0x01];
|
||||
for _ in 0..10 {
|
||||
base_data.append(&mut vec![0xff, 0x00, 0x00]);
|
||||
off_data.append(&mut vec![0x00, 0x00, 0x00]);
|
||||
}
|
||||
let mut strip_red : Strip<10>;
|
||||
strip_red.strip.fill(PixelColor { red: 255, green: 0, blue: 0});
|
||||
|
||||
let mut strip_green: Strip<10>;
|
||||
strip_green.strip.fill(PixelColor { red: 0, green: 255, blue: 0});
|
||||
|
||||
loop {
|
||||
char.write(&*base_data).await?;
|
||||
char.write(&*strip_green.to_array()).await?;
|
||||
sleep(Duration::from_secs(1)).await;
|
||||
char.write(&*off_data).await?;
|
||||
char.write(&*strip_red.to_array()).await?;
|
||||
sleep(Duration::from_secs(1)).await;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -112,7 +113,9 @@ async fn find_neopixel_service(device: &Device) -> bluer::Result<Option<Characte
|
|||
for service in device.services().await? {
|
||||
if SERVICE_UUID == service.uuid().await? {
|
||||
for char in service.characteristics().await? {
|
||||
println!("uuid : {}", &char.uuid().await?);
|
||||
if PIXEL_DATA_UUID == char.uuid().await? {
|
||||
|
||||
return Ok(Some(char));
|
||||
}
|
||||
|
||||
|
|
33
src/patterns.rs
Normal file
33
src/patterns.rs
Normal file
|
@ -0,0 +1,33 @@
|
|||
use bluer::gatt::remote::Characteristic;
|
||||
|
||||
const BASE_STRIP_DATA : [u8; 5] = [0x0, 0x0, 0x0, 0x0, 0x1];
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
pub(crate) struct PixelColor {
|
||||
pub(crate) red: u8,
|
||||
pub(crate) green: u8,
|
||||
pub(crate) blue: u8,
|
||||
}
|
||||
|
||||
|
||||
pub(crate) struct Strip<const N: usize> {
|
||||
pub strip: [PixelColor; N],
|
||||
}
|
||||
|
||||
impl<const N: usize> Strip<N> {
|
||||
pub fn to_array(&self) -> Vec<u8> {
|
||||
let mut data : Vec<u8> = vec![];
|
||||
|
||||
for i in 0..N {
|
||||
data.append(&mut vec![self.strip[i].red, self.strip[i].green, self.strip[i].blue]);
|
||||
}
|
||||
data
|
||||
}
|
||||
}
|
||||
|
||||
async fn write_strip<const N: usize>(data: Strip<N>, char: Characteristic) -> bluer::Result<()> {
|
||||
let mut frame= BASE_STRIP_DATA.to_vec();
|
||||
frame.append(&mut data.to_array());
|
||||
char.write(&*frame).await?;
|
||||
Ok(())
|
||||
}
|
Loading…
Reference in New Issue
Block a user