| Crates.io | vexide-motorgroup |
| lib.rs | vexide-motorgroup |
| version | 2.1.0 |
| created_at | 2025-02-28 13:59:18.425198+00 |
| updated_at | 2025-04-13 13:58:26.188424+00 |
| description | Motor groups for vexide in userland. |
| homepage | |
| repository | https://github.com/zabackary/vexide-motorgroup/ |
| max_upload_size | |
| id | 1572835 |
| size | 80,593 |
Missing MotorGroup from VEXCode or PROS? This is a simple implementation of a
MotorGroup for vexide which allows you to group motors together and control
them as one.
Add the following to your Cargo.toml:
[dependencies]
# ... other dependencies
vexide-motorgroup = "2.1.0"
Or if you prefer the command line:
cargo add vexide-motorgroup
Normally, you would have to set each motor's target and other values
individually even if the motors were physically connected in a drivetrain or
similar, but with MotorGroup, you can control them as if they were one motor.
Just create a MotorGroup with a Vec of Motors and use the MotorGroup
methods just like you would with a Motor. It's that simple!
#![no_std]
#![no_main]
extern crate alloc;
use core::time::Duration;
use alloc::vec;
use vexide_motorgroup::MotorGroup;
use vexide::prelude::*;
#[vexide::main]
async fn main(peripherals: Peripherals) {
// Here's where the magic happens
let mut motor_group = MotorGroup::new(vec![
Motor::new(peripherals.port_1, Gearset::Green, Direction::Forward),
Motor::new(peripherals.port_2, Gearset::Green, Direction::Forward),
]);
// Set the motor group's target to a voltage as if it were a motor
motor_group.set_voltage(5.0).unwrap();
sleep(Duration::from_secs(1)).await;
// Set the motor group's target to a position
motor_group
.set_position_target(Position::from_degrees(90.0), 200)
.unwrap();
sleep(Duration::from_secs(1)).await;
// Set the motor group's target to a velocity
motor_group.set_velocity(100).unwrap();
sleep(Duration::from_secs(1)).await;
// Brake the motor group
motor_group.brake(BrakeMode::Hold).unwrap();
}
For functions returning values and reading data (i.e., those taking a read-only
reference to self), upon encountering an error accessing any motor, the result
will be a MotorGroupError that contains all the errors encountered during the
operation. Using
MotorGroupError::result
will return the average of all the results that were successfully read.
vexide-motorgroup provides two different strategies for handling write errors.
Both of them will return an Err when any motor returns an error.
WriteErrorStrategy::Ignore
(default): This strategy will ignore errors and continue writing to the other
motors.WriteErrorStrategy::Stop:
This strategy will stop writing to the other motors and return the error
immediately.