Added get_channels() method to PCA9685 driver
This commit is contained in:
parent
132c659d3c
commit
abf793e703
1 changed files with 29 additions and 2 deletions
|
@ -32,6 +32,7 @@ class PwmPca9685Plugin(Plugin):
|
||||||
|
|
||||||
MIN_PWM_VALUE = 0
|
MIN_PWM_VALUE = 0
|
||||||
MAX_PWM_VALUE = 0xffff
|
MAX_PWM_VALUE = 0xffff
|
||||||
|
N_CHANNELS = 16
|
||||||
|
|
||||||
def __init__(self, frequency: float, step_value: float = 0.1, step_duration: float = 0.05, **kwargs):
|
def __init__(self, frequency: float, step_value: float = 0.1, step_duration: float = 0.05, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -48,13 +49,23 @@ class PwmPca9685Plugin(Plugin):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _convert_percent_to_duty_cycle(value: float) -> int:
|
def _convert_percent_to_duty_cycle(value: float) -> int:
|
||||||
"""
|
"""
|
||||||
Convert a duty cycle percentage value to a PCA9685 value between 0 and `0xffff`.
|
Convert a duty cycle percentage value to a PCA9685 value between 0 and ``0xffff``.
|
||||||
|
|
||||||
:param value: Duty cycle value, between 0 and 1.
|
:param value: Duty cycle value, between 0 and 1.
|
||||||
:return: Duty cycle 16-bit value, between 0 and `0xffff`.
|
:return: Duty cycle 16-bit value, between 0 and ``0xffff``.
|
||||||
"""
|
"""
|
||||||
return int(value * 65535)
|
return int(value * 65535)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _convert_duty_cycle_to_percent(value: int) -> float:
|
||||||
|
"""
|
||||||
|
Convert a PCA9685 duty cycle value value to a percentage value.
|
||||||
|
|
||||||
|
:param value: Duty cycle 16-bit value, between 0 and ``0xffff``.
|
||||||
|
:return: Duty cycle percentage, between 0 and 1.
|
||||||
|
"""
|
||||||
|
return value / 65535
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def execute(self, channels: Dict[int, float], frequency: Optional[float] = None, step_value: Optional[float] = None,
|
def execute(self, channels: Dict[int, float], frequency: Optional[float] = None, step_value: Optional[float] = None,
|
||||||
step_duration: Optional[float] = None):
|
step_duration: Optional[float] = None):
|
||||||
|
@ -97,6 +108,22 @@ class PwmPca9685Plugin(Plugin):
|
||||||
|
|
||||||
time.sleep(step_duration)
|
time.sleep(step_duration)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def get_channels(self) -> Dict[int, float]:
|
||||||
|
"""
|
||||||
|
Get the current duty cycle value of the channels.
|
||||||
|
|
||||||
|
:return: A map in the format ``channel_index -> value``, where ``value`` is the duty cycle of the associated
|
||||||
|
channel, as a percentage value between 0 and 1.
|
||||||
|
"""
|
||||||
|
if not self._pca:
|
||||||
|
return {i: 0 for i in range(self.N_CHANNELS)}
|
||||||
|
|
||||||
|
return {
|
||||||
|
i: self._convert_duty_cycle_to_percent(channel.duty_cycle)
|
||||||
|
for i, channel in enumerate(self._pca.channels)
|
||||||
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def deinit(self):
|
def deinit(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue