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: RoboClaw StepperMotor mbed
Fork of Robot2016_2-0 by
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 AX12_WRITE_DEBUG 0 00030 //#define AX12_READ_DEBUG 0 00031 //#define AX12_TRIGGER_DEBUG 0 00032 //#define AX12_DEBUG 0 00033 00034 #define AX12_REG_ID 0x3 00035 #define AX12_REG_BAUD 0x4 00036 #define AX12_REG_CW_LIMIT 0x06 00037 #define AX12_REG_CCW_LIMIT 0x08 00038 #define AX12_REG_GOAL_POSITION 0x1E 00039 #define AX12_REG_MOVING_SPEED 0x20 00040 #define AX12_REG_VOLTS 0x2A 00041 #define AX12_REG_TEMP 0x2B 00042 #define AX12_REG_MOVING 0x2E 00043 #define AX12_REG_POSITION 0x24 00044 00045 #define AX12_MODE_POSITION 0 00046 #define AX12_MODE_ROTATION 1 00047 00048 #define AX12_CW 1 00049 #define AX12_CCW 0 00050 00051 #/** Servo control class, based on a PwmOut 00052 * 00053 * Example: 00054 * @code 00055 * #include "mbed.h" 00056 * #include "AX12.h" 00057 * 00058 * int main() { 00059 * 00060 * AX12 myax12 (p9, p10, 1); 00061 * 00062 * while (1) { 00063 * myax12.SetGoal(0); // go to 0 degrees 00064 * wait (2.0); 00065 * myax12.SetGoal(300); // go to 300 degrees 00066 * wait (2.0); 00067 * } 00068 * } 00069 * @endcode 00070 */ 00071 class AX12 { 00072 00073 public: 00074 00075 /** Create an AX12 servo object connected to the specified serial port, with the specified ID 00076 * 00077 * @param pin tx pin 00078 * @param pin rx pin 00079 * @param int ID, the Bus ID of the servo 1-255 00080 */ 00081 AX12(PinName tx, PinName rx, int ID, int baud=1000000); 00082 00083 /** Set the mode of the servo 00084 * @param mode 00085 * 0 = Positional, default 00086 * 1 = Continuous rotation 00087 */ 00088 int setMode(int mode); 00089 00090 /** Set baud rate of all attached servos 00091 * @param mode 00092 * 0x01 = 1,000,000 bps 00093 * 0x03 = 500,000 bps 00094 * 0x04 = 400,000 bps 00095 * 0x07 = 250,000 bps 00096 * 0x09 = 200,000 bps 00097 * 0x10 = 115,200 bps 00098 * 0x22 = 57,600 bps 00099 * 0x67 = 19,200 bps 00100 * 0xCF = 9,600 bp 00101 */ 00102 int setBaud(int baud); 00103 00104 00105 /** Set goal angle in integer degrees, in positional mode 00106 * 00107 * @param degrees 0-300 00108 * @param flags, defaults to 0 00109 * flags[0] = blocking, return when goal position reached 00110 * flags[1] = register, activate with a broadcast trigger 00111 * 00112 */ 00113 int setGoal(int degrees, int flags = 0); 00114 00115 /** Get goal angle (internal, not from the AX12) 00116 * 00117 */ 00118 00119 int getGoal(){return _goal;} 00120 00121 00122 /** Set the torque limit of the servo 00123 * 00124 * @param maxTorque, 0-1024 00125 */ 00126 int setMaxTorque(int maxTorque); 00127 00128 00129 /** Set the speed of the servo in continuous rotation mode 00130 * 00131 * @param speed, -1.0 to 1.0 00132 * -1.0 = full speed counter clock wise 00133 * 1.0 = full speed clock wise 00134 */ 00135 int setCRSpeed(float speed); 00136 00137 00138 /** Set the clockwise limit of the servo 00139 * 00140 * @param degrees, 0-300 00141 */ 00142 int setCWLimit(int degrees); 00143 00144 /** Set the counter-clockwise limit of the servo 00145 * 00146 * @param degrees, 0-300 00147 */ 00148 int setCCWLimit(int degrees); 00149 00150 // Change the ID 00151 00152 /** Change the ID of a servo 00153 * 00154 * @param CurentID 1-255 00155 * @param NewID 1-255 00156 * 00157 * If a servo ID is not know, the broadcast address of 0 can be used for CurrentID. 00158 * In this situation, only one servo should be connected to the bus 00159 */ 00160 int setID(int CurrentID, int NewID); 00161 00162 00163 /** Poll to see if the servo is moving 00164 * 00165 * @returns true is the servo is moving 00166 */ 00167 int isMoving(void); 00168 00169 /** Send the broadcast "trigger" command, to activate any outstanding registered commands 00170 */ 00171 void trigger(void); 00172 00173 /** Read the current angle of the servo 00174 * 00175 * @returns float in the range 0.0-300.0 00176 */ 00177 float getPosition(); 00178 00179 /** Read the temperature of the servo 00180 * 00181 * @returns float temperature 00182 */ 00183 float getTemp(void); 00184 00185 /** Read the supply voltage of the servo 00186 * 00187 * @returns float voltage 00188 */ 00189 float getVolts(void); 00190 00191 int read(int ID, int start, int length, char* data); 00192 int write(int ID, int start, int length, char* data, int flag=0); 00193 00194 private : 00195 00196 Serial _ax12; 00197 int _ID; 00198 int _baud; 00199 int _goal; 00200 00201 }; 00202 00203 #endif
Generated on Wed Jul 13 2022 04:42:26 by
1.7.2
