Provides an interface to an AX-12A servo. Requires the Dynamixel bus protocol library/
Fork of AX-12A by
Diff: AX12.h
- 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