Skip to content

Commit 08b17a2

Browse files
authored
Merge pull request #70 from arduino-libraries/fix-flaky-led
Improve fault tolerance of logic showing connected motors.
2 parents 00bc5d4 + 37c8b3c commit 08b17a2

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

src/Braccio++.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -342,15 +342,26 @@ void BraccioClass::setMotorConnectionStatus(int const id, bool const is_connecte
342342

343343
void BraccioClass::motorConnectedThreadFunc()
344344
{
345+
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 = 2;
349+
345350
for (;;)
346351
{
347352
if (isPingAllowed())
348353
{
349-
for (int id = SmartServoClass::MIN_MOTOR_ID; id <= SmartServoClass::MAX_MOTOR_ID; id++)
350-
{
351-
bool const is_connected = (_servos.ping(id) == 0);
352-
setMotorConnectionStatus(id, is_connected);
353-
}
354+
bool const is_connected = (_servos.ping(next_id_to_be_pinged) == 0);
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+
364+
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++) {
356367
if (connected(id))
@@ -359,7 +370,7 @@ void BraccioClass::motorConnectedThreadFunc()
359370
expander_setRed(id);
360371
}
361372
}
362-
delay(1000);
373+
delay(500);
363374
}
364375
}
365376

0 commit comments

Comments
 (0)