10enum MemoryAddress : uint8_t {
11 kMemAddrPwmDuty0 = 0x50,
12 kMemAddrPwmDuty1 = 0x52,
13 kMemAddrPwmDuty2 = 0x54,
14 kMemAddrPwmDuty3 = 0x56,
15 kMemAddrFrequency = 0x60,
19Dm11::Dm11(
const uint8_t i2c_address, TwoWire& wire) : i2c_address_(i2c_address), wire_(wire) {
27 wire_.beginTransmission(i2c_address_);
28 wire_.write(kMemAddrFrequency);
29 wire_.write(
reinterpret_cast<const uint8_t*
>(&frequency_hz),
sizeof(frequency_hz));
30 const auto ret =
static_cast<ErrorCode>(wire_.endTransmission());
36 wire_.beginTransmission(i2c_address_);
37 wire_.write(kMemAddrPwmDuty0);
38 wire_.write(
reinterpret_cast<const uint8_t*
>(duties),
sizeof(duties));
39 return static_cast<ErrorCode>(wire_.endTransmission());
47 wire_.beginTransmission(i2c_address_);
48 wire_.write(kMemAddrPwmDuty0 + (((pwm_channel + 2) %
kPwmChannelNum) << 1));
49 wire_.write(
reinterpret_cast<const uint8_t*
>(&duty),
sizeof(duty));
50 return static_cast<ErrorCode>(wire_.endTransmission());
static constexpr uint16_t kMaxFrequencyHz
最大PWM波频率。
static constexpr uint16_t kMaxPwmDuty
最大PWM占空比。
Dm11(const uint8_t i2c_address=kDefaultI2cAddress, TwoWire &wire=Wire)
构造函数,指定 I2C 地址和 TwoWire 对象。
ErrorCode PwmDuty(const PwmChannel pwm_channel, uint16_t duty)
设置指定通道的 PWM 占空比。
ErrorCode Init(const uint16_t frequency_hz=1000)
初始化函数。