Skip to content

Commit 47df148

Browse files
committed
Only signal missing servo after three consecutive lost pings.
1 parent 7ce2ba4 commit 47df148

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/Braccio++.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,13 +343,24 @@ void BraccioClass::setMotorConnectionStatus(int const id, bool const is_connecte
343343
void BraccioClass::motorConnectedThreadFunc()
344344
{
345345
int next_id_to_be_pinged = SmartServoClass::MIN_MOTOR_ID;
346+
int servo_missed_ping_cnt[SmartServoClass::NUM_MOTORS] = {0};
347+
348+
static int const MAX_MISSED_PING_CNT = 3;
346349

347350
for (;;)
348351
{
349352
if (isPingAllowed())
350353
{
351354
bool const is_connected = (_servos.ping(next_id_to_be_pinged) == 0);
352-
setMotorConnectionStatus(next_id_to_be_pinged, is_connected);
355+
356+
if (!is_connected) servo_missed_ping_cnt[SmartServoClass::idToArrayIndex(next_id_to_be_pinged)]++;
357+
else servo_missed_ping_cnt[SmartServoClass::idToArrayIndex(next_id_to_be_pinged)] = 0;
358+
359+
if (servo_missed_ping_cnt[SmartServoClass::idToArrayIndex(next_id_to_be_pinged)] > MAX_MISSED_PING_CNT)
360+
setMotorConnectionStatus(next_id_to_be_pinged, false);
361+
else
362+
setMotorConnectionStatus(next_id_to_be_pinged, true);
363+
353364
next_id_to_be_pinged = (next_id_to_be_pinged < SmartServoClass::MAX_MOTOR_ID) ? next_id_to_be_pinged + 1 : SmartServoClass::MIN_MOTOR_ID;
354365

355366
for (int id = SmartServoClass::MIN_MOTOR_ID; id <= SmartServoClass::MAX_MOTOR_ID; id++) {

0 commit comments

Comments
 (0)