I2CDevices

Struct I2CDevices 

Source
pub struct I2CDevices<'a, I2C: 'static> {
    pub pwm: Option<Pca9685<RefCellDevice<'a, I2C>>>,
    /* private fields */
}
Expand description

High-level driver for PWM motor controller and IMU over a shared I2C bus.

Fields§

§pwm: Option<Pca9685<RefCellDevice<'a, I2C>>>

Implementations§

Source§

impl<'a, I2C, E> I2CDevices<'a, I2C>
where I2C: I2c<Error = E> + 'static, E: Debug,

Source

pub fn new( i2c_bus: &'a RefCell<I2C>, wheel_radius: f32, robot_radius: f32, ) -> Self

Create a new I2CDevices manager with specified wheel and robot dimensions.

Source

pub fn init_devices(&mut self) -> Result<(), DeviceError<E>>

Initialize the IMU and PWM motor controller on the I2C bus.

On success, both self.imu and self.pwm are set. Returns error if initialization fails.

Source

pub fn scan_bus(&self)

Scan the I2C bus for devices and log any found addresses.

Source

pub fn configure_pwm(&mut self) -> Result<(), DeviceError<E>>

Configure and enable the PWM motor driver (prescale to 60Hz).

Source

pub fn init_imu_data(&mut self)

Perform an initial IMU data read and log accelerometer, gyro, and temperature.

Source

pub fn execute_command( &mut self, command: I2CCommand, ) -> Result<Option<((f32, f32, f32), (f32, f32, f32), f32)>, DeviceError<E>>

Execute a high-level I2CCommand, performing motion or sensor operations.

Returns sensor data for ReadIMU or None for other commands.

Source

pub fn apply_wheel_speeds( &mut self, wheel_speeds: &[f32], ) -> Result<(), DeviceError<E>>

Applies calculated motor speeds using the PWM driver.

Source

pub fn read_imu( &mut self, ) -> Result<((f32, f32, f32), (f32, f32, f32), f32), DeviceError<E>>

Read accelerometer, gyroscope, and temperature data from the IMU.

§Returns

Ok(((ax, ay, az), (gx, gy, gz), temp)) on success.

Source

pub fn enable(&mut self) -> Result<(), DeviceError<E>>

Enable the PWM motor controller and power up the IMU sensor.

Source

pub fn disable(&mut self) -> Result<(), DeviceError<E>>

Disable motor PWM and put the IMU into sleep mode.

Auto Trait Implementations§

§

impl<'a, I2C> Freeze for I2CDevices<'a, I2C>

§

impl<'a, I2C> !RefUnwindSafe for I2CDevices<'a, I2C>

§

impl<'a, I2C> !Send for I2CDevices<'a, I2C>

§

impl<'a, I2C> !Sync for I2CDevices<'a, I2C>

§

impl<'a, I2C> Unpin for I2CDevices<'a, I2C>

§

impl<'a, I2C> !UnwindSafe for I2CDevices<'a, I2C>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more