use obniz_rust::*;
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() -> ObnizResult<()> {
let device_id = "1234-5678";
let obniz = connect_async(device_id).await?;
println!("Connected to obniz device: {}", obniz.id());
let display = obniz.display();
println!("Displaying 'Hello, World!'");
display.text("Hello, World!").await?;
sleep(Duration::from_secs(2)).await;
println!("Clearing display");
display.clear().await?;
sleep(Duration::from_secs(1)).await;
println!("Displaying QR code");
display
.qr("https://obniz.io", QrCorrectionType::Medium)
.await?;
sleep(Duration::from_secs(3)).await;
println!("Setting brightness to 50%");
display.brightness(50).await?;
sleep(Duration::from_secs(1)).await;
display.clear().await?;
println!("Drawing geometric shapes");
display.rect(10, 10, 50, 30, false, true).await?;
display.circle(80, 25, 15, true, true).await?;
display.line(0, 0, 127, 63, true).await?;
sleep(Duration::from_secs(2)).await;
display.clear().await?;
println!("Drawing individual pixels");
for x in 0..128 {
for y in 0..64 {
if (x + y) % 10 == 0 {
display.pixel(x, y, true).await?;
}
}
}
sleep(Duration::from_secs(2)).await;
display.clear().await?;
println!("Custom text positioning and size");
display.text_size(2).await?;
display.text_pos(10, 10).await?;
display.text("BIG TEXT").await?;
display.text_size(1).await?;
display.text_pos(10, 40).await?;
display.text("Small text below").await?;
sleep(Duration::from_secs(3)).await;
display.clear().await?;
println!("Displaying raw pixel data");
let mut raw_data = vec![0u16; 1024];
for (i, item) in raw_data.iter_mut().enumerate() {
*item = if (i / 8) % 2 == 0 { 0xAA } else { 0x55 };
}
let raw_config = RawDisplayConfig {
width: 128,
height: 64,
color_depth: DisplayRawColorDepth::OneBit,
data: raw_data,
};
display.raw(raw_config).await?;
sleep(Duration::from_secs(3)).await;
println!("Setting up pin assignments for external display");
let pin_assignments = vec![
PinAssignment {
pin: 0,
module_name: "spi".to_string(),
pin_name: "clk".to_string(),
},
PinAssignment {
pin: 1,
module_name: "spi".to_string(),
pin_name: "mosi".to_string(),
},
PinAssignment {
pin: 2,
module_name: "display".to_string(),
pin_name: "cs".to_string(),
},
];
display.pin_assign(pin_assignments).await?;
println!("Using legacy ObnizDisplay trait");
obniz.display_clear()?;
obniz.display_text("Legacy interface")?;
sleep(Duration::from_secs(2)).await;
display.clear().await?;
display.text("Display Demo Complete!").await?;
sleep(Duration::from_secs(2)).await;
display.clear().await?;
println!("Display example completed successfully!");
Ok(())
}