Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: CartesianRobot_Demo
Diff: CartesianRobot.h
- Revision:
- 0:5af6295f4ec9
- Child:
- 1:0b705e9f84ce
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CartesianRobot.h Thu Dec 16 01:19:17 2021 +0000 @@ -0,0 +1,91 @@ +#ifndef CARTESIANROBOT_H +#define CARTESIANROBOT_H + +#include "Stepper.h" +#include "rtos.h" + +#define BUFFER_MAX_SIZE 10 + +class CartesianRobot +{ +public: + // Constructor + CartesianRobot( + PinName x_step, PinName x_dir, PinName x_en, + PinName y_step, PinName y_dir, PinName y_en, + PinName z_step, PinName z_dir, PinName z_en + ); + // Destructor + ~CartesianRobot(); + + // Add motion to buffer + void moveToXYZ( + int x_pos, int y_pos, int z_pos, + float x_speed, float y_speed, float z_speed + ); + // Move robot to absolute position + void goToXYZ(int x_pos, int y_pos, int z_pos); + // Move motors a set number of steps + void moveX(int steps); + void moveY(int steps); + void moveZ(int steps); + + // Set motor speeds [steps/sec] + void setXSpeed(float speed); + void setYSpeed(float speed); + void setZSpeed(float speed); + // Set motor acceleration ramps [steps/sec²] (0 = infinite acceleration) + void setXAcceleration(float acc); + void setYAcceleration(float acc); + void setZAcceleration(float acc); + // Set motor deceleration ramps [steps/sec²] (0 = infinite deceleration) + void setXDeceleration(float dec); + void setYDeceleration(float dec); + void setZDeceleration(float dec); + + // Enable motor drivers + void enable(void); + // Disable motor drivers + void disable(void); + // Check if motor drivers are enabled + bool enabled(void); + // Check if motors are stopped + bool stopped(void); + // Get absolute positions from origin + int getXPosition(void); + int getYPosition(void); + int getZPosition(void); + + // Set origin for absolute motion + void setOrigin(void); + // Set limits for absolute motion + void setLimits(void); + // Get limits for absolute motion + int getXLimit(void); + int getYLimit(void); + int getZLimit(void); + + // Start buffer management thread + void startManager(void); + + private: + Stepper _x_stepper; // x axis stepper object + Stepper _y_stepper; // y axis stepper object + Stepper _z_stepper; // z axis stepper object + + Mutex _buffer_mutex; // thread safe buffer + int _buffer_size; // current buffer size + int _x_buffer_pos[BUFFER_MAX_SIZE]; // x position buffer + int _y_buffer_pos[BUFFER_MAX_SIZE]; // y position buffer + int _z_buffer_pos[BUFFER_MAX_SIZE]; // z position buffer + float _x_buffer_speed[BUFFER_MAX_SIZE]; // x speed buffer + float _y_buffer_speed[BUFFER_MAX_SIZE]; // y speed buffer + float _z_buffer_speed[BUFFER_MAX_SIZE]; // z speed buffer + + // buffer management + Thread* _thread; + static void manager(void const *p); + +}; + +#endif \ No newline at end of file