Provides an interface to an AX-12A servo. Requires the Dynamixel bus protocol library

Dependents:   RobotArmDemo

Fork of AX-12A by robot arm demo team

Revision:
0:1a48094c99d1
Child:
1:d7642b2e155d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AX12.h	Thu Dec 10 21:45:59 2015 +0000
@@ -0,0 +1,108 @@
+/* Copyright (c) 2012 Martin Smith, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
+ * and associated documentation files (the "Software"), to deal in the Software without restriction, 
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute, 
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or 
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef MBED_AX12_H
+#define MBED_AX12_H
+
+#include "mbed.h"
+#include "DynamixelBus.h"
+
+
+enum ControlTable
+{
+    ModelNumberLow      = 0,        // RD
+    ModelNumberHigh     = 1,        // RD
+    FirmwareVersion     = 2,        // RD
+    ID                  = 3,        // RD/WR
+    BaudRate            = 4,        // RD/WR
+    ReturnDelayTime     = 5,        // RD/WR
+    CWAngleLimitL       = 6,        // RD/WR
+    CWAngleLimitH       = 7,        // RD/WR
+    CCWAngleLimitL      = 8,        // RD/WR
+    CCWAngleLimitH      = 9,        // RD/WR
+    Reserved1           = 10,
+    TemperatureLimit    = 11,       // RD/WR
+    VoltageLow          = 12,       // RD/WR
+    VoltageHigh         = 13,       // RD/WR
+    MaxTorqueL          = 14,       // RD/WR
+    MaxTorqueH          = 15,       // RD/WR
+    StatusReturnLevel   = 16,       // RD/WR
+    AlarmLED            = 17,       // RD/WR
+    AlarmShutdown       = 18,       // RD/WR
+    Reserved2           = 19,
+    DownCalibrationL    = 20,       // RR
+    DownCalibrationH    = 21,       // RD
+    UpCalibrationL      = 22,       // RD
+    UpCalibrationH      = 23,       // RD
+    TorqueEnable        = 24,       // RD/WR
+    LED                 = 25,       // RD/WR
+    CWComplianceMargin  = 26,       // RD/WR
+    CCWComplianceMargin = 27,       // RD/WR
+    CWComplianceSlope   = 28,       // RD/WR
+    CCWComplianceSlope  = 29,       // RD/WR
+    GoalPositionL       = 30,       // RD/WR
+    GoalPositionH       = 31,       // RD/WR
+    MovingSpeedL        = 32,       // RD/WR
+    MovingSpeedH        = 33,       // RD/WR
+    TorqueLimitL        = 34,       // RD/WR
+    TorqueLimitH        = 35,       // RD/WR
+    PresentPositionL    = 36,       // RD
+    PresentPositionH    = 37,       // RD
+    PresentSpeedL       = 38,       // RD
+    PresentSpeedH       = 39,       // RD
+    PresentLoadL        = 40,       // RD
+    PresentLoadH        = 41,       // RD
+    PresentVoltage      = 42,       // RD
+    PresentTemperature  = 43,       // RD
+    RegisteredInst      = 44,       // RD/WR
+    Reserved3           = 45,       
+    Moving              = 46,       // RD
+    Lock                = 47,       // RD/WR
+    PunchL              = 48,       // RD/WR
+    PunchH              = 49        // RD/WR
+};
+
+class AX12
+{
+
+public:
+    AX12(DynamixelBus* pbus, ServoId = 1);
+
+    // returns the status of the servo (connected/not connected + errors)
+    StatusCode Ping();
+
+    // Sets toe goal position of the servo in degrees
+    StatusCode SetGoal(float degrees);
+
+    // determines if the servo is moving
+    bool IsMoving(void);
+
+    // gets the position of the servo in degrees
+    float GetPosition();
+
+    // gets the internal temperature of the servo
+    float GetTemperature(void);
+
+    // gets the servo power supply voltage
+    float GetSupplyVoltage(void);
+
+private :
+    ServoId _ID;
+    DynamixelBus* _pbus;
+};
+#endif