Programme d'utilisation servomotors MX12 V1

Committer:
R66Y
Date:
Fri May 19 14:32:14 2017 +0000
Revision:
0:80df663dd15e
programme pour utiliser les servomoteurs MX12.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
R66Y 0:80df663dd15e 1 /* mbed AX-12+ Servo Library
R66Y 0:80df663dd15e 2 *
R66Y 0:80df663dd15e 3 * Copyright (c) 2010, cstyles (http://mbed.org)
R66Y 0:80df663dd15e 4 *
R66Y 0:80df663dd15e 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
R66Y 0:80df663dd15e 6 * of this software and associated documentation files (the "Software"), to deal
R66Y 0:80df663dd15e 7 * in the Software without restriction, including without limitation the rights
R66Y 0:80df663dd15e 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
R66Y 0:80df663dd15e 9 * copies of the Software, and to permit persons to whom the Software is
R66Y 0:80df663dd15e 10 * furnished to do so, subject to the following conditions:
R66Y 0:80df663dd15e 11 *
R66Y 0:80df663dd15e 12 * The above copyright notice and this permission notice shall be included in
R66Y 0:80df663dd15e 13 * all copies or substantial portions of the Software.
R66Y 0:80df663dd15e 14 *
R66Y 0:80df663dd15e 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
R66Y 0:80df663dd15e 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
R66Y 0:80df663dd15e 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
R66Y 0:80df663dd15e 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
R66Y 0:80df663dd15e 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
R66Y 0:80df663dd15e 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
R66Y 0:80df663dd15e 21 * THE SOFTWARE.
R66Y 0:80df663dd15e 22 */
R66Y 0:80df663dd15e 23
R66Y 0:80df663dd15e 24 #ifndef MBED_AX12_H
R66Y 0:80df663dd15e 25 #define MBED_AX12_H
R66Y 0:80df663dd15e 26 #include "SerialHalfDuplex.h"
R66Y 0:80df663dd15e 27 #include "mbed.h"
R66Y 0:80df663dd15e 28
R66Y 0:80df663dd15e 29 //#define AX12_WRITE_DEBUG 0
R66Y 0:80df663dd15e 30 #define AX12_READ_DEBUG
R66Y 0:80df663dd15e 31 //#define AX12_TRIGGER_DEBUG 0
R66Y 0:80df663dd15e 32 #define AX12_DEBUG 0
R66Y 0:80df663dd15e 33
R66Y 0:80df663dd15e 34 /****** à utiliser pour le debug !! ******/
R66Y 0:80df663dd15e 35
R66Y 0:80df663dd15e 36 //#define AX12_DEBUG_WRITE 0
R66Y 0:80df663dd15e 37 //#define AX12_DEBUG_READ 0
R66Y 0:80df663dd15e 38
R66Y 0:80df663dd15e 39 /******************************************/
R66Y 0:80df663dd15e 40
R66Y 0:80df663dd15e 41
R66Y 0:80df663dd15e 42 #define AX12_REG_ID 0x03
R66Y 0:80df663dd15e 43 #define AX12_REG_BAUD 0x04
R66Y 0:80df663dd15e 44 #define AX12_REG_DELAY_TIME 0x05
R66Y 0:80df663dd15e 45 #define AX12_REG_CW_LIMIT 0x06
R66Y 0:80df663dd15e 46 #define AX12_REG_CCW_LIMIT 0x08
R66Y 0:80df663dd15e 47 #define AX12_REG_TEMP_MAX 0x0B
R66Y 0:80df663dd15e 48 #define AX12_REG_LOWEST_VOLTAGE 0x0C
R66Y 0:80df663dd15e 49 #define AX12_REG_HIGHEST_VOLTAGE 0x0D
R66Y 0:80df663dd15e 50 #define AX12_REG_MAX_TORQUE 0x0E
R66Y 0:80df663dd15e 51 #define AX12_REG_SATUS_RETURN 0x10
R66Y 0:80df663dd15e 52 #define AX12_REG_ALARM_LED 0x11
R66Y 0:80df663dd15e 53 #define AX12_REG_ALARM_SHUTDOWN 0x12
R66Y 0:80df663dd15e 54 #define AX12_REG_DOWN_CALIBRATION 0x14
R66Y 0:80df663dd15e 55 #define AX12_REG_UP_CALIBRATION 0x16
R66Y 0:80df663dd15e 56 #define AX12_REG_TORQUE_ENABLE 0x18
R66Y 0:80df663dd15e 57 #define AX12_REG_LED 0x19
R66Y 0:80df663dd15e 58 #define AX12_REG_CW_MARGIN 0x1A
R66Y 0:80df663dd15e 59 #define AX12_REG_CCW_MARGIN 0x1B
R66Y 0:80df663dd15e 60 #define AX12_REG_CW_SLOPE 0x1C
R66Y 0:80df663dd15e 61 #define AX12_REG_CCW_SLOPE 0x1D
R66Y 0:80df663dd15e 62 #define AX12_REG_GOAL_POSITION 0x1E
R66Y 0:80df663dd15e 63 #define AX12_REG_MOVING_SPEED 0x20
R66Y 0:80df663dd15e 64 #define AX12_REG_TORQUE_LIMIT 0x22
R66Y 0:80df663dd15e 65 #define AX12_REG_POSITION 0x24
R66Y 0:80df663dd15e 66 #define AX12_REG_PRESENT_SPEED 0x26
R66Y 0:80df663dd15e 67 #define AX12_REG_PRESENT_LOAD 0x28
R66Y 0:80df663dd15e 68 #define AX12_REG_VOLTS 0x2A
R66Y 0:80df663dd15e 69 #define AX12_REG_TEMP 0x2B
R66Y 0:80df663dd15e 70 #define AX12_REG_INSTRUCTION 0x2C
R66Y 0:80df663dd15e 71 #define AX12_REG_MOVING 0x2E
R66Y 0:80df663dd15e 72 #define AX12_REG_LOCK 0x2F
R66Y 0:80df663dd15e 73 #define AX12_REG_PUNCH 0x30
R66Y 0:80df663dd15e 74
R66Y 0:80df663dd15e 75
R66Y 0:80df663dd15e 76 #define AX12_MODE_POSITION 0
R66Y 0:80df663dd15e 77 #define AX12_MODE_ROTATION 1
R66Y 0:80df663dd15e 78
R66Y 0:80df663dd15e 79 #define AX12_CW 1
R66Y 0:80df663dd15e 80 #define AX12_CCW 0
R66Y 0:80df663dd15e 81
R66Y 0:80df663dd15e 82 //--- Instruction ---
R66Y 0:80df663dd15e 83 #define INST_PING 0x01
R66Y 0:80df663dd15e 84 #define INST_READ 0x02
R66Y 0:80df663dd15e 85 #define INST_WRITE 0x03
R66Y 0:80df663dd15e 86 #define INST_REG_WRITE 0x04
R66Y 0:80df663dd15e 87 #define INST_ACTION 0x05
R66Y 0:80df663dd15e 88 #define INST_RESET 0x06
R66Y 0:80df663dd15e 89 #define INST_DIGITAL_RESET 0x07
R66Y 0:80df663dd15e 90 #define INST_SYSTEM_READ 0x0C
R66Y 0:80df663dd15e 91 #define INST_SYSTEM_WRITE 0x0D
R66Y 0:80df663dd15e 92 #define INST_SYNC_WRITE 0x83
R66Y 0:80df663dd15e 93 #define INST_SYNC_REG_WRITE 0x84
R66Y 0:80df663dd15e 94
R66Y 0:80df663dd15e 95 #define DEFAULT_RETURN_PACKET_SIZE 6
R66Y 0:80df663dd15e 96
R66Y 0:80df663dd15e 97 #define BROADCASTING_ID 0xfe
R66Y 0:80df663dd15e 98
R66Y 0:80df663dd15e 99 /** Servo control class, based on a PwmOut
R66Y 0:80df663dd15e 100 *
R66Y 0:80df663dd15e 101 * Example:
R66Y 0:80df663dd15e 102 * @code
R66Y 0:80df663dd15e 103 * #include "mbed.h"
R66Y 0:80df663dd15e 104 * #include "AX12.h"
R66Y 0:80df663dd15e 105 *
R66Y 0:80df663dd15e 106 * int main() {
R66Y 0:80df663dd15e 107 *
R66Y 0:80df663dd15e 108 * AX12 myax12 (p9, p10, 1);
R66Y 0:80df663dd15e 109 *
R66Y 0:80df663dd15e 110 * while (1) {
R66Y 0:80df663dd15e 111 * myax12.SetGoal(0); // go to 0 degrees
R66Y 0:80df663dd15e 112 * wait (2.0);
R66Y 0:80df663dd15e 113 * myax12.SetGoal(300); // go to 300 degrees
R66Y 0:80df663dd15e 114 * wait (2.0);
R66Y 0:80df663dd15e 115 * }
R66Y 0:80df663dd15e 116 * }
R66Y 0:80df663dd15e 117 * @endcode
R66Y 0:80df663dd15e 118 */
R66Y 0:80df663dd15e 119 class AX12
R66Y 0:80df663dd15e 120 {
R66Y 0:80df663dd15e 121
R66Y 0:80df663dd15e 122 public:
R66Y 0:80df663dd15e 123
R66Y 0:80df663dd15e 124 /** Create an AX12 servo object connected to the specified serial port, with the specified ID
R66Y 0:80df663dd15e 125 *
R66Y 0:80df663dd15e 126 * @param pin tx pin
R66Y 0:80df663dd15e 127 * @param pin rx pin
R66Y 0:80df663dd15e 128 * @param int ID, the Bus ID of the servo 1-255
R66Y 0:80df663dd15e 129 */
R66Y 0:80df663dd15e 130 AX12(PinName tx, PinName rx, int ID, int baud=1000000);
R66Y 0:80df663dd15e 131
R66Y 0:80df663dd15e 132 /** Nouvelle fonction de commande de position du servomoteur avec sécurité d'arriver à la bonne position
R66Y 0:80df663dd15e 133 Si une erreur se produit et que le servo ne recoit vraiment rien cette fonction dispose d'une sortie en timeout error;
R66Y 0:80df663dd15e 134 */
R66Y 0:80df663dd15e 135 int Set_Secure_Goal(int degres);
R66Y 0:80df663dd15e 136
R66Y 0:80df663dd15e 137 /** Retourne le temps d'attente avant l'envoi de la trame de retour par l'actionneur ( en micro seconde )
R66Y 0:80df663dd15e 138 */
R66Y 0:80df663dd15e 139 int Get_Return_Delay_Time(void);
R66Y 0:80df663dd15e 140
R66Y 0:80df663dd15e 141
R66Y 0:80df663dd15e 142 /** Retourne la vitesse de communication de l'actionneur ( en Bits/seconde )
R66Y 0:80df663dd15e 143 */
R66Y 0:80df663dd15e 144 int Get_Baud_Rate(void);
R66Y 0:80df663dd15e 145
R66Y 0:80df663dd15e 146
R66Y 0:80df663dd15e 147 /** Reglage du courant minimum necessaire au bon fonctionnement de l'actionneur
R66Y 0:80df663dd15e 148 // minimum >> Ox000 >> decimal 0
R66Y 0:80df663dd15e 149 // maximum >> 0x3FF >> decimal 1023
R66Y 0:80df663dd15e 150 // deflaut >> 0x20 >> decimal 32
R66Y 0:80df663dd15e 151 */
R66Y 0:80df663dd15e 152 int Set_Punch(int punch);
R66Y 0:80df663dd15e 153
R66Y 0:80df663dd15e 154
R66Y 0:80df663dd15e 155 /** Retourne le courant minimum au fonctionnement de l'actionneur
R66Y 0:80df663dd15e 156 */
R66Y 0:80df663dd15e 157 int Get_Punch (void);
R66Y 0:80df663dd15e 158
R66Y 0:80df663dd15e 159
R66Y 0:80df663dd15e 160 /** Retourne l'ampleur de la charge sur l'actionneur
R66Y 0:80df663dd15e 161 */
R66Y 0:80df663dd15e 162 int Get_Load_Value (void);
R66Y 0:80df663dd15e 163
R66Y 0:80df663dd15e 164 void read_all_info(unsigned char, unsigned char);
R66Y 0:80df663dd15e 165
R66Y 0:80df663dd15e 166 /** Reset
R66Y 0:80df663dd15e 167 */
R66Y 0:80df663dd15e 168 int Reset(int);
R66Y 0:80df663dd15e 169
R66Y 0:80df663dd15e 170 /** Retourne la direction de la charge sur l'actionneur
R66Y 0:80df663dd15e 171 */
R66Y 0:80df663dd15e 172 int Get_Load_Direction (void);
R66Y 0:80df663dd15e 173
R66Y 0:80df663dd15e 174
R66Y 0:80df663dd15e 175 /** Retourne la vitesse angulaire actuelle de l'actionneur
R66Y 0:80df663dd15e 176 */
R66Y 0:80df663dd15e 177 int Get_Present_Speed (void);
R66Y 0:80df663dd15e 178
R66Y 0:80df663dd15e 179
R66Y 0:80df663dd15e 180 /** Retourne la valeur en degres du registre CCW angle limit qui est l'angle limite maximum de l'actionneur
R66Y 0:80df663dd15e 181 */
R66Y 0:80df663dd15e 182 int Get_CCW_Angle_Limit (void);
R66Y 0:80df663dd15e 183
R66Y 0:80df663dd15e 184
R66Y 0:80df663dd15e 185 /** Retourne la valeur en degres du registre CW angle limit qui est l'angle limite minimum de l'actionneur
R66Y 0:80df663dd15e 186 */
R66Y 0:80df663dd15e 187 int Get_CW_Angle_Limit (void);
R66Y 0:80df663dd15e 188
R66Y 0:80df663dd15e 189
R66Y 0:80df663dd15e 190 /** Retourne la valeur du registre Torque Enable
R66Y 0:80df663dd15e 191 */
R66Y 0:80df663dd15e 192 int Get_Torque_Enable(void);
R66Y 0:80df663dd15e 193
R66Y 0:80df663dd15e 194
R66Y 0:80df663dd15e 195 /**
R66Y 0:80df663dd15e 196 1 >>>
R66Y 0:80df663dd15e 197 0 >>>
R66Y 0:80df663dd15e 198 */
R66Y 0:80df663dd15e 199 int Set_Torque_Enable(int etat);
R66Y 0:80df663dd15e 200
R66Y 0:80df663dd15e 201
R66Y 0:80df663dd15e 202 /** Retourne les données de compensation des différences entre les potentiomètres
R66Y 0:80df663dd15e 203 utilisés dans l'AX12 (Up) ????????
R66Y 0:80df663dd15e 204 */
R66Y 0:80df663dd15e 205 int Get_Up_Calibration (void);
R66Y 0:80df663dd15e 206
R66Y 0:80df663dd15e 207
R66Y 0:80df663dd15e 208 /** Retourne les données de compensation des différences entre les potentiomètres
R66Y 0:80df663dd15e 209 utilisés dans l'AX12 (Dowm) ????????
R66Y 0:80df663dd15e 210 */
R66Y 0:80df663dd15e 211 int Get_Down_Calibration(void);
R66Y 0:80df663dd15e 212
R66Y 0:80df663dd15e 213
R66Y 0:80df663dd15e 214 /** Retourne l'ID de l'AX_12 avec lequel on dialogue
R66Y 0:80df663dd15e 215 utile seulement dans le cas d'un broadcast ID
R66Y 0:80df663dd15e 216 */
R66Y 0:80df663dd15e 217 int Get_ID(void);
R66Y 0:80df663dd15e 218
R66Y 0:80df663dd15e 219
R66Y 0:80df663dd15e 220 /** Reglage du couple maximum de l'actionneur
R66Y 0:80df663dd15e 221 // minimum >> Ox000 >> decimal 0
R66Y 0:80df663dd15e 222 // maximum >> 0x3FF >> decimal 1023
R66Y 0:80df663dd15e 223 // deflaut >> >> decimal
R66Y 0:80df663dd15e 224 */
R66Y 0:80df663dd15e 225 int Set_Max_Torque(int torque);
R66Y 0:80df663dd15e 226
R66Y 0:80df663dd15e 227
R66Y 0:80df663dd15e 228 /** Reglage de la desactivation des actionneurs si une erreur le concernant se produit
R66Y 0:80df663dd15e 229 Bit Function
R66Y 0:80df663dd15e 230 Bit 7 0
R66Y 0:80df663dd15e 231 Bit 6 If set to 1, torque off when an Instruction Error occurs
R66Y 0:80df663dd15e 232 Bit 5 If set to 1, torque off when an Overload Error occurs
R66Y 0:80df663dd15e 233 Bit 4 If set to 1, torque off when a Checksum Error occurs
R66Y 0:80df663dd15e 234 Bit 3 If set to 1, torque off when a Range Error occurs
R66Y 0:80df663dd15e 235 Bit 2 If set to 1, torque off when an Overheating Error occurs
R66Y 0:80df663dd15e 236 Bit 1 If set to 1, torque off when an Angle Limit Error occurs
R66Y 0:80df663dd15e 237 Bit 0 If set to 1, torque off when an Input Voltage Error occurs
R66Y 0:80df663dd15e 238 */
R66Y 0:80df663dd15e 239 int Set_Alarm_Shutdown(int valeur);
R66Y 0:80df663dd15e 240
R66Y 0:80df663dd15e 241
R66Y 0:80df663dd15e 242 /** Reglage de l'activation de l'alarme
R66Y 0:80df663dd15e 243 Bit Function
R66Y 0:80df663dd15e 244 Bit 7 0
R66Y 0:80df663dd15e 245 Bit 6 If set to 1, the LED blinks when an Instruction Error occurs
R66Y 0:80df663dd15e 246 Bit 5 If set to 1, the LED blinks when an Overload Error occurs
R66Y 0:80df663dd15e 247 Bit 4 If set to 1, the LED blinks when a Checksum Error occurs
R66Y 0:80df663dd15e 248 Bit 3 If set to 1, the LED blinks when a Range Error occurs
R66Y 0:80df663dd15e 249 Bit 2 If set to 1, the LED blinks when an Overheating Error occurs
R66Y 0:80df663dd15e 250 Bit 1 If set to 1, the LED blinks when an Angle Limit Error occurs
R66Y 0:80df663dd15e 251 Bit 0 If set to 1, the LED blinks when an Input Voltage Error occurs
R66Y 0:80df663dd15e 252 */
R66Y 0:80df663dd15e 253 int Set_Alarm_LED(int valeur);
R66Y 0:80df663dd15e 254
R66Y 0:80df663dd15e 255
R66Y 0:80df663dd15e 256 /** Reglage de la réponse à une instruction
R66Y 0:80df663dd15e 257 * @param mode
R66Y 0:80df663dd15e 258 * 0 >> ne repond a aucune instructions
R66Y 0:80df663dd15e 259 * 1 >> repond seulement aux instructions READ_DATA
R66Y 0:80df663dd15e 260 * 2 >> repond à toutes les instructions
R66Y 0:80df663dd15e 261 */
R66Y 0:80df663dd15e 262 int Set_Status_Return_Level(int etat);
R66Y 0:80df663dd15e 263
R66Y 0:80df663dd15e 264
R66Y 0:80df663dd15e 265 /** Reglage de la tension minimale
R66Y 0:80df663dd15e 266 * @param mode
R66Y 0:80df663dd15e 267 * minimum >> 0x32 >> decimal 50
R66Y 0:80df663dd15e 268 * maximum >> 0xFA >> decimal 250
R66Y 0:80df663dd15e 269 * deflaut >> 0x3C >> decimal 60
R66Y 0:80df663dd15e 270 */
R66Y 0:80df663dd15e 271 int Set_Lowest_Voltage(int val_lowest_voltage);
R66Y 0:80df663dd15e 272
R66Y 0:80df663dd15e 273
R66Y 0:80df663dd15e 274 /** Reglage de la tension maximale
R66Y 0:80df663dd15e 275 * @param mode
R66Y 0:80df663dd15e 276 * minimum >> Ox32 >> decimal 50
R66Y 0:80df663dd15e 277 * maximum >> 0xFA >> decimal 250
R66Y 0:80df663dd15e 278 * deflaut >> 0xBE >> decimal 190
R66Y 0:80df663dd15e 279 */
R66Y 0:80df663dd15e 280 int Set_Highest_Voltage(int val_highest_voltage);
R66Y 0:80df663dd15e 281
R66Y 0:80df663dd15e 282
R66Y 0:80df663dd15e 283 // Reglage du return time delay EN MICRO SECONDE 2uSec * val_delay_time
R66Y 0:80df663dd15e 284 // minimum >> 0 us
R66Y 0:80df663dd15e 285 // maximum >> 508 us
R66Y 0:80df663dd15e 286 // deflaut >> 125 us
R66Y 0:80df663dd15e 287 int Set_Delay_Time (int val_delay_time );
R66Y 0:80df663dd15e 288
R66Y 0:80df663dd15e 289
R66Y 0:80df663dd15e 290 /** Set Highest Limit Temperature
R66Y 0:80df663dd15e 291 * @param mode
R66Y 0:80df663dd15e 292 * minimum >> Ox00 >> decimal 0
R66Y 0:80df663dd15e 293 * maximum >> 0x96 >> decimal 150
R66Y 0:80df663dd15e 294 */
R66Y 0:80df663dd15e 295 int Set_Temperature_Max (int val_temperature );
R66Y 0:80df663dd15e 296
R66Y 0:80df663dd15e 297
R66Y 0:80df663dd15e 298
R66Y 0:80df663dd15e 299 /** Set the state of LED
R66Y 0:80df663dd15e 300 * @param mode
R66Y 0:80df663dd15e 301 * 0 = off, default
R66Y 0:80df663dd15e 302 * 1 = on
R66Y 0:80df663dd15e 303 */
R66Y 0:80df663dd15e 304 int Set_Etat_LED(int etat);
R66Y 0:80df663dd15e 305
R66Y 0:80df663dd15e 306
R66Y 0:80df663dd15e 307
R66Y 0:80df663dd15e 308 /** Set the mode of the servo
R66Y 0:80df663dd15e 309 * @param mode
R66Y 0:80df663dd15e 310 * 0 = Positional, default
R66Y 0:80df663dd15e 311 * 1 = Continuous rotation
R66Y 0:80df663dd15e 312 */
R66Y 0:80df663dd15e 313 int Set_Mode(int mode);
R66Y 0:80df663dd15e 314
R66Y 0:80df663dd15e 315 /** Set baud rate of all attached servos
R66Y 0:80df663dd15e 316 * @param mode
R66Y 0:80df663dd15e 317 * 0x01 = 1,000,000 bps
R66Y 0:80df663dd15e 318 * 0x03 = 500,000 bps
R66Y 0:80df663dd15e 319 * 0x04 = 400,000 bps
R66Y 0:80df663dd15e 320 * 0x07 = 250,000 bps
R66Y 0:80df663dd15e 321 * 0x09 = 200,000 bps
R66Y 0:80df663dd15e 322 * 0x10 = 115,200 bps
R66Y 0:80df663dd15e 323 * 0x22 = 57,600 bps
R66Y 0:80df663dd15e 324 * 0x67 = 19,200 bps
R66Y 0:80df663dd15e 325 * 0xCF = 9,600 bp
R66Y 0:80df663dd15e 326 */
R66Y 0:80df663dd15e 327 int Set_Baud(int baud);
R66Y 0:80df663dd15e 328
R66Y 0:80df663dd15e 329
R66Y 0:80df663dd15e 330 /** Set goal angle in integer degrees, in positional mode
R66Y 0:80df663dd15e 331 *
R66Y 0:80df663dd15e 332 * @param degrees 0-300
R66Y 0:80df663dd15e 333 * @param flags, defaults to 0
R66Y 0:80df663dd15e 334 * flags[0] = blocking, return when goal position reached
R66Y 0:80df663dd15e 335 * flags[1] = register, activate with a broadcast trigger
R66Y 0:80df663dd15e 336 *
R66Y 0:80df663dd15e 337 */
R66Y 0:80df663dd15e 338 int Set_Goal(int degrees, int flags = 0);
R66Y 0:80df663dd15e 339
R66Y 0:80df663dd15e 340 int Set_Goal_speed(int degrees, int flags = 0);
R66Y 0:80df663dd15e 341
R66Y 0:80df663dd15e 342 /** Set the speed of the servo in continuous rotation mode
R66Y 0:80df663dd15e 343 *
R66Y 0:80df663dd15e 344 * @param speed, -1.0 to 1.0
R66Y 0:80df663dd15e 345 * -1.0 = full speed counter clock wise
R66Y 0:80df663dd15e 346 * 1.0 = full speed clock wise
R66Y 0:80df663dd15e 347 */
R66Y 0:80df663dd15e 348 int Set_CR_Speed(float speed);
R66Y 0:80df663dd15e 349
R66Y 0:80df663dd15e 350
R66Y 0:80df663dd15e 351 /** Permet de définir l'angle limite minimum de l'actionneur ( prend une valeur d'entrée en degres )
R66Y 0:80df663dd15e 352 // minimum >> 0°
R66Y 0:80df663dd15e 353 // maximum >> 300°
R66Y 0:80df663dd15e 354 // deflaut >> 0°
R66Y 0:80df663dd15e 355 */
R66Y 0:80df663dd15e 356 int Set_CW_Angle_Limit(int degrees);
R66Y 0:80df663dd15e 357
R66Y 0:80df663dd15e 358 /** Permet de définir l'angle limite maximum de l'actionneur ( prend une valeur d'entrée en degres )
R66Y 0:80df663dd15e 359 // minimum >> 0°
R66Y 0:80df663dd15e 360 // maximum >> 300°
R66Y 0:80df663dd15e 361 // deflaut >> 300°
R66Y 0:80df663dd15e 362 */
R66Y 0:80df663dd15e 363 int Set_CCW_Angle_Limit(int degrees);
R66Y 0:80df663dd15e 364
R66Y 0:80df663dd15e 365 // Change the ID
R66Y 0:80df663dd15e 366
R66Y 0:80df663dd15e 367 /** Change the ID of a servo
R66Y 0:80df663dd15e 368 *
R66Y 0:80df663dd15e 369 * @param CurentID 1-255
R66Y 0:80df663dd15e 370 * @param NewID 1-255
R66Y 0:80df663dd15e 371 *
R66Y 0:80df663dd15e 372 * If a servo ID is not know, the broadcast address of 0 can be used for CurrentID.
R66Y 0:80df663dd15e 373 * In this situation, only one servo should be connected to the bus
R66Y 0:80df663dd15e 374 */
R66Y 0:80df663dd15e 375 int Set_ID(int CurrentID, int NewID);
R66Y 0:80df663dd15e 376
R66Y 0:80df663dd15e 377
R66Y 0:80df663dd15e 378 /** Poll to see if the servo is moving
R66Y 0:80df663dd15e 379 *
R66Y 0:80df663dd15e 380 * @returns true is the servo is moving
R66Y 0:80df663dd15e 381 */
R66Y 0:80df663dd15e 382 int isMoving(void);
R66Y 0:80df663dd15e 383
R66Y 0:80df663dd15e 384 /** Send the broadcast "trigger" command, to activate any outstanding registered commands
R66Y 0:80df663dd15e 385 */
R66Y 0:80df663dd15e 386 void trigger(void);
R66Y 0:80df663dd15e 387
R66Y 0:80df663dd15e 388 /** Send the "reset" command, to activate any outstanding registered commands
R66Y 0:80df663dd15e 389 */
R66Y 0:80df663dd15e 390 void reset();
R66Y 0:80df663dd15e 391
R66Y 0:80df663dd15e 392 /** Read the current angle of the servo
R66Y 0:80df663dd15e 393 *
R66Y 0:80df663dd15e 394 * @returns float in the range 0.0-300.0
R66Y 0:80df663dd15e 395 */
R66Y 0:80df663dd15e 396 float Get_Position();
R66Y 0:80df663dd15e 397
R66Y 0:80df663dd15e 398 /** Read the temperature of the servo
R66Y 0:80df663dd15e 399 *
R66Y 0:80df663dd15e 400 * @returns float temperature
R66Y 0:80df663dd15e 401 */
R66Y 0:80df663dd15e 402 float Get_Temp(void);
R66Y 0:80df663dd15e 403
R66Y 0:80df663dd15e 404 /** Read the supply voltage of the servo
R66Y 0:80df663dd15e 405 *
R66Y 0:80df663dd15e 406 * @returns float voltage
R66Y 0:80df663dd15e 407 */
R66Y 0:80df663dd15e 408 float Get_Volts(void);
R66Y 0:80df663dd15e 409
R66Y 0:80df663dd15e 410 // Lecture du couple maximum ( retourne la valeur du registre Max Torque de l'AX12 )
R66Y 0:80df663dd15e 411 int Get_Max_Torque (void);
R66Y 0:80df663dd15e 412
R66Y 0:80df663dd15e 413
R66Y 0:80df663dd15e 414 int read(int ID, int start, int length, char* data);
R66Y 0:80df663dd15e 415 int write(int ID, int start, int length, char* data, int flag=0);
R66Y 0:80df663dd15e 416 void multiple_goal_and_speed(int number_ax12,char* tab);
R66Y 0:80df663dd15e 417 float read_and_test(float angle,char* Tab);
R66Y 0:80df663dd15e 418
R66Y 0:80df663dd15e 419 private :
R66Y 0:80df663dd15e 420
R66Y 0:80df663dd15e 421 SerialHalfDuplex _ax12;
R66Y 0:80df663dd15e 422 int _ID;
R66Y 0:80df663dd15e 423 int _baud;
R66Y 0:80df663dd15e 424
R66Y 0:80df663dd15e 425
R66Y 0:80df663dd15e 426 };
R66Y 0:80df663dd15e 427
R66Y 0:80df663dd15e 428 #endif