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::{AdapterEvent, Device};
|
||||||
use bluer::gatt::remote::Characteristic;
|
use bluer::gatt::remote::Characteristic;
|
||||||
use futures::{pin_mut, StreamExt};
|
use futures::{pin_mut, StreamExt};
|
||||||
|
@ -57,19 +60,17 @@ async fn main() -> bluer::Result<()> {
|
||||||
async fn send_seq(char: &Characteristic) -> bluer::Result<()> {
|
async fn send_seq(char: &Characteristic) -> bluer::Result<()> {
|
||||||
println!(" Characteristic flags : {:?}, ", char.flags().await?);
|
println!(" Characteristic flags : {:?}, ", char.flags().await?);
|
||||||
|
|
||||||
let mut base_data: Vec<u8> = vec![0x00, 0x00, 0x01];
|
let mut strip_red : Strip<10>;
|
||||||
let mut off_data: Vec<u8> = vec![0x00, 0x00, 0x01];
|
strip_red.strip.fill(PixelColor { red: 255, green: 0, blue: 0});
|
||||||
for _ in 0..10 {
|
|
||||||
base_data.append(&mut vec![0xff, 0x00, 0x00]);
|
let mut strip_green: Strip<10>;
|
||||||
off_data.append(&mut vec![0x00, 0x00, 0x00]);
|
strip_green.strip.fill(PixelColor { red: 0, green: 255, blue: 0});
|
||||||
}
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
char.write(&*base_data).await?;
|
char.write(&*strip_green.to_array()).await?;
|
||||||
sleep(Duration::from_secs(1)).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;
|
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? {
|
for service in device.services().await? {
|
||||||
if SERVICE_UUID == service.uuid().await? {
|
if SERVICE_UUID == service.uuid().await? {
|
||||||
for char in service.characteristics().await? {
|
for char in service.characteristics().await? {
|
||||||
|
println!("uuid : {}", &char.uuid().await?);
|
||||||
if PIXEL_DATA_UUID == char.uuid().await? {
|
if PIXEL_DATA_UUID == char.uuid().await? {
|
||||||
|
|
||||||
return Ok(Some(char));
|
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