// Required to call the `ramp` method. use ramp_maker::MotionProfile as _; fn main() { // Let's use floating point numbers here to keep the example simple. // RampMaker also supports fixed-point numbers though. let target_accel = 1000.0; // meters per second^2 let max_velocity = 1500.0; // meters per second let mut profile = ramp_maker::Trapezoidal::new(target_accel); let num_steps = 2000; profile.enter_position_mode(max_velocity, num_steps); for delay in profile.delays() { // How you handle a delay depends on the platform you're running on // (RampMaker works pretty much everywhere). Here, we use a fake `Timer` // API, to demonstrate how the delays produced by RampMaker must be // used. let timer = Timer::start(delay); // RampMaker doesn't care how you actually interface with the stepper // motor, so we use this fake `step` method to demonstrate the // principle. If you haven't settled on a solution, why not check out // Step/Dir, another library from the Flott toolkit? step(); // Wait until the delay is over before making the next step. timer.wait(); } } struct Timer; impl Timer { fn start(_delay_s: f32) -> Self { Self } fn wait(&self) {} } fn step() {}