diff --git a/src/boards/Payload/Actuators/Actuators.cpp b/src/boards/Payload/Actuators/Actuators.cpp index bff5fef5dca3574877348b8a203f3db9543e3993..64bacece82e6e31ef19c0087ea3757d9be95faf5 100644 --- a/src/boards/Payload/Actuators/Actuators.cpp +++ b/src/boards/Payload/Actuators/Actuators.cpp @@ -28,8 +28,10 @@ #include <drivers/timer/TimerUtils.h> #include <interfaces-impl/hwmapping.h> +using namespace std::chrono; using namespace miosix; using namespace Boardcore; +using namespace Boardcore::Units::Frequency; namespace config = Payload::Config::Actuators; namespace Payload @@ -53,8 +55,9 @@ Actuators::Actuators() config::RightServo::MAX_PULSE.count()); rightServo.fullRangeAngle = config::RightServo::ROTATION; - buzzer = - std::make_unique<PWM>(MIOSIX_BUZZER_TIM, config::Buzzer::FREQUENCY); + auto frequency = + static_cast<uint16_t>(Hertz{config::Buzzer::FREQUENCY}.value()); + buzzer = std::make_unique<PWM>(MIOSIX_BUZZER_TIM, frequency); buzzer->setDutyCycle(TimerUtils::Channel::MIOSIX_BUZZER_CHANNEL, config::Buzzer::DUTY_CYCLE); } @@ -96,7 +99,7 @@ bool Actuators::start() } auto buzzerTaskId = scheduler.addTask([this]() { updateBuzzer(); }, - config::Buzzer::UPDATE_PERIOD, + config::Buzzer::UPDATE_RATE, TaskScheduler::Policy::RECOVER); if (buzzerTaskId == 0) { @@ -105,7 +108,7 @@ bool Actuators::start() } auto statusTaskId = scheduler.addTask([this]() { updateStatusLed(); }, - config::StatusLed::UPDATE_PERIOD, + config::StatusLed::UPDATE_RATE, TaskScheduler::Policy::RECOVER); if (statusTaskId == 0) { @@ -239,7 +242,7 @@ void Actuators::setBuzzerOff() { buzzerThreshold = 0; } void Actuators::setBuzzerOnLand() { - buzzerThreshold = config::Buzzer::ON_LAND_PERIOD.count(); + buzzerThreshold = config::Buzzer::LANDED_PERIOD.count(); } void Actuators::setBuzzerArmed() @@ -286,7 +289,10 @@ void Actuators::updateBuzzer() else { buzzerOff(); - buzzerCounter += config::Buzzer::UPDATE_PERIOD.count(); + constexpr auto period = + 1000ms / static_cast<milliseconds::rep>( + Hertz{config::Buzzer::UPDATE_RATE}.value()); + buzzerCounter += period.count(); } } @@ -313,7 +319,10 @@ void Actuators::updateStatusLed() } else { - statusLedCounter += config::StatusLed::UPDATE_PERIOD.count(); + constexpr auto period = + 1000ms / static_cast<milliseconds::rep>( + Hertz{config::StatusLed::UPDATE_RATE}.value()); + statusLedCounter += period.count(); } } diff --git a/src/boards/Payload/Configs/ActuatorsConfig.h b/src/boards/Payload/Configs/ActuatorsConfig.h index 5db0e01bc8ba2a58c8364ccaf851c897907d8eab..06ea85c8d08ba0ceedbdb93d472123cf114c6d2e 100644 --- a/src/boards/Payload/Configs/ActuatorsConfig.h +++ b/src/boards/Payload/Configs/ActuatorsConfig.h @@ -22,6 +22,8 @@ #pragma once +#include <units/Frequency.h> + #include <chrono> namespace Payload @@ -32,6 +34,7 @@ namespace Actuators { /* linter off */ using namespace std::chrono_literals; +/* linter off */ using namespace Boardcore::Units::Frequency; // On Lyra 6-gear planetary multiplier: 100us ~= 1cm @@ -51,18 +54,18 @@ constexpr auto MAX_PULSE = 500us; namespace StatusLed { -constexpr auto UPDATE_PERIOD = 50ms; -constexpr auto OK_PERIOD = 1000ms; -constexpr auto ERROR_PERIOD = 500ms; +constexpr auto UPDATE_RATE = 10_hz; +constexpr auto OK_PERIOD = 1000ms; +constexpr auto ERROR_PERIOD = 100ms; } // namespace StatusLed namespace Buzzer { -constexpr auto UPDATE_PERIOD = 50ms; -constexpr auto ON_LAND_PERIOD = 1000ms; -constexpr auto ARMED_PERIOD = 500ms; +constexpr auto UPDATE_RATE = 10_hz; +constexpr auto ARMED_PERIOD = 500ms; +constexpr auto LANDED_PERIOD = 1000ms; // PWM parameters -constexpr auto FREQUENCY = 1000; // [Hz] +constexpr auto FREQUENCY = 500_hz; constexpr auto DUTY_CYCLE = 0.5f; } // namespace Buzzer