Create servo configuration

This commit is contained in:
Christoph Hagen 2023-08-09 13:38:12 +02:00
parent d13bf67443
commit b99245085e
3 changed files with 56 additions and 30 deletions

View File

@ -3,6 +3,39 @@
#include <stdint.h> #include <stdint.h>
#include <ESP32Servo.h> // To control the servo #include <ESP32Servo.h> // To control the servo
typedef struct ServoConfiguration {
/**
* @brief The timer to use for the servo control
* number 0-3 indicating which timer to allocate in this library
*/
int pwmTimer;
/**
* @brief The servo frequency (depending on the model used)
*/
int pwmFrequency;
/**
* @brief The pin where the servo PWM line is connected
*/
int pin;
/**
* @brief The duration (in ms) for which the button should remain pressed
*/
uint32_t openDuration;
/**
* @brief The servo value (in µs) that specifies the 'pressed' state
*/
int pressedValue;
/**
* @brief The servo value (in µs) that specifies the 'released' state
*/
int releasedValue;
};
/** /**
* @brief A controller for the button control servo * @brief A controller for the button control servo
* *
@ -17,22 +50,16 @@ class ServoController {
public: public:
/** /**
* @brief Construct a new Servo Controller object * @brief Construct a new servo controller
*
* @param timer The timer to use for the servo control
* @param frequency The servo frequency (depending on the model used)
* @param pin The pin where the servo PWM line is connected
*/ */
ServoController(int timer, int frequency, int pin); ServoController();
/** /**
* @brief Configure the button values * @brief Configure the servo
* *
* @param openDuration The duration (in ms) for which the button should remain pressed * @param The configuration for the servo
* @param pressedValue The servo value (in µs) that specifies the 'pressed' state
* @param releasedValue The servo value (in µs) that specifies the 'released' state
*/ */
void configure(uint32_t openDuration, int pressedValue, int releasedValue); void configure(ServoConfiguration configuration);
/** /**
* @brief Update the servo state periodically * @brief Update the servo state periodically
@ -60,12 +87,6 @@ private:
// Indicator that the door button is pushed // Indicator that the door button is pushed
bool buttonIsPressed = false; bool buttonIsPressed = false;
int timer;
int frequency;
int pin;
uint32_t openDuration = 0; uint32_t openDuration = 0;
int pressedValue = 0; int pressedValue = 0;

View File

@ -23,7 +23,7 @@ TimeCheck timeCheck{};
ServerConnection server(serverUrl, serverPort, serverPath); ServerConnection server(serverUrl, serverPort, serverPath);
ServoController servo(pwmTimer, servoFrequency, servoPin); ServoController servo{};
AsyncWebServer local(localPort); AsyncWebServer local(localPort);
@ -40,7 +40,15 @@ void setup() {
Serial.setDebugOutput(true); Serial.setDebugOutput(true);
Serial.println("[INFO] Device started"); Serial.println("[INFO] Device started");
servo.configure(lockOpeningDuration, servoPressedState, servoReleasedState); ServoConfiguration servoConfig;
servoConfig.pwmTimer = pwmTimer;
servoConfig.pwmFrequency = servoFrequency;
servoConfig.pin = servoPin;
servoConfig.openDuration = lockOpeningDuration;
servoConfig.pressedValue = servoPressedState;
servoConfig.releasedValue = servoReleasedState;
servo.configure(servoConfig);
Serial.println("[INFO] Servo configured"); Serial.println("[INFO] Servo configured");
controller.configure(); controller.configure();

View File

@ -2,18 +2,15 @@
#include <esp32-hal.h> // For `millis()` #include <esp32-hal.h> // For `millis()`
ServoController::ServoController(int timer, int frequency, int pin) ServoController::ServoController() { }
: timer(timer), frequency(frequency), pin(pin) {
}
void ServoController::configure(uint32_t openDuration, int pressedValue, int releasedValue) { void ServoController::configure(ServoConfiguration configuration) {
this->openDuration = openDuration; openDuration = configuration.openDuration;
this->pressedValue = pressedValue; pressedValue = configuration.pressedValue;
this->releasedValue = releasedValue; releasedValue = configuration.releasedValue;
ESP32PWM::allocateTimer(timer); ESP32PWM::allocateTimer(configuration.pwmTimer);
servo.setPeriodHertz(frequency); servo.setPeriodHertz(configuration.pwmFrequency);
servo.attach(pin); servo.attach(configuration.pin);
releaseButton(); releaseButton();
} }