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 io = obniz.io();
println!("Setting pin 0 to output high");
io.set_pin_as_output(0, true).await?;
sleep(Duration::from_millis(1000)).await;
println!("Setting pin 0 to output low");
io.set_pin(0, false).await?;
println!("Setting pin 1 as input");
io.set_pin_as_input(1, false).await?;
let state = io.get_pin(1).await?;
println!("Pin 1 state: {state}");
println!("Setting up stream mode on pin 2");
io.set_pin_callback(2, |state| {
println!("Pin 2 changed to: {state}");
})
.await?;
let config = IoConfig {
direction: Direction::Output,
value: Some(true),
output_type: Some(OutputType::PushPull5v),
pull_type: Some(PullType::PullUp5v),
stream: Some(false),
};
println!("Configuring pin 3 with advanced settings");
io.configure_pin(3, config).await?;
let pin4 = io.pin(4)?;
pin4.set_as_output(true).await?;
println!("Set pin 4 as output high");
println!("Waiting for 10 seconds to observe pin changes...");
sleep(Duration::from_secs(10)).await;
io.remove_pin_callback(2)?;
println!("Example completed successfully!");
Ok(())
}