]> Repositories - Adafruit_Blinka-hackapet.git/blobdiff - src/adafruit_blinka/microcontroller/pico_u2if/pwmio.py
add pico u2if
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / pico_u2if / pwmio.py
diff --git a/src/adafruit_blinka/microcontroller/pico_u2if/pwmio.py b/src/adafruit_blinka/microcontroller/pico_u2if/pwmio.py
new file mode 100644 (file)
index 0000000..f849ae0
--- /dev/null
@@ -0,0 +1,46 @@
+"""PWMOut Class for Pico u2if"""
+from .pico_u2if import pico_u2if
+
+
+class PWMOut:
+    """Pulse Width Modulation Output Class"""
+
+    def __init__(self, pin, *, frequency=500, duty_cycle=0, variable_frequency=False):
+        pico_u2if.pwm_configure(
+            pin,
+            frequency=frequency,
+            duty_cycle=duty_cycle,
+            variable_frequency=variable_frequency,
+        )
+
+        self._pin = pin
+
+    def __del__(self):
+        self.deinit()
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, t, value, traceback):
+        self.deinit()
+
+    def deinit(self):
+        pico_u2if.pwm_deinit(self._pin)
+
+    @property
+    def duty_cycle(self):
+        """The PWM's output duty cycle, 16-bit."""
+        return pico_u2if.pwm_get_duty_cycle(self._pin)
+
+    @duty_cycle.setter
+    def duty_cycle(self, duty_cycle):
+        pico_u2if.pwm_set_duty_cycle(self._pin, duty_cycle)
+
+    @property
+    def frequency(self):
+        """The PWM's output frequency in Hertz."""
+        return pico_u2if.pwm_get_frequency(self._pin)
+
+    @frequency.setter
+    def frequency(self, frequency):
+        pico_u2if.pwm_set_frequency(self._pin, frequency)