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.
Dependencies: mbed
AX12.h
00001 /* mbed AX-12+ Servo Library 00002 * 00003 * Copyright (c) 2010, cstyles (http://mbed.org) 00004 * 00005 * Permission is hereby granted, free of charge, to any person obtaining a copy 00006 * of this software and associated documentation files (the "Software"), to deal 00007 * in the Software without restriction, including without limitation the rights 00008 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00009 * copies of the Software, and to permit persons to whom the Software is 00010 * furnished to do so, subject to the following conditions: 00011 * 00012 * The above copyright notice and this permission notice shall be included in 00013 * all copies or substantial portions of the Software. 00014 * 00015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00018 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00020 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00021 * THE SOFTWARE. 00022 */ 00023 00024 #ifndef MBED_AX12_H 00025 #define MBED_AX12_H 00026 00027 #include "mbed.h" 00028 00029 #define abs(x) (x<0?-x:x) 00030 00031 //#define AX12_WRITE_DEBUG 0 00032 //#define AX12_READ_DEBUG 0 00033 //#define AX12_TRIGGER_DEBUG 0 00034 //#define AX12_DEBUG 00035 00036 #define AX12_REG_ID 0x3 00037 #define AX12_REG_BAUD 0x4 00038 #define AX12_REG_CW_LIMIT 0x06 00039 #define AX12_REG_CCW_LIMIT 0x08 00040 #define AX12_REG_GOAL_POSITION 0x1E 00041 #define AX12_REG_MOVING_SPEED 0x20 00042 #define AX12_REG_VOLTS 0x2A 00043 #define AX12_REG_TEMP 0x2B 00044 #define AX12_REG_MOVING 0x2E 00045 #define AX12_REG_POSITION 0x24 00046 00047 #define AX12_MODE_POSITION 0 00048 #define AX12_MODE_ROTATION 1 00049 00050 #define AX12_CW 1 00051 #define AX12_CCW 0 00052 00053 #/** Servo control class, based on a PwmOut 00054 * 00055 * Example: 00056 * @code 00057 * #include "mbed.h" 00058 * #include "AX12.h" 00059 * 00060 * int main() { 00061 * 00062 * AX12 myax12 (p9, p10, 1); 00063 * 00064 * while (1) { 00065 * myax12.SetGoal(0); // go to 0 degrees 00066 * wait (2.0); 00067 * myax12.SetGoal(300); // go to 300 degrees 00068 * wait (2.0); 00069 * } 00070 * } 00071 * @endcode 00072 */ 00073 class AX12 { 00074 00075 public: 00076 00077 /** Create an AX12 servo object connected to the specified serial port, with the specified ID 00078 * 00079 * @param pin tx pin 00080 * @param pin rx pin 00081 * @param int ID, the Bus ID of the servo 1-255 00082 */ 00083 AX12(PinName tx, PinName rx, int ID, int baud=1000000); 00084 00085 /** Set the mode of the servo 00086 * @param mode 00087 * 0 = Positional, default 00088 * 1 = Continuous rotation 00089 */ 00090 int setMode(int mode); 00091 00092 /** Set baud rate of all attached servos 00093 * @param mode 00094 * 0x01 = 1,000,000 bps 00095 * 0x03 = 500,000 bps 00096 * 0x04 = 400,000 bps 00097 * 0x07 = 250,000 bps 00098 * 0x09 = 200,000 bps 00099 * 0x10 = 115,200 bps 00100 * 0x22 = 57,600 bps 00101 * 0x67 = 19,200 bps 00102 * 0xCF = 9,600 bp 00103 */ 00104 int setBaud(int baud); 00105 00106 00107 /** Set goal angle in integer degrees, in positional mode 00108 * 00109 * @param degrees 0-300 00110 * @param flags, defaults to 0 00111 * flags[0] = blocking, return when goal position reached 00112 * flags[1] = register, activate with a broadcast trigger 00113 * 00114 */ 00115 int setGoal(int degrees, int flags = 0); 00116 00117 /** Get goal angle (internal, not from the AX12) 00118 * 00119 */ 00120 00121 int getGoal(){return _goal;} 00122 00123 00124 /** Set the torque limit of the servo 00125 * 00126 * @param maxTorque, 0-1024 00127 */ 00128 int setMaxTorque(int maxTorque); 00129 00130 00131 /** Set the speed of the servo in continuous rotation mode 00132 * 00133 * @param speed, -1.0 to 1.0 00134 * -1.0 = full speed counter clock wise 00135 * 1.0 = full speed clock wise 00136 */ 00137 int setCRSpeed(float speed); 00138 00139 00140 /** Set the clockwise limit of the servo 00141 * 00142 * @param degrees, 0-300 00143 */ 00144 int setCWLimit(int degrees); 00145 00146 /** Set the counter-clockwise limit of the servo 00147 * 00148 * @param degrees, 0-300 00149 */ 00150 int setCCWLimit(int degrees); 00151 00152 // Change the ID 00153 00154 /** Change the ID of a servo 00155 * 00156 * @param CurentID 1-255 00157 * @param NewID 1-255 00158 * 00159 * If a servo ID is not know, the broadcast address of 0 can be used for CurrentID. 00160 * In this situation, only one servo should be connected to the bus 00161 */ 00162 int setID(int CurrentID, int NewID); 00163 00164 00165 /** Poll to see if the servo is moving 00166 * 00167 * @returns true is the servo is moving 00168 */ 00169 int isMoving(void); 00170 00171 /** Send the broadcast "trigger" command, to activate any outstanding registered commands 00172 */ 00173 void trigger(void); 00174 00175 /** Read the current angle of the servo 00176 * 00177 * @returns float in the range 0.0-300.0 00178 */ 00179 float getPosition(); 00180 00181 /** Read the temperature of the servo 00182 * 00183 * @returns float temperature 00184 */ 00185 float getTemp(void); 00186 00187 /** Read the supply voltage of the servo 00188 * 00189 * @returns float voltage 00190 */ 00191 float getVolts(void); 00192 00193 int read(int ID, int start, int length, char* data); 00194 int write(int ID, int start, int length, char* data, int flag=0); 00195 00196 private : 00197 00198 Serial _ax12; 00199 int _ID; 00200 int _baud; 00201 int _goal; 00202 00203 }; 00204 00205 #endif
Generated on Wed Jul 13 2022 04:59:28 by
1.7.2

