#![allow(clippy::uninlined_format_args)]
#![allow(clippy::let_unit_value)]
use pokeys_lib::*;
use std::thread;
use std::time::Duration;
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("๐ง Physical Device Configuration Example");
println!("=======================================");
let device_count = enumerate_usb_devices()?;
if device_count == 0 {
return Err("No PoKeys devices found! Please connect a device and try again.".into());
}
println!("โ
Found {} device(s)", device_count);
let mut device = connect_to_device(0)?;
let _device_info = device.get_device_data()?;
println!("๐ฑ Connected to device");
println!("\n๐ง Configuring pins...");
device.set_pin_function(1, PinFunction::DigitalOutput)?;
device.set_digital_output(1, false)?;
println!(" Pin 1: Digital Output (LED)");
device.set_pin_function(2, PinFunction::DigitalInput)?;
println!(" Pin 2: Digital Input (Button)");
device.set_pwm_period(20000)?; device.enable_pwm_for_pin(22, true)?; println!(" Pin 22: PWM Output (Servo Control)");
println!("\n๐ฎ Running demonstration...");
for i in 0..20 {
device.set_digital_output(1, i % 2 == 0)?;
let button_state = device.get_digital_input(2)?;
if button_state {
println!(" Button pressed!");
}
let duty = (i * 5) % 100;
device.set_pwm_duty_cycle_for_pin(22, duty as u32)?;
thread::sleep(Duration::from_millis(500));
}
println!("\n๐งน Cleaning up...");
device.set_digital_output(1, false)?;
device.set_pwm_duty_cycle_for_pin(22, 0)?;
println!("โ
Example completed successfully!");
Ok(())
}