code de la carte à tout faire / carte strat

Dependencies:   mbed

Committer:
ClementBreteau
Date:
Wed May 10 09:10:26 2017 +0000
Revision:
0:76bc3ed27822
pour gatien le 10 5 2017

Who changed what in which revision?

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