d

Dependencies:   AX12_final MX106_not_working comunication_1 mbed-dev

Fork of MX106-finaltest by Team DIANA

Revision:
10:2acfa1a84c96
Child:
11:19e8022f60ea
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MX.h	Sat Jul 02 18:06:59 2016 +0000
@@ -0,0 +1,118 @@
+#ifndef MX_H
+#define MX_H
+
+#define MX_REG_ID 0x3
+#define MX_REG_CW_LIMIT 0x06
+#define MX_REG_CCW_LIMIT 0x08
+#define MX_REG_GOAL_POSITION 0x1E
+#define MX_REG_MOVING_SPEED 0x20
+#define MX_REG_VOLTS 0x2A
+#define MX_REG_AMPERE 0x44
+#define MX_REG_TEMP 0x2B
+#define MX_REG_PGAIN 0x1C
+#define MX_REG_IGAIN 0x1B
+#define MX_REG_DGAIN 0X1A
+#define MX_REG_MOVING 0x2E
+#define MX_REG_MAXTORQUE 0x22
+#define MX_REG_POSITION 0x24
+#define MX_RESOLUTION 0.088
+//bit per degrees 4095/360°
+#define MX_REG_MOTORONOFF 0x18
+#define MX_BIT_DEG 11.375
+#define MX_DEBUG 1
+#define MX_TRIGGER_DEBUG 1
+#define MX_REG_CURRENT 0x44
+#define MX_REG_TEMP 0x2B
+
+#define MX_READ_DEBUG 1
+#define AX12_WRITE_DEBUG 1
+#define AX12_READ_DEBUG 1
+#define AX12_TRIGGER_DEBUG 1
+#define AX12_DEBUG 1
+
+#define AX12_REG_ID 0x3
+#define AX12_REG_CW_LIMIT 0x06
+#define AX12_REG_CCW_LIMIT 0x08
+#define AX12_REG_GOAL_POSITION 0x1E
+#define AX12_REG_MOVING_SPEED 0x20
+#define AX12_REG_VOLTS 0x2A
+#define AX12_REG_TEMP 0x2B
+#define AX12_REG_MOVING 0x2E
+#define AX12_REG_POSITION 0x24
+#define AX12_REG_MAXTORQUE 0x22
+#define AX12_REG_MOTORONOFF 0x18
+#define AX12_MODE_POSITION  0
+#define AX12_MODE_ROTATION  1
+
+#define AX12_CW 1
+#define AX12_CCW 1
+#define goal_resolution 0.08789
+
+#define READ_DEBUG 1
+
+#include "Joint.h"
+
+// TODO: spostare i metodi uguali da MX106, MX64 in questo file e in MX.cpp. 
+
+class MX : public Joint
+{
+
+  public:
+    MX(communication_1& line, int ID, float gear_train);
+    virtual ~MX();
+    void setID(int newID);
+
+    /** Set the mode of the servo
+     * @param mode
+     *    0 = Positional, default
+     *    1 = Continuous rotation
+     */
+    void setMode(int mode);
+    /** Set the clockwise limit of the servo
+     *
+     * @param degrees, 0-300
+     */
+    void setCWLimit(float degrees);
+    /** Set the counter-clockwise limit of the servo
+     *
+     * @param degrees, 0-300
+     */
+    void setCCWLimit(float degrees);
+    /** Set the speed of the servo in continuous rotation mode
+     *
+     * @param speed, -1.0 to 1.0
+     *   -1.0 = full speed counter clock wise
+     *    1.0 = full speed clock wise
+     */
+    void setCRSpeed(float speed);
+    void setGoalPosition(float degrees);
+    float getPosition();
+
+    /** Set goal angle in integer degrees, in positional mode
+     *
+     * @param degrees 0-300
+     * @param flags, defaults to 0
+     *    flags[0] = blocking, return when goal position reached 
+     *    flags[1] = register, activate with a broadcast trigger
+     *
+     */
+    int setGoal(float degrees, int flags = 0);
+    void setSpeed(float goal_speed);
+    float getTemp();
+    float getCurrent();
+    float getVolts();
+    float getPGain();
+    float getIGain();
+    float getDGain();
+    void setMaxTorque(float torque);
+    void setMotorEnabled(bool enabled);
+    bool isMoving();
+
+  protected:
+    communication_1& _line;
+    float _gear_train;
+    int _ID;
+    int _mode;
+};
+
+#endif