pimoroni-pico/drivers/servo/servo.hpp

70 lines
1.8 KiB
C++
Raw Normal View History

#pragma once
#include "pico/stdlib.h"
#include "hardware/pwm.h"
#include "servo_state.hpp"
namespace servo {
class Servo {
//--------------------------------------------------
// Variables
//--------------------------------------------------
private:
uint servo_pin;
2022-03-02 18:59:17 +00:00
ServoState state;
pwm_config pwm_cfg;
uint16_t pwm_period;
2022-03-02 18:59:17 +00:00
float pwm_frequency;
//--------------------------------------------------
// Constructors/Destructor
//--------------------------------------------------
public:
2022-03-02 18:59:17 +00:00
Servo(uint pin, CalibrationType default_type = ANGULAR, float freq = ServoState::DEFAULT_FREQUENCY);
Servo(uint pin, const Calibration& calibration, float freq = ServoState::DEFAULT_FREQUENCY);
~Servo();
//--------------------------------------------------
// Methods
//--------------------------------------------------
public:
bool init();
// For print access in micropython
uint pin() const;
void enable();
void disable();
2022-02-17 22:38:59 +00:00
bool is_enabled() const;
float pulse() const;
void pulse(float pulse);
float value() const;
void value(float value);
float frequency() const;
bool frequency(float freq);
2022-02-19 01:07:19 +00:00
//--------------------------------------------------
float min_value() const;
float mid_value() const;
float max_value() const;
2022-02-17 22:38:59 +00:00
void to_min();
void to_mid();
void to_max();
2022-02-17 22:38:59 +00:00
void to_percent(float in, float in_min = ServoState::ZERO_PERCENT, float in_max = ServoState::ONEHUNDRED_PERCENT);
void to_percent(float in, float in_min, float in_max, float value_min, float value_max);
Calibration& calibration();
2022-02-17 22:38:59 +00:00
const Calibration& calibration() const;
//--------------------------------------------------
private:
void apply_pulse(float pulse);
};
}