Rhino Reimburse / Mbed 2 deprecated Dynamixel_XL320

Dependencies:   mbed

Fork of XL320_Test by Rhino Reimburse

Committer:
mfajaradityo
Date:
Sun Feb 28 14:48:03 2016 +0000
Revision:
4:2df002cf5f6c
Parent:
3:89bed7a6d852
Benerin deskripsi repository yang sebelumnya

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfajaradityo 0:2071f8e463dd 1 #include "XL320_MFA.h"
mfajaradityo 0:2071f8e463dd 2
mfajaradityo 0:2071f8e463dd 3 XL320::XL320(uint32_t baudrate, PinName tx, PinName rx, PinName dirpin): sXL320(tx, rx), dPin(dirpin)
mfajaradityo 0:2071f8e463dd 4 {
mfajaradityo 0:2071f8e463dd 5 dPin=0;
mfajaradityo 0:2071f8e463dd 6 sXL320.baud(baudrate);
mfajaradityo 0:2071f8e463dd 7 pc.baud(115200);
mfajaradityo 0:2071f8e463dd 8
mfajaradityo 0:2071f8e463dd 9 //Initialize header
mfajaradityo 0:2071f8e463dd 10 iPacket[0] = 0xff; //header
mfajaradityo 0:2071f8e463dd 11 iPacket[1] = 0xff; //header
mfajaradityo 0:2071f8e463dd 12 iPacket[2] = 0xfd; //header
mfajaradityo 0:2071f8e463dd 13 iPacket[3] = 0x00; //reserved
mfajaradityo 0:2071f8e463dd 14 }
mfajaradityo 0:2071f8e463dd 15
mfajaradityo 0:2071f8e463dd 16 ////// EEPROM ACCESS METHODS //////
mfajaradityo 0:2071f8e463dd 17
mfajaradityo 0:2071f8e463dd 18 /***** XL320 Network Parameter *****/
mfajaradityo 0:2071f8e463dd 19 void XL320::SetID(uint8_t id,uint8_t idnew)
mfajaradityo 0:2071f8e463dd 20 {
mfajaradityo 2:0ec2dce7c5f8 21 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 22 pc.printf("Set ID (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 23 #endif
mfajaradityo 0:2071f8e463dd 24 targetID = id;
mfajaradityo 0:2071f8e463dd 25 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 26 parameter[0] = idnew;
mfajaradityo 0:2071f8e463dd 27
mfajaradityo 0:2071f8e463dd 28 iWrite(1, XL_ID, parameter);
mfajaradityo 0:2071f8e463dd 29 sendIPacket();
mfajaradityo 0:2071f8e463dd 30
mfajaradityo 0:2071f8e463dd 31 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 32 getRPacket();
mfajaradityo 0:2071f8e463dd 33
mfajaradityo 0:2071f8e463dd 34 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 35 }
mfajaradityo 0:2071f8e463dd 36
mfajaradityo 0:2071f8e463dd 37 uint8_t XL320::GetID(uint8_t id)
mfajaradityo 0:2071f8e463dd 38 {
mfajaradityo 2:0ec2dce7c5f8 39 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 40 pc.printf("Get ID (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 41 #endif
mfajaradityo 0:2071f8e463dd 42 targetID = id;
mfajaradityo 0:2071f8e463dd 43 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 44
mfajaradityo 0:2071f8e463dd 45 iRead(1, XL_ID);
mfajaradityo 0:2071f8e463dd 46 sendIPacket();
mfajaradityo 0:2071f8e463dd 47
mfajaradityo 0:2071f8e463dd 48 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 49 getRPacket();
mfajaradityo 0:2071f8e463dd 50
mfajaradityo 0:2071f8e463dd 51 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 52
mfajaradityo 0:2071f8e463dd 53 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 54 {
mfajaradityo 0:2071f8e463dd 55 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 56 return rPacket[9]; //return tergeted servo ID
mfajaradityo 0:2071f8e463dd 57
mfajaradityo 0:2071f8e463dd 58 default : //error occurred
mfajaradityo 0:2071f8e463dd 59 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 60 }
mfajaradityo 0:2071f8e463dd 61 }
mfajaradityo 0:2071f8e463dd 62
mfajaradityo 0:2071f8e463dd 63 void XL320::SetBaudRate(uint8_t id,uint8_t baudrate)
mfajaradityo 0:2071f8e463dd 64 {
mfajaradityo 2:0ec2dce7c5f8 65 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 66 pc.printf("Set BaudRate (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 67 #endif
mfajaradityo 0:2071f8e463dd 68 targetID = id;
mfajaradityo 0:2071f8e463dd 69 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 70 parameter[0] = baudrate;
mfajaradityo 0:2071f8e463dd 71
mfajaradityo 0:2071f8e463dd 72 iWrite(1, BAUD_RATE, parameter);
mfajaradityo 0:2071f8e463dd 73 sendIPacket();
mfajaradityo 0:2071f8e463dd 74
mfajaradityo 0:2071f8e463dd 75 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 76 getRPacket();
mfajaradityo 0:2071f8e463dd 77 }
mfajaradityo 0:2071f8e463dd 78
mfajaradityo 0:2071f8e463dd 79 uint8_t XL320::GetBaudRate(uint8_t id)
mfajaradityo 0:2071f8e463dd 80 {
mfajaradityo 2:0ec2dce7c5f8 81 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 82 pc.printf("Get BaudRate (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 83 #endif
mfajaradityo 0:2071f8e463dd 84 targetID = id;
mfajaradityo 0:2071f8e463dd 85 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 86
mfajaradityo 0:2071f8e463dd 87 iRead(1, BAUD_RATE);
mfajaradityo 0:2071f8e463dd 88 sendIPacket();
mfajaradityo 0:2071f8e463dd 89
mfajaradityo 0:2071f8e463dd 90 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 91 getRPacket();
mfajaradityo 0:2071f8e463dd 92
mfajaradityo 0:2071f8e463dd 93 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 94
mfajaradityo 0:2071f8e463dd 95 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 96 {
mfajaradityo 0:2071f8e463dd 97 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 98 return rPacket[9]; //return tergeted servo Baud Rate
mfajaradityo 0:2071f8e463dd 99
mfajaradityo 0:2071f8e463dd 100 default : //error occurred
mfajaradityo 0:2071f8e463dd 101 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 102 }
mfajaradityo 0:2071f8e463dd 103 }
mfajaradityo 0:2071f8e463dd 104
mfajaradityo 0:2071f8e463dd 105 void XL320::SetRetDelTime(uint8_t id,uint8_t time)
mfajaradityo 0:2071f8e463dd 106 {
mfajaradityo 2:0ec2dce7c5f8 107 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 108 pc.printf("Set Return Delay Time (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 109 #endif
mfajaradityo 0:2071f8e463dd 110 targetID = id;
mfajaradityo 0:2071f8e463dd 111 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 112 parameter[0] = time;
mfajaradityo 0:2071f8e463dd 113
mfajaradityo 0:2071f8e463dd 114 iWrite(1, RETURN_DELAY_TIME, parameter);
mfajaradityo 0:2071f8e463dd 115 sendIPacket();
mfajaradityo 0:2071f8e463dd 116
mfajaradityo 0:2071f8e463dd 117 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 118 getRPacket();
mfajaradityo 0:2071f8e463dd 119 }
mfajaradityo 0:2071f8e463dd 120
mfajaradityo 0:2071f8e463dd 121 uint8_t XL320::GetRetDelTime(uint8_t id)
mfajaradityo 0:2071f8e463dd 122 {
mfajaradityo 2:0ec2dce7c5f8 123 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 124 pc.printf("Get Return Delay Time (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 125 #endif
mfajaradityo 0:2071f8e463dd 126 targetID = id;
mfajaradityo 0:2071f8e463dd 127 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 128
mfajaradityo 0:2071f8e463dd 129 iRead(1, RETURN_DELAY_TIME);
mfajaradityo 0:2071f8e463dd 130 sendIPacket();
mfajaradityo 0:2071f8e463dd 131
mfajaradityo 0:2071f8e463dd 132 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 133 getRPacket();
mfajaradityo 0:2071f8e463dd 134
mfajaradityo 0:2071f8e463dd 135 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 136
mfajaradityo 0:2071f8e463dd 137 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 138 {
mfajaradityo 0:2071f8e463dd 139 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 140 return rPacket[9]; //return tergeted servo Baud Rate
mfajaradityo 0:2071f8e463dd 141
mfajaradityo 0:2071f8e463dd 142 default : //error occurred
mfajaradityo 0:2071f8e463dd 143 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 144 }
mfajaradityo 0:2071f8e463dd 145 }
mfajaradityo 0:2071f8e463dd 146
mfajaradityo 0:2071f8e463dd 147 /***** XL320 Motor Setting *****/
mfajaradityo 0:2071f8e463dd 148 void XL320::SetCWAngLim(uint8_t id,uint16_t angle)
mfajaradityo 0:2071f8e463dd 149 {
mfajaradityo 2:0ec2dce7c5f8 150 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 151 pc.printf("Set CW Angle Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 152 #endif
mfajaradityo 0:2071f8e463dd 153 targetID = id;
mfajaradityo 0:2071f8e463dd 154 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 155 parameter[0] = SHIFT_TO_LSB(angle);
mfajaradityo 0:2071f8e463dd 156 parameter[1] = SHIFT_TO_MSB(angle);
mfajaradityo 0:2071f8e463dd 157
mfajaradityo 0:2071f8e463dd 158 iWrite(2, CW_ANGLE_LIMIT, parameter);
mfajaradityo 0:2071f8e463dd 159 sendIPacket();
mfajaradityo 0:2071f8e463dd 160
mfajaradityo 0:2071f8e463dd 161 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 162 getRPacket();
mfajaradityo 0:2071f8e463dd 163 }
mfajaradityo 0:2071f8e463dd 164
mfajaradityo 0:2071f8e463dd 165 uint16_t XL320::GetCWAngLim(uint8_t id)
mfajaradityo 0:2071f8e463dd 166 {
mfajaradityo 2:0ec2dce7c5f8 167 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 168 pc.printf("Get CW Angle Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 169 #endif
mfajaradityo 0:2071f8e463dd 170 targetID = id;
mfajaradityo 0:2071f8e463dd 171 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 172
mfajaradityo 0:2071f8e463dd 173 iRead(2, CW_ANGLE_LIMIT);
mfajaradityo 0:2071f8e463dd 174 sendIPacket();
mfajaradityo 0:2071f8e463dd 175
mfajaradityo 0:2071f8e463dd 176 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 177 getRPacket();
mfajaradityo 0:2071f8e463dd 178
mfajaradityo 0:2071f8e463dd 179 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 180
mfajaradityo 0:2071f8e463dd 181 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 182 {
mfajaradityo 0:2071f8e463dd 183 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 184 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 185
mfajaradityo 0:2071f8e463dd 186 default : //error occurred
mfajaradityo 0:2071f8e463dd 187 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 188 }
mfajaradityo 0:2071f8e463dd 189 }
mfajaradityo 0:2071f8e463dd 190
mfajaradityo 0:2071f8e463dd 191 void XL320::SetCCWAngLim(uint8_t id,uint16_t angle)
mfajaradityo 0:2071f8e463dd 192 {
mfajaradityo 2:0ec2dce7c5f8 193 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 194 pc.printf("Set CCW Angle Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 195 #endif
mfajaradityo 0:2071f8e463dd 196 targetID = id;
mfajaradityo 0:2071f8e463dd 197 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 198 parameter[0] = SHIFT_TO_LSB(angle);
mfajaradityo 0:2071f8e463dd 199 parameter[1] = SHIFT_TO_MSB(angle);
mfajaradityo 0:2071f8e463dd 200
mfajaradityo 0:2071f8e463dd 201 iWrite(2, CCW_ANGLE_LIMIT, parameter);
mfajaradityo 0:2071f8e463dd 202 sendIPacket();
mfajaradityo 0:2071f8e463dd 203
mfajaradityo 0:2071f8e463dd 204 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 205 getRPacket();
mfajaradityo 0:2071f8e463dd 206 }
mfajaradityo 0:2071f8e463dd 207
mfajaradityo 0:2071f8e463dd 208 uint16_t XL320::GetCCWAngLim(uint8_t id)
mfajaradityo 0:2071f8e463dd 209 {
mfajaradityo 2:0ec2dce7c5f8 210 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 211 pc.printf("Get CCW Angle Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 212 #endif
mfajaradityo 0:2071f8e463dd 213 targetID = id;
mfajaradityo 0:2071f8e463dd 214 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 215
mfajaradityo 0:2071f8e463dd 216 iRead(2, CW_ANGLE_LIMIT);
mfajaradityo 0:2071f8e463dd 217 sendIPacket();
mfajaradityo 0:2071f8e463dd 218
mfajaradityo 0:2071f8e463dd 219 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 220 getRPacket();
mfajaradityo 0:2071f8e463dd 221
mfajaradityo 0:2071f8e463dd 222 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 223
mfajaradityo 0:2071f8e463dd 224 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 225 {
mfajaradityo 0:2071f8e463dd 226 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 227 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 228
mfajaradityo 0:2071f8e463dd 229 default : //error occurred
mfajaradityo 0:2071f8e463dd 230 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 231 }
mfajaradityo 0:2071f8e463dd 232 }
mfajaradityo 0:2071f8e463dd 233
mfajaradityo 0:2071f8e463dd 234 void XL320::SetContMode(uint8_t id,uint8_t mode)
mfajaradityo 0:2071f8e463dd 235 {
mfajaradityo 2:0ec2dce7c5f8 236 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 237 pc.printf("Set Control Mode (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 238 #endif
mfajaradityo 0:2071f8e463dd 239 targetID = id;
mfajaradityo 0:2071f8e463dd 240 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 241 parameter[0] = mode;
mfajaradityo 0:2071f8e463dd 242
mfajaradityo 0:2071f8e463dd 243 iWrite(1, CONTROL_MODE, parameter);
mfajaradityo 0:2071f8e463dd 244 sendIPacket();
mfajaradityo 0:2071f8e463dd 245
mfajaradityo 0:2071f8e463dd 246 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 247 getRPacket();
mfajaradityo 0:2071f8e463dd 248 }
mfajaradityo 0:2071f8e463dd 249
mfajaradityo 0:2071f8e463dd 250 uint8_t XL320::GetContMode(uint8_t id)
mfajaradityo 0:2071f8e463dd 251 {
mfajaradityo 2:0ec2dce7c5f8 252 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 253 pc.printf("Get Control Mode (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 254 #endif
mfajaradityo 0:2071f8e463dd 255 targetID = id;
mfajaradityo 0:2071f8e463dd 256 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 257
mfajaradityo 0:2071f8e463dd 258 iRead(1, CONTROL_MODE);
mfajaradityo 0:2071f8e463dd 259 sendIPacket();
mfajaradityo 0:2071f8e463dd 260
mfajaradityo 0:2071f8e463dd 261 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 262 getRPacket();
mfajaradityo 0:2071f8e463dd 263
mfajaradityo 0:2071f8e463dd 264 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 265
mfajaradityo 0:2071f8e463dd 266 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 267 {
mfajaradityo 0:2071f8e463dd 268 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 269 return rPacket[9];
mfajaradityo 0:2071f8e463dd 270
mfajaradityo 0:2071f8e463dd 271 default : //error occurred
mfajaradityo 0:2071f8e463dd 272 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 273 }
mfajaradityo 0:2071f8e463dd 274 }
mfajaradityo 0:2071f8e463dd 275
mfajaradityo 0:2071f8e463dd 276 void XL320::SetTempLim(uint8_t id,uint8_t temp)
mfajaradityo 0:2071f8e463dd 277 {
mfajaradityo 2:0ec2dce7c5f8 278 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 279 pc.printf("Set Temperature Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 280 #endif
mfajaradityo 0:2071f8e463dd 281 targetID = id;
mfajaradityo 0:2071f8e463dd 282 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 283 parameter[0] = temp;
mfajaradityo 0:2071f8e463dd 284
mfajaradityo 0:2071f8e463dd 285 iWrite(1, LIMIT_TEMPERATURE, parameter);
mfajaradityo 0:2071f8e463dd 286 sendIPacket();
mfajaradityo 0:2071f8e463dd 287
mfajaradityo 0:2071f8e463dd 288 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 289 getRPacket();
mfajaradityo 0:2071f8e463dd 290 }
mfajaradityo 0:2071f8e463dd 291
mfajaradityo 0:2071f8e463dd 292 uint8_t XL320::GetTempLim(uint8_t id)
mfajaradityo 0:2071f8e463dd 293 {
mfajaradityo 2:0ec2dce7c5f8 294 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 295 pc.printf("Get Temperature Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 296 #endif
mfajaradityo 0:2071f8e463dd 297 targetID = id;
mfajaradityo 0:2071f8e463dd 298 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 299
mfajaradityo 0:2071f8e463dd 300 iRead(1, LIMIT_TEMPERATURE);
mfajaradityo 0:2071f8e463dd 301 sendIPacket();
mfajaradityo 0:2071f8e463dd 302
mfajaradityo 0:2071f8e463dd 303 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 304 getRPacket();
mfajaradityo 0:2071f8e463dd 305
mfajaradityo 0:2071f8e463dd 306 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 307
mfajaradityo 0:2071f8e463dd 308 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 309 {
mfajaradityo 0:2071f8e463dd 310 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 311 return rPacket[9];
mfajaradityo 0:2071f8e463dd 312
mfajaradityo 0:2071f8e463dd 313 default : //error occurred
mfajaradityo 0:2071f8e463dd 314 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 315 }
mfajaradityo 0:2071f8e463dd 316 }
mfajaradityo 0:2071f8e463dd 317
mfajaradityo 0:2071f8e463dd 318 void XL320::SetLowVoltLim(uint8_t id,uint8_t volt)
mfajaradityo 0:2071f8e463dd 319 {
mfajaradityo 2:0ec2dce7c5f8 320 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 321 pc.printf("Set Lower Voltage Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 322 #endif
mfajaradityo 0:2071f8e463dd 323 targetID = id;
mfajaradityo 0:2071f8e463dd 324 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 325 parameter[0] = volt;
mfajaradityo 0:2071f8e463dd 326
mfajaradityo 0:2071f8e463dd 327 iWrite(1, LOWER_LIMIT_VOLTAGE, parameter);
mfajaradityo 0:2071f8e463dd 328 sendIPacket();
mfajaradityo 0:2071f8e463dd 329
mfajaradityo 0:2071f8e463dd 330 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 331 getRPacket();
mfajaradityo 0:2071f8e463dd 332 }
mfajaradityo 0:2071f8e463dd 333
mfajaradityo 0:2071f8e463dd 334 uint8_t XL320::GetLowVoltLim(uint8_t id)
mfajaradityo 0:2071f8e463dd 335 {
mfajaradityo 2:0ec2dce7c5f8 336 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 337 pc.printf("Get Lower Voltage Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 338 #endif
mfajaradityo 0:2071f8e463dd 339 targetID = id;
mfajaradityo 0:2071f8e463dd 340 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 341
mfajaradityo 0:2071f8e463dd 342 iRead(1, LOWER_LIMIT_VOLTAGE);
mfajaradityo 0:2071f8e463dd 343 sendIPacket();
mfajaradityo 0:2071f8e463dd 344
mfajaradityo 0:2071f8e463dd 345 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 346 getRPacket();
mfajaradityo 0:2071f8e463dd 347
mfajaradityo 0:2071f8e463dd 348 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 349
mfajaradityo 0:2071f8e463dd 350 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 351 {
mfajaradityo 0:2071f8e463dd 352 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 353 return rPacket[9];
mfajaradityo 0:2071f8e463dd 354
mfajaradityo 0:2071f8e463dd 355 default : //error occurred
mfajaradityo 0:2071f8e463dd 356 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 357 }
mfajaradityo 0:2071f8e463dd 358 }
mfajaradityo 0:2071f8e463dd 359
mfajaradityo 0:2071f8e463dd 360 void XL320::SetUpVoltLim(uint8_t id,uint8_t volt)
mfajaradityo 0:2071f8e463dd 361 {
mfajaradityo 2:0ec2dce7c5f8 362 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 363 pc.printf("Set Upper Voltage Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 364 #endif
mfajaradityo 0:2071f8e463dd 365 targetID = id;
mfajaradityo 0:2071f8e463dd 366 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 367 parameter[0] = volt;
mfajaradityo 0:2071f8e463dd 368
mfajaradityo 0:2071f8e463dd 369 iWrite(1, UPPER_LIMIT_VOLTAGE, parameter);
mfajaradityo 0:2071f8e463dd 370 sendIPacket();
mfajaradityo 0:2071f8e463dd 371
mfajaradityo 0:2071f8e463dd 372 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 373 getRPacket();
mfajaradityo 0:2071f8e463dd 374 }
mfajaradityo 0:2071f8e463dd 375
mfajaradityo 0:2071f8e463dd 376 uint8_t XL320::GetUpVoltLim(uint8_t id)
mfajaradityo 0:2071f8e463dd 377 {
mfajaradityo 2:0ec2dce7c5f8 378 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 379 pc.printf("Get Upper Voltage Limit (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 380 #endif
mfajaradityo 0:2071f8e463dd 381 targetID = id;
mfajaradityo 0:2071f8e463dd 382 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 383
mfajaradityo 0:2071f8e463dd 384 iRead(1, UPPER_LIMIT_VOLTAGE);
mfajaradityo 0:2071f8e463dd 385 sendIPacket();
mfajaradityo 0:2071f8e463dd 386
mfajaradityo 0:2071f8e463dd 387 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 388 getRPacket();
mfajaradityo 0:2071f8e463dd 389
mfajaradityo 0:2071f8e463dd 390 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 391
mfajaradityo 0:2071f8e463dd 392 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 393 {
mfajaradityo 0:2071f8e463dd 394 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 395 return rPacket[9];
mfajaradityo 0:2071f8e463dd 396
mfajaradityo 0:2071f8e463dd 397 default : //error occurred
mfajaradityo 0:2071f8e463dd 398 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 399 }
mfajaradityo 0:2071f8e463dd 400 }
mfajaradityo 0:2071f8e463dd 401
mfajaradityo 0:2071f8e463dd 402
mfajaradityo 0:2071f8e463dd 403 void XL320::SetMaxTorq(uint8_t id,uint16_t torque)
mfajaradityo 0:2071f8e463dd 404 {
mfajaradityo 2:0ec2dce7c5f8 405 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 406 pc.printf("Set Maximum Torque (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 407 #endif
mfajaradityo 0:2071f8e463dd 408 targetID = id;
mfajaradityo 0:2071f8e463dd 409 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 410 parameter[0] = SHIFT_TO_LSB(torque);
mfajaradityo 0:2071f8e463dd 411 parameter[1] = SHIFT_TO_MSB(torque);
mfajaradityo 0:2071f8e463dd 412
mfajaradityo 0:2071f8e463dd 413 iWrite(2, MAX_TORQUE, parameter);
mfajaradityo 0:2071f8e463dd 414 sendIPacket();
mfajaradityo 0:2071f8e463dd 415
mfajaradityo 0:2071f8e463dd 416 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 417 getRPacket();
mfajaradityo 0:2071f8e463dd 418 }
mfajaradityo 0:2071f8e463dd 419
mfajaradityo 0:2071f8e463dd 420 uint16_t XL320::GetMaxTorq(uint8_t id)
mfajaradityo 0:2071f8e463dd 421 {
mfajaradityo 2:0ec2dce7c5f8 422 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 423 pc.printf("Get Maximum Torque (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 424 #endif
mfajaradityo 0:2071f8e463dd 425 targetID = id;
mfajaradityo 0:2071f8e463dd 426 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 427
mfajaradityo 0:2071f8e463dd 428 iRead(2, MAX_TORQUE);
mfajaradityo 0:2071f8e463dd 429 sendIPacket();
mfajaradityo 0:2071f8e463dd 430
mfajaradityo 0:2071f8e463dd 431 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 432 getRPacket();
mfajaradityo 0:2071f8e463dd 433
mfajaradityo 0:2071f8e463dd 434 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 435
mfajaradityo 0:2071f8e463dd 436 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 437 {
mfajaradityo 0:2071f8e463dd 438 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 439 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 440
mfajaradityo 0:2071f8e463dd 441 default : //error occurred
mfajaradityo 0:2071f8e463dd 442 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 443 }
mfajaradityo 0:2071f8e463dd 444 }
mfajaradityo 0:2071f8e463dd 445
mfajaradityo 0:2071f8e463dd 446 void XL320::SetRetLev(uint8_t id,uint8_t level)
mfajaradityo 0:2071f8e463dd 447 {
mfajaradityo 2:0ec2dce7c5f8 448 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 449 pc.printf("Set Return Level (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 450 #endif
mfajaradityo 0:2071f8e463dd 451 targetID = id;
mfajaradityo 0:2071f8e463dd 452 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 453 parameter[0] = level;
mfajaradityo 0:2071f8e463dd 454
mfajaradityo 0:2071f8e463dd 455 iWrite(1, RETURN_LEVEL, parameter);
mfajaradityo 0:2071f8e463dd 456 sendIPacket();
mfajaradityo 0:2071f8e463dd 457
mfajaradityo 0:2071f8e463dd 458 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 459 getRPacket();
mfajaradityo 0:2071f8e463dd 460 }
mfajaradityo 0:2071f8e463dd 461
mfajaradityo 0:2071f8e463dd 462 uint8_t XL320::GetRetLev(uint8_t id)
mfajaradityo 0:2071f8e463dd 463 {
mfajaradityo 2:0ec2dce7c5f8 464 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 465 pc.printf("Get Return Level (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 466 #endif
mfajaradityo 0:2071f8e463dd 467 targetID = id;
mfajaradityo 0:2071f8e463dd 468 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 469
mfajaradityo 0:2071f8e463dd 470 iRead(1, RETURN_LEVEL);
mfajaradityo 0:2071f8e463dd 471 sendIPacket();
mfajaradityo 0:2071f8e463dd 472
mfajaradityo 0:2071f8e463dd 473 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 474 getRPacket();
mfajaradityo 0:2071f8e463dd 475
mfajaradityo 0:2071f8e463dd 476 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 477
mfajaradityo 0:2071f8e463dd 478 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 479 {
mfajaradityo 0:2071f8e463dd 480 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 481 return rPacket[9];
mfajaradityo 0:2071f8e463dd 482
mfajaradityo 0:2071f8e463dd 483 default : //error occurred
mfajaradityo 0:2071f8e463dd 484 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 485 }
mfajaradityo 0:2071f8e463dd 486 }
mfajaradityo 0:2071f8e463dd 487
mfajaradityo 0:2071f8e463dd 488 void XL320::SetAlarmShut(uint8_t id,uint8_t alarm)
mfajaradityo 0:2071f8e463dd 489 {
mfajaradityo 2:0ec2dce7c5f8 490 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 491 pc.printf("Set Alarm Shutdown (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 492 #endif
mfajaradityo 0:2071f8e463dd 493 targetID = id;
mfajaradityo 0:2071f8e463dd 494 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 495 parameter[0] = alarm;
mfajaradityo 0:2071f8e463dd 496
mfajaradityo 0:2071f8e463dd 497 iWrite(1, ALARM_SHUTDOWN, parameter);
mfajaradityo 0:2071f8e463dd 498 sendIPacket();
mfajaradityo 0:2071f8e463dd 499
mfajaradityo 0:2071f8e463dd 500 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 501 getRPacket();
mfajaradityo 0:2071f8e463dd 502 }
mfajaradityo 0:2071f8e463dd 503
mfajaradityo 0:2071f8e463dd 504 uint8_t XL320::GetAlarmShut(uint8_t id)
mfajaradityo 0:2071f8e463dd 505 {
mfajaradityo 2:0ec2dce7c5f8 506 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 507 pc.printf("Get Alarm Shutdown (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 508 #endif
mfajaradityo 0:2071f8e463dd 509 targetID = id;
mfajaradityo 0:2071f8e463dd 510 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 511
mfajaradityo 0:2071f8e463dd 512 iRead(1, ALARM_SHUTDOWN);
mfajaradityo 0:2071f8e463dd 513 sendIPacket();
mfajaradityo 0:2071f8e463dd 514
mfajaradityo 0:2071f8e463dd 515 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 516 getRPacket();
mfajaradityo 0:2071f8e463dd 517
mfajaradityo 0:2071f8e463dd 518 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 519
mfajaradityo 0:2071f8e463dd 520 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 521 {
mfajaradityo 0:2071f8e463dd 522 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 523 return rPacket[9];
mfajaradityo 0:2071f8e463dd 524
mfajaradityo 0:2071f8e463dd 525 default : //error occurred
mfajaradityo 0:2071f8e463dd 526 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 527 }
mfajaradityo 0:2071f8e463dd 528 }
mfajaradityo 0:2071f8e463dd 529
mfajaradityo 0:2071f8e463dd 530 ////// RAM ACCESS METHODS //////
mfajaradityo 0:2071f8e463dd 531 /***** XL320 On/Off *****/
mfajaradityo 0:2071f8e463dd 532 void XL320::SetTorqueEn(uint8_t id,uint8_t enable)
mfajaradityo 0:2071f8e463dd 533 {
mfajaradityo 2:0ec2dce7c5f8 534 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 535 pc.printf("Set Torque Enable (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 536 #endif
mfajaradityo 0:2071f8e463dd 537 targetID = id;
mfajaradityo 0:2071f8e463dd 538 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 539 parameter[0] = enable;
mfajaradityo 0:2071f8e463dd 540
mfajaradityo 0:2071f8e463dd 541 iWrite(1, TORQUE_ENABLE, parameter);
mfajaradityo 0:2071f8e463dd 542 sendIPacket();
mfajaradityo 0:2071f8e463dd 543
mfajaradityo 0:2071f8e463dd 544 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 545 getRPacket();
mfajaradityo 0:2071f8e463dd 546 }
mfajaradityo 0:2071f8e463dd 547
mfajaradityo 0:2071f8e463dd 548 uint8_t XL320::GetTorqueEn(uint8_t id)
mfajaradityo 0:2071f8e463dd 549 {
mfajaradityo 2:0ec2dce7c5f8 550 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 551 pc.printf("Get Torque Enable (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 552 #endif
mfajaradityo 0:2071f8e463dd 553 targetID = id;
mfajaradityo 0:2071f8e463dd 554 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 555
mfajaradityo 0:2071f8e463dd 556 iRead(1, TORQUE_ENABLE);
mfajaradityo 0:2071f8e463dd 557 sendIPacket();
mfajaradityo 0:2071f8e463dd 558
mfajaradityo 0:2071f8e463dd 559 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 560 getRPacket();
mfajaradityo 0:2071f8e463dd 561
mfajaradityo 0:2071f8e463dd 562 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 563
mfajaradityo 0:2071f8e463dd 564 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 565 {
mfajaradityo 0:2071f8e463dd 566 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 567 return rPacket[9];
mfajaradityo 0:2071f8e463dd 568
mfajaradityo 0:2071f8e463dd 569 default : //error occurred
mfajaradityo 0:2071f8e463dd 570 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 571 }
mfajaradityo 0:2071f8e463dd 572 }
mfajaradityo 0:2071f8e463dd 573
mfajaradityo 0:2071f8e463dd 574 void XL320::TurnOnLED(uint8_t id,uint8_t led)
mfajaradityo 0:2071f8e463dd 575 {
mfajaradityo 2:0ec2dce7c5f8 576 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 577 pc.printf("Turn On LED (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 578 #endif
mfajaradityo 0:2071f8e463dd 579 targetID = id; //XL320 ID
mfajaradityo 0:2071f8e463dd 580 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 581 parameter[0] = led; //led to turn on
mfajaradityo 0:2071f8e463dd 582
mfajaradityo 0:2071f8e463dd 583 iWrite(1, LED, parameter);
mfajaradityo 0:2071f8e463dd 584 sendIPacket();
mfajaradityo 0:2071f8e463dd 585
mfajaradityo 0:2071f8e463dd 586 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 587 getRPacket();
mfajaradityo 0:2071f8e463dd 588
mfajaradityo 0:2071f8e463dd 589 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 590 }
mfajaradityo 0:2071f8e463dd 591
mfajaradityo 0:2071f8e463dd 592 uint8_t XL320::GetStatusLED(uint8_t id)
mfajaradityo 0:2071f8e463dd 593 {
mfajaradityo 2:0ec2dce7c5f8 594 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 595 pc.printf("Get Status LED (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 596 #endif
mfajaradityo 0:2071f8e463dd 597 targetID = id;
mfajaradityo 0:2071f8e463dd 598 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 599
mfajaradityo 0:2071f8e463dd 600 iRead(1, LED);
mfajaradityo 0:2071f8e463dd 601 sendIPacket();
mfajaradityo 0:2071f8e463dd 602
mfajaradityo 0:2071f8e463dd 603 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 604 getRPacket();
mfajaradityo 0:2071f8e463dd 605
mfajaradityo 0:2071f8e463dd 606 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 607
mfajaradityo 0:2071f8e463dd 608 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 609 {
mfajaradityo 0:2071f8e463dd 610 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 611 return rPacket[9];
mfajaradityo 0:2071f8e463dd 612
mfajaradityo 0:2071f8e463dd 613 default : //error occurred
mfajaradityo 0:2071f8e463dd 614 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 615 }
mfajaradityo 0:2071f8e463dd 616 }
mfajaradityo 0:2071f8e463dd 617
mfajaradityo 0:2071f8e463dd 618 /***** XL320 Motor Control *****/
mfajaradityo 0:2071f8e463dd 619 void XL320::SetDGain(uint8_t id,uint8_t d_cons)
mfajaradityo 0:2071f8e463dd 620 {
mfajaradityo 2:0ec2dce7c5f8 621 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 622 pc.printf("Set D-Gain (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 623 #endif
mfajaradityo 0:2071f8e463dd 624 targetID = id;
mfajaradityo 0:2071f8e463dd 625 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 626 parameter[0] = d_cons;
mfajaradityo 0:2071f8e463dd 627
mfajaradityo 0:2071f8e463dd 628 iWrite(1, D_GAIN, parameter);
mfajaradityo 0:2071f8e463dd 629 sendIPacket();
mfajaradityo 0:2071f8e463dd 630
mfajaradityo 0:2071f8e463dd 631 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 632 getRPacket();
mfajaradityo 0:2071f8e463dd 633
mfajaradityo 0:2071f8e463dd 634 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 635 }
mfajaradityo 0:2071f8e463dd 636
mfajaradityo 0:2071f8e463dd 637 uint8_t XL320::GetDGain(uint8_t id)
mfajaradityo 0:2071f8e463dd 638 {
mfajaradityo 2:0ec2dce7c5f8 639 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 640 pc.printf("Get D-Gain (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 641 #endif
mfajaradityo 0:2071f8e463dd 642 targetID = id;
mfajaradityo 0:2071f8e463dd 643 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 644
mfajaradityo 0:2071f8e463dd 645 iRead(1, D_GAIN);
mfajaradityo 0:2071f8e463dd 646 sendIPacket();
mfajaradityo 0:2071f8e463dd 647
mfajaradityo 0:2071f8e463dd 648 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 649 getRPacket();
mfajaradityo 0:2071f8e463dd 650
mfajaradityo 0:2071f8e463dd 651 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 652
mfajaradityo 0:2071f8e463dd 653 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 654 {
mfajaradityo 0:2071f8e463dd 655 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 656 return rPacket[9];
mfajaradityo 0:2071f8e463dd 657
mfajaradityo 0:2071f8e463dd 658 default : //error occurred
mfajaradityo 0:2071f8e463dd 659 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 660 }
mfajaradityo 0:2071f8e463dd 661 }
mfajaradityo 0:2071f8e463dd 662
mfajaradityo 0:2071f8e463dd 663 void XL320::SetIGain(uint8_t id,uint8_t i_cons)
mfajaradityo 0:2071f8e463dd 664 {
mfajaradityo 2:0ec2dce7c5f8 665 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 666 pc.printf("Set I-Gain (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 667 #endif
mfajaradityo 0:2071f8e463dd 668 targetID = id;
mfajaradityo 0:2071f8e463dd 669 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 670 parameter[0] = i_cons;
mfajaradityo 0:2071f8e463dd 671
mfajaradityo 0:2071f8e463dd 672 iWrite(1, I_GAIN, parameter);
mfajaradityo 0:2071f8e463dd 673 sendIPacket();
mfajaradityo 0:2071f8e463dd 674
mfajaradityo 0:2071f8e463dd 675 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 676 getRPacket();
mfajaradityo 0:2071f8e463dd 677
mfajaradityo 0:2071f8e463dd 678 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 679 }
mfajaradityo 0:2071f8e463dd 680
mfajaradityo 0:2071f8e463dd 681 uint8_t XL320::GetIGain(uint8_t id)
mfajaradityo 0:2071f8e463dd 682 {
mfajaradityo 2:0ec2dce7c5f8 683 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 684 pc.printf("Get I-Gain (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 685 #endif
mfajaradityo 0:2071f8e463dd 686 targetID = id;
mfajaradityo 0:2071f8e463dd 687 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 688
mfajaradityo 0:2071f8e463dd 689 iRead(1, I_GAIN);
mfajaradityo 0:2071f8e463dd 690 sendIPacket();
mfajaradityo 0:2071f8e463dd 691
mfajaradityo 0:2071f8e463dd 692 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 693 getRPacket();
mfajaradityo 0:2071f8e463dd 694
mfajaradityo 0:2071f8e463dd 695 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 696
mfajaradityo 0:2071f8e463dd 697 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 698 {
mfajaradityo 0:2071f8e463dd 699 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 700 return rPacket[9];
mfajaradityo 0:2071f8e463dd 701
mfajaradityo 0:2071f8e463dd 702 default : //error occurred
mfajaradityo 0:2071f8e463dd 703 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 704 }
mfajaradityo 0:2071f8e463dd 705 }
mfajaradityo 0:2071f8e463dd 706
mfajaradityo 0:2071f8e463dd 707 void XL320::SetPGain(uint8_t id,uint8_t p_cons)
mfajaradityo 0:2071f8e463dd 708 {
mfajaradityo 2:0ec2dce7c5f8 709 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 710 pc.printf("Set P-Gain (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 711 #endif
mfajaradityo 0:2071f8e463dd 712 targetID = id;
mfajaradityo 0:2071f8e463dd 713 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 714 parameter[0] = p_cons;
mfajaradityo 0:2071f8e463dd 715
mfajaradityo 0:2071f8e463dd 716 iWrite(1, P_GAIN, parameter);
mfajaradityo 0:2071f8e463dd 717 sendIPacket();
mfajaradityo 0:2071f8e463dd 718
mfajaradityo 0:2071f8e463dd 719 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 720 getRPacket();
mfajaradityo 0:2071f8e463dd 721
mfajaradityo 0:2071f8e463dd 722 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 723 }
mfajaradityo 0:2071f8e463dd 724
mfajaradityo 0:2071f8e463dd 725 uint8_t XL320::GetPGain(uint8_t id)
mfajaradityo 0:2071f8e463dd 726 {
mfajaradityo 2:0ec2dce7c5f8 727 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 728 pc.printf("Get P-Gain (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 729 #endif
mfajaradityo 0:2071f8e463dd 730 targetID = id;
mfajaradityo 0:2071f8e463dd 731 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 732
mfajaradityo 0:2071f8e463dd 733 iRead(1, P_GAIN);
mfajaradityo 0:2071f8e463dd 734 sendIPacket();
mfajaradityo 0:2071f8e463dd 735
mfajaradityo 0:2071f8e463dd 736 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 737 getRPacket();
mfajaradityo 0:2071f8e463dd 738
mfajaradityo 0:2071f8e463dd 739 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 740
mfajaradityo 0:2071f8e463dd 741 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 742 {
mfajaradityo 0:2071f8e463dd 743 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 744 return rPacket[9];
mfajaradityo 0:2071f8e463dd 745
mfajaradityo 0:2071f8e463dd 746 default : //error occurred
mfajaradityo 0:2071f8e463dd 747 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 748 }
mfajaradityo 0:2071f8e463dd 749 }
mfajaradityo 0:2071f8e463dd 750
mfajaradityo 0:2071f8e463dd 751 void XL320::SetGoalPos(uint8_t id,uint16_t position)
mfajaradityo 0:2071f8e463dd 752 {
mfajaradityo 2:0ec2dce7c5f8 753 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 754 pc.printf("Set Goal Position (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 755 #endif
mfajaradityo 0:2071f8e463dd 756 targetID = id; //XL320 ID
mfajaradityo 0:2071f8e463dd 757 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 758 parameter[0] = SHIFT_TO_LSB(position); //position goal LSB
mfajaradityo 0:2071f8e463dd 759 parameter[1] = SHIFT_TO_MSB(position); //position goal MSB
mfajaradityo 0:2071f8e463dd 760
mfajaradityo 0:2071f8e463dd 761 iWrite(2, GOAL_POSITION, parameter);
mfajaradityo 0:2071f8e463dd 762 sendIPacket();
mfajaradityo 0:2071f8e463dd 763
mfajaradityo 0:2071f8e463dd 764 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 765 getRPacket();
mfajaradityo 0:2071f8e463dd 766
mfajaradityo 0:2071f8e463dd 767 wait_ms(restTime); //gives some time to the targeted servo before another Instruction Packet
mfajaradityo 0:2071f8e463dd 768 }
mfajaradityo 0:2071f8e463dd 769
mfajaradityo 0:2071f8e463dd 770 uint16_t XL320::GetGoalPos(uint8_t id)
mfajaradityo 0:2071f8e463dd 771 {
mfajaradityo 2:0ec2dce7c5f8 772 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 773 pc.printf("Get Goal Position (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 774 #endif
mfajaradityo 0:2071f8e463dd 775 targetID = id;
mfajaradityo 0:2071f8e463dd 776 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 777
mfajaradityo 0:2071f8e463dd 778 iRead(2, GOAL_POSITION);
mfajaradityo 0:2071f8e463dd 779 sendIPacket();
mfajaradityo 0:2071f8e463dd 780
mfajaradityo 0:2071f8e463dd 781 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 782 getRPacket();
mfajaradityo 0:2071f8e463dd 783
mfajaradityo 0:2071f8e463dd 784 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 785
mfajaradityo 0:2071f8e463dd 786 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 787 {
mfajaradityo 0:2071f8e463dd 788 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 789 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 790
mfajaradityo 0:2071f8e463dd 791 default : //error occurred
mfajaradityo 0:2071f8e463dd 792 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 793 }
mfajaradityo 0:2071f8e463dd 794 }
mfajaradityo 0:2071f8e463dd 795
mfajaradityo 0:2071f8e463dd 796 void XL320::SetGoalVel(uint8_t id,uint16_t velocity)
mfajaradityo 0:2071f8e463dd 797 {
mfajaradityo 2:0ec2dce7c5f8 798 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 799 pc.printf("Set Goal Velocity (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 800 #endif
mfajaradityo 0:2071f8e463dd 801 targetID = id; //XL320 ID
mfajaradityo 0:2071f8e463dd 802 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 803 parameter[0] = SHIFT_TO_LSB(velocity);
mfajaradityo 0:2071f8e463dd 804 parameter[1] = SHIFT_TO_MSB(velocity);
mfajaradityo 0:2071f8e463dd 805
mfajaradityo 0:2071f8e463dd 806 iWrite(2, GOAL_SPEED, parameter);
mfajaradityo 0:2071f8e463dd 807 sendIPacket();
mfajaradityo 0:2071f8e463dd 808
mfajaradityo 0:2071f8e463dd 809 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 810 getRPacket();
mfajaradityo 0:2071f8e463dd 811
mfajaradityo 0:2071f8e463dd 812 wait_ms(restTime); //gives some time to the targeted servo before another Instruction Packet
mfajaradityo 0:2071f8e463dd 813 }
mfajaradityo 0:2071f8e463dd 814
mfajaradityo 0:2071f8e463dd 815 uint16_t XL320::GetGoalVel(uint8_t id)
mfajaradityo 0:2071f8e463dd 816 {
mfajaradityo 2:0ec2dce7c5f8 817 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 818 pc.printf("Get Goal Velocity (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 819 #endif
mfajaradityo 0:2071f8e463dd 820 targetID = id;
mfajaradityo 0:2071f8e463dd 821 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 822
mfajaradityo 0:2071f8e463dd 823 iRead(2, GOAL_SPEED);
mfajaradityo 0:2071f8e463dd 824 sendIPacket();
mfajaradityo 0:2071f8e463dd 825
mfajaradityo 0:2071f8e463dd 826 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 827 getRPacket();
mfajaradityo 0:2071f8e463dd 828
mfajaradityo 0:2071f8e463dd 829 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 830
mfajaradityo 0:2071f8e463dd 831 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 832 {
mfajaradityo 0:2071f8e463dd 833 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 834 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 835
mfajaradityo 0:2071f8e463dd 836 default : //error occurred
mfajaradityo 0:2071f8e463dd 837 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 838 }
mfajaradityo 0:2071f8e463dd 839 }
mfajaradityo 0:2071f8e463dd 840
mfajaradityo 0:2071f8e463dd 841 void XL320::SetGoalTorq(uint8_t id,uint16_t torque)
mfajaradityo 0:2071f8e463dd 842 {
mfajaradityo 2:0ec2dce7c5f8 843 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 844 pc.printf("Set Goal Torque (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 845 #endif
mfajaradityo 0:2071f8e463dd 846 targetID = id; //XL320 ID
mfajaradityo 0:2071f8e463dd 847 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 848 parameter[0] = SHIFT_TO_LSB(torque);
mfajaradityo 0:2071f8e463dd 849 parameter[1] = SHIFT_TO_MSB(torque);
mfajaradityo 0:2071f8e463dd 850
mfajaradityo 0:2071f8e463dd 851 iWrite(2, GOAL_TORQUE, parameter);
mfajaradityo 0:2071f8e463dd 852 sendIPacket();
mfajaradityo 0:2071f8e463dd 853
mfajaradityo 0:2071f8e463dd 854 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 855 getRPacket();
mfajaradityo 0:2071f8e463dd 856
mfajaradityo 0:2071f8e463dd 857 wait_ms(restTime); //gives some time to the targeted servo before another Instruction Packet
mfajaradityo 0:2071f8e463dd 858 }
mfajaradityo 0:2071f8e463dd 859
mfajaradityo 0:2071f8e463dd 860 uint16_t XL320::GetGoalTorq(uint8_t id)
mfajaradityo 0:2071f8e463dd 861 {
mfajaradityo 2:0ec2dce7c5f8 862 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 863 pc.printf("Get Goal Torque (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 864 #endif
mfajaradityo 0:2071f8e463dd 865 targetID = id;
mfajaradityo 0:2071f8e463dd 866 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 867
mfajaradityo 0:2071f8e463dd 868 iRead(2, GOAL_TORQUE);
mfajaradityo 0:2071f8e463dd 869 sendIPacket();
mfajaradityo 0:2071f8e463dd 870
mfajaradityo 0:2071f8e463dd 871 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 872 getRPacket();
mfajaradityo 0:2071f8e463dd 873
mfajaradityo 0:2071f8e463dd 874 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 875
mfajaradityo 0:2071f8e463dd 876 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 877 {
mfajaradityo 0:2071f8e463dd 878 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 879 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 880
mfajaradityo 0:2071f8e463dd 881 default : //error occurred
mfajaradityo 0:2071f8e463dd 882 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 883 }
mfajaradityo 0:2071f8e463dd 884 }
mfajaradityo 0:2071f8e463dd 885
mfajaradityo 0:2071f8e463dd 886 /***** XL320 Feedback *****/
mfajaradityo 0:2071f8e463dd 887 uint16_t XL320::GetPresentPos(uint8_t id)
mfajaradityo 0:2071f8e463dd 888 {
mfajaradityo 2:0ec2dce7c5f8 889 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 890 pc.printf("Get Present Position (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 891 #endif
mfajaradityo 0:2071f8e463dd 892 targetID = id;
mfajaradityo 0:2071f8e463dd 893 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 894
mfajaradityo 0:2071f8e463dd 895 iRead(2, PRESENT_POSITION);
mfajaradityo 0:2071f8e463dd 896 sendIPacket();
mfajaradityo 0:2071f8e463dd 897
mfajaradityo 0:2071f8e463dd 898 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 899 getRPacket();
mfajaradityo 0:2071f8e463dd 900
mfajaradityo 0:2071f8e463dd 901 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 902
mfajaradityo 0:2071f8e463dd 903 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 904 {
mfajaradityo 0:2071f8e463dd 905 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 906 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 907
mfajaradityo 0:2071f8e463dd 908 default : //error occurred
mfajaradityo 0:2071f8e463dd 909 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 910 }
mfajaradityo 0:2071f8e463dd 911 }
mfajaradityo 0:2071f8e463dd 912
mfajaradityo 0:2071f8e463dd 913 uint16_t XL320::GetPresentSpeed(uint8_t id)
mfajaradityo 0:2071f8e463dd 914 {
mfajaradityo 2:0ec2dce7c5f8 915 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 916 pc.printf("Get Present Speed (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 917 #endif
mfajaradityo 0:2071f8e463dd 918 targetID = id;
mfajaradityo 0:2071f8e463dd 919 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 920
mfajaradityo 0:2071f8e463dd 921 iRead(2, PRESENT_SPEED);
mfajaradityo 0:2071f8e463dd 922 sendIPacket();
mfajaradityo 0:2071f8e463dd 923
mfajaradityo 0:2071f8e463dd 924 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 925 getRPacket();
mfajaradityo 0:2071f8e463dd 926
mfajaradityo 0:2071f8e463dd 927 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 928
mfajaradityo 0:2071f8e463dd 929 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 930 {
mfajaradityo 0:2071f8e463dd 931 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 932 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 933
mfajaradityo 0:2071f8e463dd 934 default : //error occurred
mfajaradityo 0:2071f8e463dd 935 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 936 }
mfajaradityo 0:2071f8e463dd 937 }
mfajaradityo 0:2071f8e463dd 938
mfajaradityo 0:2071f8e463dd 939 uint16_t XL320::GetPresentLoad(uint8_t id)
mfajaradityo 0:2071f8e463dd 940 {
mfajaradityo 2:0ec2dce7c5f8 941 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 942 pc.printf("Get Present Load (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 943 #endif
mfajaradityo 0:2071f8e463dd 944 targetID = id;
mfajaradityo 0:2071f8e463dd 945 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 946
mfajaradityo 0:2071f8e463dd 947 iRead(2, PRESENT_LOAD);
mfajaradityo 0:2071f8e463dd 948 sendIPacket();
mfajaradityo 0:2071f8e463dd 949
mfajaradityo 0:2071f8e463dd 950 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 951 getRPacket();
mfajaradityo 0:2071f8e463dd 952
mfajaradityo 0:2071f8e463dd 953 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 954
mfajaradityo 0:2071f8e463dd 955 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 956 {
mfajaradityo 0:2071f8e463dd 957 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 958 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 959
mfajaradityo 0:2071f8e463dd 960 default : //error occurred
mfajaradityo 0:2071f8e463dd 961 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 962 }
mfajaradityo 0:2071f8e463dd 963 }
mfajaradityo 0:2071f8e463dd 964
mfajaradityo 0:2071f8e463dd 965 uint8_t XL320::GetPresentVolt(uint8_t id)
mfajaradityo 0:2071f8e463dd 966 {
mfajaradityo 2:0ec2dce7c5f8 967 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 968 pc.printf("Get Present Volt (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 969 #endif
mfajaradityo 0:2071f8e463dd 970 targetID = id;
mfajaradityo 0:2071f8e463dd 971 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 972
mfajaradityo 0:2071f8e463dd 973 iRead(1, PRESENT_VOLTAGE);
mfajaradityo 0:2071f8e463dd 974 sendIPacket();
mfajaradityo 0:2071f8e463dd 975
mfajaradityo 0:2071f8e463dd 976 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 977 getRPacket();
mfajaradityo 0:2071f8e463dd 978
mfajaradityo 0:2071f8e463dd 979 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 980
mfajaradityo 0:2071f8e463dd 981 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 982 {
mfajaradityo 0:2071f8e463dd 983 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 984 return rPacket[9];
mfajaradityo 0:2071f8e463dd 985
mfajaradityo 0:2071f8e463dd 986 default : //error occurred
mfajaradityo 0:2071f8e463dd 987 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 988 }
mfajaradityo 0:2071f8e463dd 989 }
mfajaradityo 0:2071f8e463dd 990
mfajaradityo 0:2071f8e463dd 991 uint8_t XL320::GetPresentTemp(uint8_t id)
mfajaradityo 0:2071f8e463dd 992 {
mfajaradityo 2:0ec2dce7c5f8 993 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 994 pc.printf("Get Present Temperature (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 995 #endif
mfajaradityo 0:2071f8e463dd 996 targetID = id;
mfajaradityo 0:2071f8e463dd 997 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 998
mfajaradityo 0:2071f8e463dd 999 iRead(1, PRESENT_TEMPERATURE);
mfajaradityo 0:2071f8e463dd 1000 sendIPacket();
mfajaradityo 0:2071f8e463dd 1001
mfajaradityo 0:2071f8e463dd 1002 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 1003 getRPacket();
mfajaradityo 0:2071f8e463dd 1004
mfajaradityo 0:2071f8e463dd 1005 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 1006
mfajaradityo 0:2071f8e463dd 1007 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 1008 {
mfajaradityo 0:2071f8e463dd 1009 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 1010 return rPacket[9];
mfajaradityo 0:2071f8e463dd 1011
mfajaradityo 0:2071f8e463dd 1012 default : //error occurred
mfajaradityo 0:2071f8e463dd 1013 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 1014 }
mfajaradityo 0:2071f8e463dd 1015 }
mfajaradityo 0:2071f8e463dd 1016
mfajaradityo 0:2071f8e463dd 1017 /***** XL320 Status *****/
mfajaradityo 0:2071f8e463dd 1018 uint8_t XL320::GetRegInst(uint8_t id)
mfajaradityo 0:2071f8e463dd 1019 {
mfajaradityo 2:0ec2dce7c5f8 1020 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 1021 pc.printf("Get Registered Instruction (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 1022 #endif
mfajaradityo 0:2071f8e463dd 1023 targetID = id;
mfajaradityo 0:2071f8e463dd 1024 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 1025
mfajaradityo 0:2071f8e463dd 1026 iRead(1, REGISTERED_INSTRUCTION);
mfajaradityo 0:2071f8e463dd 1027 sendIPacket();
mfajaradityo 0:2071f8e463dd 1028
mfajaradityo 0:2071f8e463dd 1029 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 1030 getRPacket();
mfajaradityo 0:2071f8e463dd 1031
mfajaradityo 0:2071f8e463dd 1032 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 1033
mfajaradityo 0:2071f8e463dd 1034 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 1035 {
mfajaradityo 0:2071f8e463dd 1036 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 1037 return rPacket[9];
mfajaradityo 0:2071f8e463dd 1038
mfajaradityo 0:2071f8e463dd 1039 default : //error occurred
mfajaradityo 0:2071f8e463dd 1040 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 1041 }
mfajaradityo 0:2071f8e463dd 1042 }
mfajaradityo 0:2071f8e463dd 1043
mfajaradityo 0:2071f8e463dd 1044 uint8_t XL320::GetMoving(uint8_t id)
mfajaradityo 0:2071f8e463dd 1045 {
mfajaradityo 2:0ec2dce7c5f8 1046 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 1047 pc.printf("Get Moving (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 1048 #endif
mfajaradityo 0:2071f8e463dd 1049 targetID = id;
mfajaradityo 0:2071f8e463dd 1050 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 1051
mfajaradityo 0:2071f8e463dd 1052 iRead(1, MOVING);
mfajaradityo 0:2071f8e463dd 1053 sendIPacket();
mfajaradityo 0:2071f8e463dd 1054
mfajaradityo 0:2071f8e463dd 1055 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 1056 getRPacket();
mfajaradityo 0:2071f8e463dd 1057
mfajaradityo 0:2071f8e463dd 1058 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 1059
mfajaradityo 0:2071f8e463dd 1060 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 1061 {
mfajaradityo 0:2071f8e463dd 1062 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 1063 return rPacket[9];
mfajaradityo 0:2071f8e463dd 1064
mfajaradityo 0:2071f8e463dd 1065 default : //error occurred
mfajaradityo 0:2071f8e463dd 1066 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 1067 }
mfajaradityo 0:2071f8e463dd 1068 }
mfajaradityo 0:2071f8e463dd 1069
mfajaradityo 0:2071f8e463dd 1070 uint8_t XL320::GetHWErr(uint8_t id)
mfajaradityo 0:2071f8e463dd 1071 {
mfajaradityo 2:0ec2dce7c5f8 1072 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 1073 pc.printf("Get Hardware Error Status (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 1074 #endif
mfajaradityo 0:2071f8e463dd 1075 targetID = id;
mfajaradityo 0:2071f8e463dd 1076 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 1077
mfajaradityo 0:2071f8e463dd 1078 iRead(1, HARDWARE_ERROR_STATUS);
mfajaradityo 0:2071f8e463dd 1079 sendIPacket();
mfajaradityo 0:2071f8e463dd 1080
mfajaradityo 0:2071f8e463dd 1081 rPacketLength = 12;
mfajaradityo 0:2071f8e463dd 1082 getRPacket();
mfajaradityo 0:2071f8e463dd 1083
mfajaradityo 0:2071f8e463dd 1084 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 1085
mfajaradityo 0:2071f8e463dd 1086 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 1087 {
mfajaradityo 0:2071f8e463dd 1088 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 1089 return rPacket[9];
mfajaradityo 0:2071f8e463dd 1090
mfajaradityo 0:2071f8e463dd 1091 default : //error occurred
mfajaradityo 0:2071f8e463dd 1092 return rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 1093 }
mfajaradityo 0:2071f8e463dd 1094 }
mfajaradityo 0:2071f8e463dd 1095
mfajaradityo 0:2071f8e463dd 1096 void XL320::SetPunch(uint8_t id,uint16_t punch)
mfajaradityo 0:2071f8e463dd 1097 {
mfajaradityo 2:0ec2dce7c5f8 1098 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 1099 pc.printf("Set Punch (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 1100 #endif
mfajaradityo 0:2071f8e463dd 1101 targetID = id; //XL320 ID
mfajaradityo 0:2071f8e463dd 1102 targetInst = WRITE_DATA;
mfajaradityo 0:2071f8e463dd 1103 parameter[0] = SHIFT_TO_LSB(punch);
mfajaradityo 0:2071f8e463dd 1104 parameter[1] = SHIFT_TO_MSB(punch);
mfajaradityo 0:2071f8e463dd 1105
mfajaradityo 0:2071f8e463dd 1106 iWrite(2, PUNCH, parameter);
mfajaradityo 0:2071f8e463dd 1107 sendIPacket();
mfajaradityo 0:2071f8e463dd 1108
mfajaradityo 0:2071f8e463dd 1109 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 1110 getRPacket();
mfajaradityo 0:2071f8e463dd 1111
mfajaradityo 0:2071f8e463dd 1112 wait_ms(restTime); //gives some time to the targeted servo before another Instruction Packet
mfajaradityo 0:2071f8e463dd 1113 }
mfajaradityo 0:2071f8e463dd 1114
mfajaradityo 0:2071f8e463dd 1115 uint16_t XL320::GetPunch(uint8_t id)
mfajaradityo 0:2071f8e463dd 1116 {
mfajaradityo 2:0ec2dce7c5f8 1117 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 1118 pc.printf("Get Punch (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 1119 #endif
mfajaradityo 0:2071f8e463dd 1120 targetID = id;
mfajaradityo 0:2071f8e463dd 1121 targetInst = READ_DATA;
mfajaradityo 0:2071f8e463dd 1122
mfajaradityo 0:2071f8e463dd 1123 iRead(2, PUNCH);
mfajaradityo 0:2071f8e463dd 1124 sendIPacket();
mfajaradityo 0:2071f8e463dd 1125
mfajaradityo 0:2071f8e463dd 1126 rPacketLength = 13;
mfajaradityo 0:2071f8e463dd 1127 getRPacket();
mfajaradityo 0:2071f8e463dd 1128
mfajaradityo 0:2071f8e463dd 1129 wait_ms(restTime);
mfajaradityo 0:2071f8e463dd 1130
mfajaradityo 0:2071f8e463dd 1131 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 1132 {
mfajaradityo 0:2071f8e463dd 1133 case 0x00 : //no error
mfajaradityo 0:2071f8e463dd 1134 return (uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00);
mfajaradityo 0:2071f8e463dd 1135
mfajaradityo 0:2071f8e463dd 1136 default : //error occurred
mfajaradityo 0:2071f8e463dd 1137 return (uint16_t)rPacket[8]; //return error status
mfajaradityo 0:2071f8e463dd 1138 }
mfajaradityo 0:2071f8e463dd 1139 }
mfajaradityo 0:2071f8e463dd 1140
mfajaradityo 0:2071f8e463dd 1141
mfajaradityo 0:2071f8e463dd 1142 /***** XL320 Instruction Method *****/
mfajaradityo 0:2071f8e463dd 1143 void XL320::iFactoryReset(uint8_t id,uint8_t option)
mfajaradityo 0:2071f8e463dd 1144 {
mfajaradityo 2:0ec2dce7c5f8 1145 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 1146 pc.printf("Factory Reset! (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 1147 #endif
mfajaradityo 0:2071f8e463dd 1148 targetID = id;
mfajaradityo 0:2071f8e463dd 1149 targetInst = FACTORY_RESET;
mfajaradityo 0:2071f8e463dd 1150
mfajaradityo 0:2071f8e463dd 1151 iPacket[4] = targetID;
mfajaradityo 0:2071f8e463dd 1152 iPacket[5] = 0x04; //[intruction][reset_option][CRC_LSB][CRC_MSB]
mfajaradityo 0:2071f8e463dd 1153 iPacket[6] = 0x00;
mfajaradityo 0:2071f8e463dd 1154 iPacket[7] = targetInst; //instruction
mfajaradityo 0:2071f8e463dd 1155 iPacket[8] = option; //Intruction Packet's parameter field 0 (reset option)
mfajaradityo 0:2071f8e463dd 1156
mfajaradityo 0:2071f8e463dd 1157 CRC = update_crc(0, iPacket, 9); //All Instruction Packet minus CRC
mfajaradityo 0:2071f8e463dd 1158 iPacket[9] = SHIFT_TO_LSB(CRC);
mfajaradityo 0:2071f8e463dd 1159 iPacket[10] = SHIFT_TO_MSB(CRC);
mfajaradityo 0:2071f8e463dd 1160
mfajaradityo 0:2071f8e463dd 1161 iPacketLength = 11;
mfajaradityo 0:2071f8e463dd 1162 sendIPacket();
mfajaradityo 0:2071f8e463dd 1163
mfajaradityo 0:2071f8e463dd 1164 rPacketLength = 11;
mfajaradityo 0:2071f8e463dd 1165 getRPacket();
mfajaradityo 0:2071f8e463dd 1166 }
mfajaradityo 0:2071f8e463dd 1167
mfajaradityo 0:2071f8e463dd 1168 void XL320::iPing(uint8_t id)
mfajaradityo 0:2071f8e463dd 1169 {
mfajaradityo 2:0ec2dce7c5f8 1170 #ifdef DATA_DEBUG
mfajaradityo 4:2df002cf5f6c 1171 pc.printf("PING! (Servo'%d')\n\r", id);
mfajaradityo 2:0ec2dce7c5f8 1172 #endif
mfajaradityo 0:2071f8e463dd 1173 targetID = id;
mfajaradityo 0:2071f8e463dd 1174 targetInst = PING;
mfajaradityo 0:2071f8e463dd 1175
mfajaradityo 0:2071f8e463dd 1176 iPacket[4] = targetID;
mfajaradityo 0:2071f8e463dd 1177 iPacket[5] = 0x03; //[instruction][CRC_LSB][CRC_MSB]
mfajaradityo 0:2071f8e463dd 1178 iPacket[6] = 0x00;
mfajaradityo 0:2071f8e463dd 1179 iPacket[7] = targetInst; //instruction
mfajaradityo 0:2071f8e463dd 1180
mfajaradityo 0:2071f8e463dd 1181 CRC = update_crc(0, iPacket, 9); //All Instruction Packet minus CRC
mfajaradityo 0:2071f8e463dd 1182 iPacket[8] = SHIFT_TO_LSB(CRC);
mfajaradityo 0:2071f8e463dd 1183 iPacket[9] = SHIFT_TO_MSB(CRC);
mfajaradityo 0:2071f8e463dd 1184
mfajaradityo 0:2071f8e463dd 1185 iPacketLength = 10;
mfajaradityo 0:2071f8e463dd 1186 sendIPacket();
mfajaradityo 0:2071f8e463dd 1187
mfajaradityo 0:2071f8e463dd 1188 rPacketLength = 14;
mfajaradityo 0:2071f8e463dd 1189 getRPacket();
mfajaradityo 0:2071f8e463dd 1190 }
mfajaradityo 0:2071f8e463dd 1191
mfajaradityo 0:2071f8e463dd 1192 /***** Debugging *****/
mfajaradityo 0:2071f8e463dd 1193 void XL320::printLastPackets()
mfajaradityo 0:2071f8e463dd 1194 {
mfajaradityo 0:2071f8e463dd 1195 int i;
mfajaradityo 0:2071f8e463dd 1196
mfajaradityo 0:2071f8e463dd 1197 //print to screen
mfajaradityo 0:2071f8e463dd 1198 pc.printf("Instruction Packet : [");
mfajaradityo 0:2071f8e463dd 1199 for(i = 0; i < iPacketLength; i++)
mfajaradityo 0:2071f8e463dd 1200 {
mfajaradityo 0:2071f8e463dd 1201 pc.printf("'%x' |", iPacket[i]);
mfajaradityo 0:2071f8e463dd 1202 }
mfajaradityo 0:2071f8e463dd 1203 pc.printf("]\n");
mfajaradityo 0:2071f8e463dd 1204 pc.printf("\r");
mfajaradityo 0:2071f8e463dd 1205
mfajaradityo 0:2071f8e463dd 1206 pc.printf("Return Packet : [");
mfajaradityo 0:2071f8e463dd 1207 for(i = 0; i < rPacketLength; i++)
mfajaradityo 0:2071f8e463dd 1208 {
mfajaradityo 0:2071f8e463dd 1209 pc.printf("'%x' |",rPacket[i]);
mfajaradityo 0:2071f8e463dd 1210 }
mfajaradityo 0:2071f8e463dd 1211 pc.printf("]\n");
mfajaradityo 0:2071f8e463dd 1212 pc.printf("\r");
mfajaradityo 0:2071f8e463dd 1213 }
mfajaradityo 0:2071f8e463dd 1214
mfajaradityo 0:2071f8e463dd 1215 void XL320::translateLastRPacket()
mfajaradityo 0:2071f8e463dd 1216 {
mfajaradityo 0:2071f8e463dd 1217 //check Return Packet from Write instruction
mfajaradityo 0:2071f8e463dd 1218 if(rPacket[8] != 0x00) //rPacket[8] is Error Byte
mfajaradityo 0:2071f8e463dd 1219 {
mfajaradityo 0:2071f8e463dd 1220 switch(rPacket[8])
mfajaradityo 0:2071f8e463dd 1221 {
mfajaradityo 0:2071f8e463dd 1222 case RESULT_FAIL :
mfajaradityo 0:2071f8e463dd 1223 pc.printf("Writing Intruction Failed! :(\n\r");
mfajaradityo 0:2071f8e463dd 1224 break;
mfajaradityo 0:2071f8e463dd 1225
mfajaradityo 0:2071f8e463dd 1226 case INS_ERR :
mfajaradityo 0:2071f8e463dd 1227 pc.printf("Undefined Instruction ~.~\n\r");
mfajaradityo 0:2071f8e463dd 1228 break;
mfajaradityo 0:2071f8e463dd 1229
mfajaradityo 0:2071f8e463dd 1230 case CRC_ERR :
mfajaradityo 0:2071f8e463dd 1231 pc.printf("CRC Value Error ~.~\n\r");
mfajaradityo 0:2071f8e463dd 1232 break;
mfajaradityo 0:2071f8e463dd 1233
mfajaradityo 0:2071f8e463dd 1234 case DATA_RANGE_ERR :
mfajaradityo 0:2071f8e463dd 1235 pc.printf("Data Range Error ~.~\n\r");
mfajaradityo 0:2071f8e463dd 1236 break;
mfajaradityo 0:2071f8e463dd 1237
mfajaradityo 0:2071f8e463dd 1238 case DATA_LENGTH_ERR :
mfajaradityo 0:2071f8e463dd 1239 pc.printf("Data too short! -__-\n\r");
mfajaradityo 0:2071f8e463dd 1240 break;
mfajaradityo 0:2071f8e463dd 1241
mfajaradityo 0:2071f8e463dd 1242 case DATA_LIMIT_ERR :
mfajaradityo 0:2071f8e463dd 1243 pc.printf("Data too long! -__-\n\r");
mfajaradityo 0:2071f8e463dd 1244 break;
mfajaradityo 0:2071f8e463dd 1245
mfajaradityo 0:2071f8e463dd 1246 case ACCESS_ERR :
mfajaradityo 0:2071f8e463dd 1247 pc.printf("Not Allowed! >:(\n\r");
mfajaradityo 0:2071f8e463dd 1248 break;
mfajaradityo 0:2071f8e463dd 1249
mfajaradityo 0:2071f8e463dd 1250 default :
mfajaradityo 0:2071f8e463dd 1251 pc.printf("Something is wrong, don't know what ;(\n\r");
mfajaradityo 0:2071f8e463dd 1252 break;
mfajaradityo 0:2071f8e463dd 1253 }
mfajaradityo 0:2071f8e463dd 1254 }
mfajaradityo 0:2071f8e463dd 1255 else
mfajaradityo 0:2071f8e463dd 1256 {
mfajaradityo 0:2071f8e463dd 1257 if(targetInst == WRITE_DATA)
mfajaradityo 0:2071f8e463dd 1258 {
mfajaradityo 0:2071f8e463dd 1259 pc.printf("write Instruction Success!\n\r");
mfajaradityo 0:2071f8e463dd 1260 }
mfajaradityo 0:2071f8e463dd 1261 else
mfajaradityo 0:2071f8e463dd 1262 {
mfajaradityo 0:2071f8e463dd 1263 if(targetInst == READ_DATA)
mfajaradityo 0:2071f8e463dd 1264 {
mfajaradityo 0:2071f8e463dd 1265 switch(targetAddr)
mfajaradityo 0:2071f8e463dd 1266 {
mfajaradityo 0:2071f8e463dd 1267 case BAUD_RATE:
mfajaradityo 0:2071f8e463dd 1268 switch(rPacket[9])
mfajaradityo 0:2071f8e463dd 1269 {
mfajaradityo 0:2071f8e463dd 1270 case 0x00:
mfajaradityo 0:2071f8e463dd 1271 pc.printf("BaudRate : 9600\n\r");
mfajaradityo 0:2071f8e463dd 1272 break;
mfajaradityo 0:2071f8e463dd 1273 case 0x01:
mfajaradityo 0:2071f8e463dd 1274 pc.printf("BaudRate : 57600\n\r");
mfajaradityo 0:2071f8e463dd 1275 break;
mfajaradityo 0:2071f8e463dd 1276 case 0x02:
mfajaradityo 0:2071f8e463dd 1277 pc.printf("BaudRate : 115200\n\r");
mfajaradityo 0:2071f8e463dd 1278 break;
mfajaradityo 3:89bed7a6d852 1279 case 0x03:
mfajaradityo 0:2071f8e463dd 1280 pc.printf("BaudRate : 1000000\n\r");
mfajaradityo 0:2071f8e463dd 1281 break;
mfajaradityo 0:2071f8e463dd 1282 default:
mfajaradityo 0:2071f8e463dd 1283 pc.printf("BaudRate : ??\n\r");
mfajaradityo 0:2071f8e463dd 1284 break;
mfajaradityo 0:2071f8e463dd 1285 }
mfajaradityo 0:2071f8e463dd 1286 break;
mfajaradityo 0:2071f8e463dd 1287
mfajaradityo 0:2071f8e463dd 1288 case RETURN_DELAY_TIME:
mfajaradityo 0:2071f8e463dd 1289 pc.printf("Return Delay Time : '%d'us\n\r", rPacket[9]*2);
mfajaradityo 0:2071f8e463dd 1290 break;
mfajaradityo 4:2df002cf5f6c 1291
mfajaradityo 4:2df002cf5f6c 1292 case CW_ANGLE_LIMIT:
mfajaradityo 4:2df002cf5f6c 1293 pc.printf("CW Angle Limit : '%f' degree\n\r", ((uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00))*0.29);
mfajaradityo 4:2df002cf5f6c 1294 break;
mfajaradityo 4:2df002cf5f6c 1295
mfajaradityo 4:2df002cf5f6c 1296 case CCW_ANGLE_LIMIT:
mfajaradityo 4:2df002cf5f6c 1297 pc.printf("CCW Angle Limit : '%f' degree\n\r", ((uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00))*0.29);
mfajaradityo 4:2df002cf5f6c 1298 break;
mfajaradityo 4:2df002cf5f6c 1299
mfajaradityo 4:2df002cf5f6c 1300 case CONTROL_MODE:
mfajaradityo 4:2df002cf5f6c 1301 if(rPacket[9] == 2)
mfajaradityo 4:2df002cf5f6c 1302 {
mfajaradityo 4:2df002cf5f6c 1303 pc.printf("Control Mode : Join-Mode\n\r");
mfajaradityo 4:2df002cf5f6c 1304 }
mfajaradityo 4:2df002cf5f6c 1305 else
mfajaradityo 4:2df002cf5f6c 1306 {
mfajaradityo 4:2df002cf5f6c 1307 pc.printf("Control Mode : Wheel-Mode\n\r");
mfajaradityo 4:2df002cf5f6c 1308 }
mfajaradityo 4:2df002cf5f6c 1309 break;
mfajaradityo 0:2071f8e463dd 1310
mfajaradityo 0:2071f8e463dd 1311 case GOAL_POSITION:
mfajaradityo 4:2df002cf5f6c 1312 pc.printf("Goal Position : '%f' Degree\n\r", ((uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00))*0.29);
mfajaradityo 0:2071f8e463dd 1313 break;
mfajaradityo 0:2071f8e463dd 1314
mfajaradityo 0:2071f8e463dd 1315 case GOAL_SPEED:
mfajaradityo 4:2df002cf5f6c 1316 pc.printf("Speed in Join-Mode : '%f' rpm\n\r", ((uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00))*0.111);
mfajaradityo 4:2df002cf5f6c 1317 if(((uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00)) < 1024)
mfajaradityo 4:2df002cf5f6c 1318 {
mfajaradityo 4:2df002cf5f6c 1319 pc.printf("Speed in Wheel-Mode : '%f' CW\n\r", ((uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00))*0.1);
mfajaradityo 4:2df002cf5f6c 1320 }
mfajaradityo 4:2df002cf5f6c 1321 else
mfajaradityo 4:2df002cf5f6c 1322 {
mfajaradityo 4:2df002cf5f6c 1323 pc.printf("Speed in Wheel-Mode : '%f' CCW\n\r", (((uint16_t)rPacket[9] | (((uint16_t)rPacket[10]<<8)&0xff00))-1024)*0.1);
mfajaradityo 4:2df002cf5f6c 1324 }
mfajaradityo 0:2071f8e463dd 1325 break;
mfajaradityo 0:2071f8e463dd 1326
mfajaradityo 0:2071f8e463dd 1327 default:
mfajaradityo 0:2071f8e463dd 1328 pc.printf("Value : '%d'\n\r", rPacket[9]);
mfajaradityo 0:2071f8e463dd 1329 break;
mfajaradityo 0:2071f8e463dd 1330 }
mfajaradityo 0:2071f8e463dd 1331 }
mfajaradityo 0:2071f8e463dd 1332 }
mfajaradityo 0:2071f8e463dd 1333 }
mfajaradityo 0:2071f8e463dd 1334 pc.printf("\n\r");
mfajaradityo 0:2071f8e463dd 1335 }
mfajaradityo 0:2071f8e463dd 1336
mfajaradityo 0:2071f8e463dd 1337 /***** XL320 Instruction Method *****/
mfajaradityo 0:2071f8e463dd 1338 void XL320::iRead(uint16_t length, uint16_t address)
mfajaradityo 0:2071f8e463dd 1339 {
mfajaradityo 0:2071f8e463dd 1340 targetAddr = address;
mfajaradityo 0:2071f8e463dd 1341
mfajaradityo 0:2071f8e463dd 1342 iPacket[4] = targetID;
mfajaradityo 0:2071f8e463dd 1343 iPacket[5] = 0x07; //[intruction][address_LSB][address_MSB][DataLength_LSB][DataLength_MSB][CRC_LSB][CRC_MSB]
mfajaradityo 0:2071f8e463dd 1344 iPacket[6] = 0x00;
mfajaradityo 0:2071f8e463dd 1345 iPacket[7] = targetInst; //instruction
mfajaradityo 0:2071f8e463dd 1346 iPacket[8] = SHIFT_TO_LSB(address); //Intruction Packet's parameter field 0 (start address_LSB)
mfajaradityo 0:2071f8e463dd 1347 iPacket[9] = SHIFT_TO_MSB(address); //Instruction Packet's parameter field 1 (start address_MSB)
mfajaradityo 0:2071f8e463dd 1348 iPacket[10] = SHIFT_TO_LSB(length); //Instruction Packet's parameter field 2 (read data length_MSB)
mfajaradityo 0:2071f8e463dd 1349 iPacket[11] = SHIFT_TO_MSB(length); //Instruction Packet's parameter field 3 (read data length_LSB)
mfajaradityo 0:2071f8e463dd 1350
mfajaradityo 0:2071f8e463dd 1351 CRC = update_crc(0, iPacket, 12); //All Instruction Packet minus CRC
mfajaradityo 0:2071f8e463dd 1352 iPacket[12] = SHIFT_TO_LSB(CRC);
mfajaradityo 0:2071f8e463dd 1353 iPacket[13] = SHIFT_TO_MSB(CRC);
mfajaradityo 0:2071f8e463dd 1354
mfajaradityo 0:2071f8e463dd 1355 iPacketLength = 14;
mfajaradityo 0:2071f8e463dd 1356 }
mfajaradityo 0:2071f8e463dd 1357
mfajaradityo 0:2071f8e463dd 1358 void XL320::iWrite(uint8_t length, uint16_t address, uint8_t param[])
mfajaradityo 0:2071f8e463dd 1359 {
mfajaradityo 0:2071f8e463dd 1360 int i;
mfajaradityo 0:2071f8e463dd 1361 targetAddr = address;
mfajaradityo 0:2071f8e463dd 1362
mfajaradityo 0:2071f8e463dd 1363 iPacket[4] = targetID;
mfajaradityo 0:2071f8e463dd 1364 iPacket[5] = (5+length); //[intruction][address_LSB][address_MSB][parameter(length)][CRC_LSB][CRC_MSB]
mfajaradityo 0:2071f8e463dd 1365 iPacket[6] = 0x00;
mfajaradityo 0:2071f8e463dd 1366 iPacket[7] = targetInst; //instruction
mfajaradityo 0:2071f8e463dd 1367 iPacket[8] = SHIFT_TO_LSB(address); //Intruction Packet's parameter field 0 (start address_LSB)
mfajaradityo 0:2071f8e463dd 1368 iPacket[9] = SHIFT_TO_MSB(address); //Instruction Packet's parameter field 1 (start address_MSB)
mfajaradityo 0:2071f8e463dd 1369 for(i = 10; i < 10+length ; i++)
mfajaradityo 0:2071f8e463dd 1370 {
mfajaradityo 0:2071f8e463dd 1371 iPacket[i] = param[i-10]; //Instruction Packet's parameter field 2 and so on (write data n-th byte)
mfajaradityo 0:2071f8e463dd 1372 }
mfajaradityo 0:2071f8e463dd 1373
mfajaradityo 0:2071f8e463dd 1374 CRC = update_crc(0, iPacket, 10+length); //All Instruction Packet minus CRC
mfajaradityo 0:2071f8e463dd 1375 iPacket[i] = SHIFT_TO_LSB(CRC);
mfajaradityo 0:2071f8e463dd 1376 iPacket[i+1] = SHIFT_TO_MSB(CRC);
mfajaradityo 0:2071f8e463dd 1377
mfajaradityo 0:2071f8e463dd 1378 iPacketLength = i+2;
mfajaradityo 0:2071f8e463dd 1379 }
mfajaradityo 0:2071f8e463dd 1380
mfajaradityo 0:2071f8e463dd 1381 /***** Dynamixel Protocol 2.0 Methods *****/
mfajaradityo 0:2071f8e463dd 1382 void XL320::sendIPacket()
mfajaradityo 0:2071f8e463dd 1383 {
mfajaradityo 0:2071f8e463dd 1384 int i;
mfajaradityo 0:2071f8e463dd 1385
mfajaradityo 0:2071f8e463dd 1386 //initialize rPacket
mfajaradityo 0:2071f8e463dd 1387 i = 0;
mfajaradityo 0:2071f8e463dd 1388 for(i = 0; i < nBytes; i++)
mfajaradityo 0:2071f8e463dd 1389 {
mfajaradityo 0:2071f8e463dd 1390 rPacket[i] = 0x99;
mfajaradityo 0:2071f8e463dd 1391 }
mfajaradityo 0:2071f8e463dd 1392
mfajaradityo 0:2071f8e463dd 1393 //send Instruction Packet
mfajaradityo 0:2071f8e463dd 1394 dPin = 1;
mfajaradityo 0:2071f8e463dd 1395 wait_ms(1); //wait for 74HC126 enable pin transition delay
mfajaradityo 0:2071f8e463dd 1396
mfajaradityo 0:2071f8e463dd 1397 for(i = 0; i < iPacketLength; i++)
mfajaradityo 0:2071f8e463dd 1398 {
mfajaradityo 0:2071f8e463dd 1399 sXL320.putc(iPacket[i]);
mfajaradityo 0:2071f8e463dd 1400 }
mfajaradityo 0:2071f8e463dd 1401 }
mfajaradityo 0:2071f8e463dd 1402
mfajaradityo 0:2071f8e463dd 1403 void XL320::getRPacket()
mfajaradityo 0:2071f8e463dd 1404 {
mfajaradityo 0:2071f8e463dd 1405 int i;
mfajaradityo 0:2071f8e463dd 1406 const unsigned int wTimeOut = 500;
mfajaradityo 0:2071f8e463dd 1407 bool wait = true;
mfajaradityo 0:2071f8e463dd 1408
mfajaradityo 0:2071f8e463dd 1409 //read Return Packet
mfajaradityo 0:2071f8e463dd 1410 wait_us(180); //strange..default response time delay should be 500..
mfajaradityo 0:2071f8e463dd 1411 dPin = 0;
mfajaradityo 0:2071f8e463dd 1412
mfajaradityo 0:2071f8e463dd 1413 //wait until Return Packet ready to be read
mfajaradityo 0:2071f8e463dd 1414 i = 0;
mfajaradityo 0:2071f8e463dd 1415 while(!sXL320.readable() && wait)
mfajaradityo 0:2071f8e463dd 1416 {
mfajaradityo 0:2071f8e463dd 1417 wait_us(1); //
mfajaradityo 0:2071f8e463dd 1418 i++;
mfajaradityo 0:2071f8e463dd 1419
mfajaradityo 0:2071f8e463dd 1420 if(i == wTimeOut)
mfajaradityo 0:2071f8e463dd 1421 {
mfajaradityo 0:2071f8e463dd 1422 wait = false;
mfajaradityo 2:0ec2dce7c5f8 1423 #ifdef DATA_DEBUG
mfajaradityo 2:0ec2dce7c5f8 1424 pc.printf("No Return Packet Detected!, ");
mfajaradityo 2:0ec2dce7c5f8 1425 #endif
mfajaradityo 0:2071f8e463dd 1426 }
mfajaradityo 0:2071f8e463dd 1427 }
mfajaradityo 4:2df002cf5f6c 1428 wait_ms(4); //somehow has to wait 4ms after sXL320 is readable
mfajaradityo 0:2071f8e463dd 1429
mfajaradityo 0:2071f8e463dd 1430 i = 0;
mfajaradityo 0:2071f8e463dd 1431 while(sXL320.readable() && i < rPacketLength)
mfajaradityo 0:2071f8e463dd 1432 {
mfajaradityo 0:2071f8e463dd 1433 rPacket[i] = sXL320.getc();
mfajaradityo 0:2071f8e463dd 1434 i++;
mfajaradityo 0:2071f8e463dd 1435 }
mfajaradityo 0:2071f8e463dd 1436 if(i == 0)
mfajaradityo 0:2071f8e463dd 1437 {
mfajaradityo 2:0ec2dce7c5f8 1438 #ifdef DATA_DEBUG
mfajaradityo 2:0ec2dce7c5f8 1439 pc.printf("F*ck! missed the return packet!@#$%^&* \n\r");
mfajaradityo 2:0ec2dce7c5f8 1440 #endif
mfajaradityo 0:2071f8e463dd 1441 }
mfajaradityo 0:2071f8e463dd 1442
mfajaradityo 0:2071f8e463dd 1443 //printLastPackets();
mfajaradityo 0:2071f8e463dd 1444 }
mfajaradityo 0:2071f8e463dd 1445
mfajaradityo 0:2071f8e463dd 1446 /***** Calculating CRC Method *****/
mfajaradityo 0:2071f8e463dd 1447 unsigned short XL320::update_crc(unsigned short crc_accum, unsigned char *data_blk_ptr, unsigned short data_blk_size)
mfajaradityo 0:2071f8e463dd 1448 {
mfajaradityo 0:2071f8e463dd 1449 unsigned short i, j;
mfajaradityo 0:2071f8e463dd 1450 unsigned short crc_table[256] = {
mfajaradityo 0:2071f8e463dd 1451 0x0000, 0x8005, 0x800F, 0x000A, 0x801B, 0x001E, 0x0014, 0x8011,
mfajaradityo 0:2071f8e463dd 1452 0x8033, 0x0036, 0x003C, 0x8039, 0x0028, 0x802D, 0x8027, 0x0022,
mfajaradityo 0:2071f8e463dd 1453 0x8063, 0x0066, 0x006C, 0x8069, 0x0078, 0x807D, 0x8077, 0x0072,
mfajaradityo 0:2071f8e463dd 1454 0x0050, 0x8055, 0x805F, 0x005A, 0x804B, 0x004E, 0x0044, 0x8041,
mfajaradityo 0:2071f8e463dd 1455 0x80C3, 0x00C6, 0x00CC, 0x80C9, 0x00D8, 0x80DD, 0x80D7, 0x00D2,
mfajaradityo 0:2071f8e463dd 1456 0x00F0, 0x80F5, 0x80FF, 0x00FA, 0x80EB, 0x00EE, 0x00E4, 0x80E1,
mfajaradityo 0:2071f8e463dd 1457 0x00A0, 0x80A5, 0x80AF, 0x00AA, 0x80BB, 0x00BE, 0x00B4, 0x80B1,
mfajaradityo 0:2071f8e463dd 1458 0x8093, 0x0096, 0x009C, 0x8099, 0x0088, 0x808D, 0x8087, 0x0082,
mfajaradityo 0:2071f8e463dd 1459 0x8183, 0x0186, 0x018C, 0x8189, 0x0198, 0x819D, 0x8197, 0x0192,
mfajaradityo 0:2071f8e463dd 1460 0x01B0, 0x81B5, 0x81BF, 0x01BA, 0x81AB, 0x01AE, 0x01A4, 0x81A1,
mfajaradityo 0:2071f8e463dd 1461 0x01E0, 0x81E5, 0x81EF, 0x01EA, 0x81FB, 0x01FE, 0x01F4, 0x81F1,
mfajaradityo 0:2071f8e463dd 1462 0x81D3, 0x01D6, 0x01DC, 0x81D9, 0x01C8, 0x81CD, 0x81C7, 0x01C2,
mfajaradityo 0:2071f8e463dd 1463 0x0140, 0x8145, 0x814F, 0x014A, 0x815B, 0x015E, 0x0154, 0x8151,
mfajaradityo 0:2071f8e463dd 1464 0x8173, 0x0176, 0x017C, 0x8179, 0x0168, 0x816D, 0x8167, 0x0162,
mfajaradityo 0:2071f8e463dd 1465 0x8123, 0x0126, 0x012C, 0x8129, 0x0138, 0x813D, 0x8137, 0x0132,
mfajaradityo 0:2071f8e463dd 1466 0x0110, 0x8115, 0x811F, 0x011A, 0x810B, 0x010E, 0x0104, 0x8101,
mfajaradityo 0:2071f8e463dd 1467 0x8303, 0x0306, 0x030C, 0x8309, 0x0318, 0x831D, 0x8317, 0x0312,
mfajaradityo 0:2071f8e463dd 1468 0x0330, 0x8335, 0x833F, 0x033A, 0x832B, 0x032E, 0x0324, 0x8321,
mfajaradityo 0:2071f8e463dd 1469 0x0360, 0x8365, 0x836F, 0x036A, 0x837B, 0x037E, 0x0374, 0x8371,
mfajaradityo 0:2071f8e463dd 1470 0x8353, 0x0356, 0x035C, 0x8359, 0x0348, 0x834D, 0x8347, 0x0342,
mfajaradityo 0:2071f8e463dd 1471 0x03C0, 0x83C5, 0x83CF, 0x03CA, 0x83DB, 0x03DE, 0x03D4, 0x83D1,
mfajaradityo 0:2071f8e463dd 1472 0x83F3, 0x03F6, 0x03FC, 0x83F9, 0x03E8, 0x83ED, 0x83E7, 0x03E2,
mfajaradityo 0:2071f8e463dd 1473 0x83A3, 0x03A6, 0x03AC, 0x83A9, 0x03B8, 0x83BD, 0x83B7, 0x03B2,
mfajaradityo 0:2071f8e463dd 1474 0x0390, 0x8395, 0x839F, 0x039A, 0x838B, 0x038E, 0x0384, 0x8381,
mfajaradityo 0:2071f8e463dd 1475 0x0280, 0x8285, 0x828F, 0x028A, 0x829B, 0x029E, 0x0294, 0x8291,
mfajaradityo 0:2071f8e463dd 1476 0x82B3, 0x02B6, 0x02BC, 0x82B9, 0x02A8, 0x82AD, 0x82A7, 0x02A2,
mfajaradityo 0:2071f8e463dd 1477 0x82E3, 0x02E6, 0x02EC, 0x82E9, 0x02F8, 0x82FD, 0x82F7, 0x02F2,
mfajaradityo 0:2071f8e463dd 1478 0x02D0, 0x82D5, 0x82DF, 0x02DA, 0x82CB, 0x02CE, 0x02C4, 0x82C1,
mfajaradityo 0:2071f8e463dd 1479 0x8243, 0x0246, 0x024C, 0x8249, 0x0258, 0x825D, 0x8257, 0x0252,
mfajaradityo 0:2071f8e463dd 1480 0x0270, 0x8275, 0x827F, 0x027A, 0x826B, 0x026E, 0x0264, 0x8261,
mfajaradityo 0:2071f8e463dd 1481 0x0220, 0x8225, 0x822F, 0x022A, 0x823B, 0x023E, 0x0234, 0x8231,
mfajaradityo 0:2071f8e463dd 1482 0x8213, 0x0216, 0x021C, 0x8219, 0x0208, 0x820D, 0x8207, 0x0202
mfajaradityo 0:2071f8e463dd 1483 };
mfajaradityo 0:2071f8e463dd 1484
mfajaradityo 0:2071f8e463dd 1485 for(j = 0; j < data_blk_size; j++)
mfajaradityo 0:2071f8e463dd 1486 {
mfajaradityo 0:2071f8e463dd 1487 i = ((unsigned short)(crc_accum >> 8) ^ data_blk_ptr[j]) & 0xFF;
mfajaradityo 0:2071f8e463dd 1488 crc_accum = (crc_accum << 8) ^ crc_table[i];
mfajaradityo 0:2071f8e463dd 1489 }
mfajaradityo 0:2071f8e463dd 1490
mfajaradityo 0:2071f8e463dd 1491 return crc_accum;
mfajaradityo 0:2071f8e463dd 1492 }
mfajaradityo 0:2071f8e463dd 1493
mfajaradityo 0:2071f8e463dd 1494
mfajaradityo 0:2071f8e463dd 1495 XL320::~XL320(){};