use robotiq_rs::*;
#[tokio::main]
async fn main() -> Result<(), RobotiqError> {
let path = "COM17";
let mut gripper = RobotiqGripper::from_path(path)?;
gripper.reset().await?;
gripper.activate().await?.await_activate().await?;
println!("finished activation.");
std::thread::sleep(std::time::Duration::from_millis(1000));
gripper.go_to(0x08, 0x00, 0x00).await?;
let obj_detect_status = gripper.await_go_to().await?;
println!("Object Detect Status : {:?}", obj_detect_status);
std::thread::sleep(std::time::Duration::from_millis(1000));
let obj_detect_status = gripper.go_to(0xFF, 0xFF, 0xFF).await?.await_go_to().await?;
println!("Object Detect Status : {:?}", obj_detect_status);
std::thread::sleep(std::time::Duration::from_millis(1000));
gripper.go_to(0x08, 0x00, 0x00).await?;
std::thread::sleep(std::time::Duration::from_millis(100));
gripper.automatic_release(false).await?;
gripper
.reset()
.await?
.activate()
.await?
.await_activate()
.await?;
std::thread::sleep(std::time::Duration::from_millis(1000));
gripper.go_to(0x08, 0x00, 0x00).await?;
std::thread::sleep(std::time::Duration::from_millis(1000));
let cmd_null = GripperCommand::new();
let cmd_act = GripperCommand::new().act(true);
let cmd_goto_1 = GripperCommand::new()
.act(true)
.gto(true)
.pos_req(0x08)
.speed(0x00)
.force(0x00);
let cmd_goto_2 = GripperCommand::new()
.act(true)
.gto(true)
.pos_req(0xFF)
.speed(0xFF)
.force(0xFF);
let cmd_atr = GripperCommand::new().act(true).atr(true).ard(true);
gripper.write_async(cmd_null).await?;
gripper.write_async(cmd_act).await?;
while gripper.read_async().await?.sta != ActivationStatus::Completed {
std::thread::sleep(std::time::Duration::from_millis(100));
}
std::thread::sleep(std::time::Duration::from_millis(1000));
gripper.write_async(cmd_goto_1).await?;
while gripper.read_async().await?.obj == ObjDetectStatus::InMotion {
std::thread::sleep(std::time::Duration::from_millis(100));
}
std::thread::sleep(std::time::Duration::from_millis(1000));
gripper.write_async(cmd_goto_2).await?;
std::thread::sleep(std::time::Duration::from_millis(100));
gripper.write_async(cmd_atr).await?;
while gripper.read_async().await?.fault != GripperFault::AutomaticReleaseCompleted {
std::thread::sleep(std::time::Duration::from_millis(100));
}
std::thread::sleep(std::time::Duration::from_millis(1000));
gripper
.reset()
.await?
.activate()
.await?
.await_activate()
.await?
.go_to(0x00, 0xFF, 0xFF)
.await?
.await_go_to()
.await?;
Ok(())
}