@@ -193,6 +193,9 @@ void SmartServoClass::begin()
193
193
writeByteCmd (BROADCAST, REG (SmartServoRegister::SERVO_MOTOR_MODE), 1 );
194
194
writeByteCmd (BROADCAST, REG (SmartServoRegister::TORQUE_SWITCH) ,1 );
195
195
_positionMode = PositionMode::IMMEDIATE;
196
+
197
+ for (int i = MIN_MOTOR_ID; i <= MAX_MOTOR_ID; i++)
198
+ _targetSpeed[idToArrayIndex (i)] = 1000 ;
196
199
}
197
200
198
201
void SmartServoClass::setPosition (uint8_t const id, float const angle)
@@ -231,13 +234,15 @@ void SmartServoClass::synchronize()
231
234
_txPacket.length = MAX_TX_PAYLOAD_LEN;
232
235
_txPacket.instruction = CMD (SmartServoOperation::SYNC_WRITE);
233
236
_txPacket.payload [0 ] = REG (SmartServoRegister::TARGET_POSITION_H);
234
- _txPacket.payload [1 ] = 2 ;
237
+ _txPacket.payload [1 ] = 4 ;
235
238
int index = 2 ;
236
239
237
240
for (int i = MIN_MOTOR_ID; i <= MAX_MOTOR_ID; i++) {
238
241
_txPacket.payload [index++] = i;
239
- _txPacket.payload [index++] = _targetPosition[idToArrayIndex (i)] >>8 ;
242
+ _txPacket.payload [index++] = _targetPosition[idToArrayIndex (i)]>>8 ;
240
243
_txPacket.payload [index++] = _targetPosition[idToArrayIndex (i)];
244
+ _txPacket.payload [index++] = _targetSpeed[idToArrayIndex (i)]>>8 ;
245
+ _txPacket.payload [index++] = _targetSpeed[idToArrayIndex (i)];
241
246
}
242
247
sendPacket ();
243
248
}
@@ -254,9 +259,18 @@ void SmartServoClass::setTorque(uint8_t const id, bool const torque)
254
259
writeByteCmd (id, REG (SmartServoRegister::TORQUE_SWITCH), torque ? 1 : 0 );
255
260
}
256
261
262
+ void SmartServoClass::setTime (uint16_t const time)
263
+ {
264
+ mbed::ScopedLock<rtos::Mutex> lock (_mtx);
265
+ for (int i = MIN_MOTOR_ID; i <= MAX_MOTOR_ID; i++)
266
+ _targetSpeed[idToArrayIndex (i)] = time;
267
+ writeWordCmd (BROADCAST, REG (SmartServoRegister::RUN_TIME_H), time);
268
+ }
269
+
257
270
void SmartServoClass::setTime (uint8_t const id, uint16_t const time)
258
271
{
259
272
mbed::ScopedLock<rtos::Mutex> lock (_mtx);
273
+ if ((id >= MIN_MOTOR_ID) && (id <= MAX_MOTOR_ID)) _targetSpeed[idToArrayIndex (id)] = time;
260
274
writeWordCmd (id, REG (SmartServoRegister::RUN_TIME_H), time);
261
275
}
262
276
0 commit comments