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.
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 1 00030 #define AX12_READ_DEBUG 1 00031 #define AX12_TRIGGER_DEBUG 1 00032 #define AX12_DEBUG 1 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 00116 /** Set the speed of the servo in continuous rotation mode 00117 * 00118 * @param speed, -1.0 to 1.0 00119 * -1.0 = full speed counter clock wise 00120 * 1.0 = full speed clock wise 00121 */ 00122 int SetCRSpeed(float speed); 00123 00124 00125 /** Set the clockwise limit of the servo 00126 * 00127 * @param degrees, 0-300 00128 */ 00129 int SetCWLimit(int degrees); 00130 00131 /** Set the counter-clockwise limit of the servo 00132 * 00133 * @param degrees, 0-300 00134 */ 00135 int SetCCWLimit(int degrees); 00136 00137 // Change the ID 00138 00139 /** Change the ID of a servo 00140 * 00141 * @param CurentID 1-255 00142 * @param NewID 1-255 00143 * 00144 * If a servo ID is not know, the broadcast address of 0 can be used for CurrentID. 00145 * In this situation, only one servo should be connected to the bus 00146 */ 00147 int SetID(int CurrentID, int NewID); 00148 00149 00150 /** Poll to see if the servo is moving 00151 * 00152 * @returns true is the servo is moving 00153 */ 00154 int isMoving(void); 00155 00156 /** Send the broadcast "trigger" command, to activate any outstanding registered commands 00157 */ 00158 void trigger(void); 00159 00160 /** Read the current angle of the servo 00161 * 00162 * @returns float in the range 0.0-300.0 00163 */ 00164 float GetPosition(); 00165 00166 /** Read the temperature of the servo 00167 * 00168 * @returns float temperature 00169 */ 00170 float GetTemp(void); 00171 00172 /** Read the supply voltage of the servo 00173 * 00174 * @returns float voltage 00175 */ 00176 float GetVolts(void); 00177 00178 int read(int ID, int start, int length, char* data); 00179 int write(int ID, int start, int length, char* data, int flag=0); 00180 00181 private : 00182 00183 SerialHalfDuplex _ax12; 00184 int _ID; 00185 int _baud; 00186 00187 00188 }; 00189 00190 #endif
Generated on Tue Jul 12 2022 14:23:24 by
