@@ -193,6 +193,9 @@ void SmartServoClass::begin()
193193 writeByteCmd (BROADCAST, REG (SmartServoRegister::SERVO_MOTOR_MODE), 1 );
194194 writeByteCmd (BROADCAST, REG (SmartServoRegister::TORQUE_SWITCH) ,1 );
195195 _positionMode = PositionMode::IMMEDIATE;
196+
197+ for (int i = MIN_MOTOR_ID; i <= MAX_MOTOR_ID; i++)
198+ _targetSpeed[idToArrayIndex (i)] = 1000 ;
196199}
197200
198201void SmartServoClass::setPosition (uint8_t const id, float const angle)
@@ -231,13 +234,15 @@ void SmartServoClass::synchronize()
231234 _txPacket.length = MAX_TX_PAYLOAD_LEN;
232235 _txPacket.instruction = CMD (SmartServoOperation::SYNC_WRITE);
233236 _txPacket.payload [0 ] = REG (SmartServoRegister::TARGET_POSITION_H);
234- _txPacket.payload [1 ] = 2 ;
237+ _txPacket.payload [1 ] = 4 ;
235238 int index = 2 ;
236239
237240 for (int i = MIN_MOTOR_ID; i <= MAX_MOTOR_ID; i++) {
238241 _txPacket.payload [index++] = i;
239- _txPacket.payload [index++] = _targetPosition[idToArrayIndex (i)] >>8 ;
242+ _txPacket.payload [index++] = _targetPosition[idToArrayIndex (i)]>>8 ;
240243 _txPacket.payload [index++] = _targetPosition[idToArrayIndex (i)];
244+ _txPacket.payload [index++] = _targetSpeed[idToArrayIndex (i)]>>8 ;
245+ _txPacket.payload [index++] = _targetSpeed[idToArrayIndex (i)];
241246 }
242247 sendPacket ();
243248}
@@ -254,9 +259,18 @@ void SmartServoClass::setTorque(uint8_t const id, bool const torque)
254259 writeByteCmd (id, REG (SmartServoRegister::TORQUE_SWITCH), torque ? 1 : 0 );
255260}
256261
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+
257270void SmartServoClass::setTime (uint8_t const id, uint16_t const time)
258271{
259272 mbed::ScopedLock<rtos::Mutex> lock (_mtx);
273+ if ((id >= MIN_MOTOR_ID) && (id <= MAX_MOTOR_ID)) _targetSpeed[idToArrayIndex (id)] = time;
260274 writeWordCmd (id, REG (SmartServoRegister::RUN_TIME_H), time);
261275}
262276
0 commit comments