Skip to main content

SolenoidGroup

Struct SolenoidGroup 

Source
pub struct SolenoidGroup { /* private fields */ }
Expand description

A group of pneumatic solenoids that can be controlled together.

SolenoidGroup wraps multiple AdiDigitalOut devices and provides methods to control them as a single unit. All operations are async and thread-safe using an Arc<Mutex<>> wrapper.

§Use Cases

  • Dual-acting pistons: Control both sides of a piston simultaneously
  • Synchronized mechanisms: Ensure multiple pistons extend/retract together
  • Redundant systems: Control backup solenoids alongside primary ones

§Error Handling

Group operations return Result<(), GroupErrors> where GroupErrors is a vector of individual port errors. If all solenoids succeed, Ok(()) is returned. If any fail, Err(errors) contains all failures.

Implementations§

Source§

impl SolenoidGroup

Source

pub fn new(pneumatics: Vec<AdiDigitalOut>) -> Self

Creates a new solenoid group from a vector of digital outputs.

§Arguments
  • pneumatics - Vector of AdiDigitalOut devices to control together
§Returns

A new SolenoidGroup wrapping the provided solenoids.

§Example
let group = SolenoidGroup::new(vec![solenoid1, solenoid2]);
Source

pub async fn use_at<F, R>(&self, index: usize, f: F) -> R
where F: FnOnce(&mut AdiDigitalOut) -> R,

Runs a function on a specific solenoid by index.

This method provides direct access to an individual solenoid within the group for custom operations.

§Arguments
  • index - Index of the solenoid to access (0-based)
  • f - Closure that receives a mutable reference to the solenoid
§Returns

The return value of the provided closure.

§Panics

Panics if index is out of bounds.

Source

pub async fn set_level(&self, logic: LogicLevel) -> Result<(), GroupErrors>

Sets the logic level for all solenoids.

§Arguments
§Returns
  • Ok(()) - All solenoids set successfully
  • Err(errors) - One or more solenoids failed; contains all errors
Source

pub async fn extend(&self) -> Result<(), GroupErrors>

Extends all solenoids (sets to high).

Equivalent to set_level(LogicLevel::High). Use this to extend pneumatic cylinders.

§Returns
  • Ok(()) - All solenoids extended successfully
  • Err(errors) - One or more solenoids failed
Source

pub async fn retract(&self) -> Result<(), GroupErrors>

Retracts all solenoids (sets to low).

Equivalent to set_level(LogicLevel::Low). Use this to retract pneumatic cylinders.

§Returns
  • Ok(()) - All solenoids retracted successfully
  • Err(errors) - One or more solenoids failed
Source

pub async fn toggle(&self) -> Result<(), GroupErrors>

Toggles all solenoids.

Each solenoid switches to its opposite state (high → low, low → high). Note that solenoids toggle independently, so if they were in different states, they will swap states rather than synchronize.

§Returns
  • Ok(()) - All solenoids toggled successfully
  • Err(errors) - One or more solenoids failed
Source

pub async fn is_level(&self, logic: LogicLevel) -> bool

Checks if all solenoids are at the given logic level.

§Arguments
§Returns

true if all solenoids are at the specified level, false otherwise. If any solenoid’s level cannot be read, it is treated as not matching.

Trait Implementations§

Source§

impl Clone for SolenoidGroup

Source§

fn clone(&self) -> SolenoidGroup

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.