Skip to content
Snippets Groups Projects
motor.h 2.64 KiB
Newer Older
#define M4_MMREV  0.7
#define M5_MMREV  0.8
David Gauchard's avatar
David Gauchard committed
class AccelStepper
{
public:
    enum { DRIVER, FULL4WIRE, };
    AccelStepper(uint8_t interface = AccelStepper::FULL4WIRE, uint8_t pin1 = 2, uint8_t pin2 = 3, uint8_t pin3 = 4, uint8_t pin4 = 5, bool enable = true) {}
    unsigned long computeNewSpeed () { return 0; }
    float maxSpeed () { return 0; }
    float acceleration () { return 5; }
    long distanceToGo () { return 0; }
David Gauchard's avatar
David Gauchard committed
};
#else
#include <AccelStepper.h>
#endif

class ISRStepper: public AccelStepper
{
    // usefulness: make computeNewSpeed() public to be called outside from interrupt
public:
    ISRStepper(uint8_t interface = AccelStepper::FULL4WIRE, uint8_t pin1 = 2, uint8_t pin2 = 3, uint8_t pin3 = 4, uint8_t pin4 = 5, bool enable = true):
        AccelStepper(interface, pin1, pin2, pin3, pin4, enable) { }
    // make it public
    inline unsigned long computeNewSpeed () { return AccelStepper::computeNewSpeed(); }
};

    using MotorHardware_t = ISRStepper; //using an instance
Malaurie Bernard's avatar
Malaurie Bernard committed
        
    //CONSTRUCTORS
Malaurie Bernard's avatar
Malaurie Bernard committed
    void set_physical (int steps_per_revolution, float mm_per_revolution, bool clockwise_equals_forward);
    
    void set_steps_per_revolution(float steps_per_revolution);
    void set_mm_per_revolution (float mm_per_revolution);
    void set_retain_acceleration_mm_per_sec_per_sec (float acceleration_mm_per_sec_per_sec);
    void set_clockwise_equals_forward (bool forward_clockwise);

    void set_speed_mm_per_sec (float mm_per_sec);

    //GETTERS
    float get_steps_per_revolution();
    float get_mm_per_revolution () const;
    bool get_clockwise_equals_forward ();
    float get_retain_acceleration_mm_per_sec_per_sec () const;

    //CONVERSIONS
    float mm_to_step (float mm) const;
    float step_to_mm (int step) const;

    //MOVEMENTS
    void move_to_step_limit_switch (int step);
    void move_to_mm_limit_switch (float mm);
    void move_to_mm (float mm);
	void stay_here ();

    void move_step_limit_switch (int step);
    void move_mm_limit_switch (float mm);
    void move_step (int step);
    void move_mm (float mm);


    bool motor_is_running ();

    //POSITION
    int where_step ();
    int where_mm ();
	void reset_position();

    //CONFIGURATION
    void show_configuration ();
David Gauchard's avatar
David Gauchard committed
protected:

    int _steps_per_revolution = -1;
    float _mm_per_revolution = -1;
    float _retain_acceleration_mm_per_sec_per_sec = -1; //Useful for the limit switch
    MotorHardware_t& stepper;