Fish Feeder
Fork of AX12 by
Diff: AX12.h
- Revision:
- 1:93ad80f5fde7
- Parent:
- 0:be51952765ec
- Child:
- 2:5ea99c37a2d7
diff -r be51952765ec -r 93ad80f5fde7 AX12.h --- a/AX12.h Thu Jun 03 14:22:25 2010 +0000 +++ b/AX12.h Wed Mar 30 16:08:02 2011 +0000 @@ -47,49 +47,116 @@ #define AX12_CW 1 #define AX12_CCW 0 +/** Servo control class, based on a PwmOut + * + * Example: + * @code + * #include "mbed.h" + * #include "AX12.h" + * + * int main() { + * + * AX12 myax12 (p9, p10, 1); + * + * while (1) { + * myax12.SetGoal(0); // go to 0 degrees + * wait (2.0); + * myax12.SetGoal(300); // go to 300 degrees + * wait (2.0); + * } + * } + * @endcode + */ class AX12 { public: - // define which pins are used, and the ID of this instance - // Mutiple AX12's can share the same pins. + /** Create an AX12 servo object connected to the specified serial port, with the specified ID + * + * @param pin tx pin + * @param pin rx pin + * @param int ID, the Bus ID of the servo 1-255 + */ AX12(PinName tx, PinName rx, int ID); - // methods for writing and reading registers - int read(int ID, int start, int length, char* data); - int write(int ID, int start, int length, char* data, int flag=0); + /** Set the mode of the servo + * @param mode + * 0 = Positional, default + * 1 = Continuous rotation + */ + int SetMode(int mode); - // set goal angle in integer degrees - // flags[0] = blocking (only returns when goal reached - // flags[1] = register. Requires broadcast trigger to activate + /** 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(int degrees, int flags = 0); - // Mode = 0, positional - // Mode = 1, continuous rotation - int SetMode(int mode); - // Speed is -1.0 (CCW) to 1.0 (CW) + /** 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 + */ int SetCRSpeed(float speed); - // set these in degrees, CCW limit is 300 - // If both are set to zero, we are continuous rotation + + /** Set the clockwise limit of the servo + * + * @param degrees, 0-300 + */ int SetCWLimit(int degrees); + + /** Set the counter-clockwise limit of the servo + * + * @param degrees, 0-300 + */ int SetCCWLimit(int degrees); // Change the ID + + /** Change the ID of a servo + * + * @param CurentID 1-255 + * @param NewID 1-255 + * + * If a servo ID is not know, the broadcast address of 0 can be used for CurrentID. + * In this situation, only one servo should be connected to the bus + */ int SetID(int CurrentID, int NewID); - // returns true if the motor is in motion + + /** Poll to see if the servo is moving + * + * @returns true is the servo is moving + */ int isMoving(void); - // broadcast to trigger registered goals + /** Send the broadcast "trigger" command, to activate any outstanding registered commands + */ void trigger(void); - // Get current angle, only valid 0-300 + /** Read the current angle of the servo + * + * @returns float in the range 0.0-300.0 + */ float GetPosition(); - // In volts and ^C + /** Read the temperature of the servo + * + * @returns float temperature + */ float GetTemp(void); + + /** Read the supply voltage of the servo + * + * @returns float voltage + */ float GetVolts(void); private : @@ -97,6 +164,9 @@ SerialHalfDuplex _ax12; int _ID; + int read(int ID, int start, int length, char* data); + int write(int ID, int start, int length, char* data, int flag=0); + }; #endif