diff --git a/src/boards/RIGv2/Actuators/Actuators.cpp b/src/boards/RIGv2/Actuators/Actuators.cpp index 6e5d69fc82c487cc2accfdb6fb0e3669367fef75..73e81f65a893566f6dfc7e929410bd429999bbd3 100644 --- a/src/boards/RIGv2/Actuators/Actuators.cpp +++ b/src/boards/RIGv2/Actuators/Actuators.cpp @@ -119,13 +119,21 @@ bool Actuators::start() infos[8].servo->enable(); infos[9].servo->enable(); - size_t result = - scheduler.addTask([this]() { updatePositionsTask(); }, - Config::Servos::SERVO_TIMINGS_CHECK_PERIOD); - if (result == 0) + if (updatePositionTaskId == 0) { - LOG_ERR(logger, "Failed to add updatePositionsTask"); - return false; + updatePositionTaskId = + scheduler.addTask([this]() { updatePositionsTask(); }, + Config::Servos::SERVO_TIMINGS_CHECK_PERIOD); + + if (updatePositionTaskId == 0) + { + LOG_ERR(logger, "Failed to add updatePositionsTask"); + return false; + } + } + else + { + scheduler.enableTask(updatePositionTaskId); } return true; @@ -144,8 +152,7 @@ void Actuators::stop() infos[8].servo->disable(); infos[9].servo->disable(); - // We just can only hope the scheduler is also disabled, otherwise bad - // things will happen + scheduler.disableTask(updatePositionTaskId); } bool Actuators::wiggleServo(ServosList servo) diff --git a/src/boards/RIGv2/Actuators/Actuators.h b/src/boards/RIGv2/Actuators/Actuators.h index 008ffcf97a1bb6375d43415333dd273425ec3761..f8fe6edc2047c4474e2d185780674c19d94def2c 100644 --- a/src/boards/RIGv2/Actuators/Actuators.h +++ b/src/boards/RIGv2/Actuators/Actuators.h @@ -84,6 +84,7 @@ private: Boardcore::TaskScheduler &scheduler; + size_t updatePositionTaskId = 0; miosix::FastMutex infosMutex; ServoInfo infos[10] = {}; };