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
diff -r 000000000000 -r 5af6295f4ec9 CartesianRobot.h
--- /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