Source code for pi_weather.core.io.buzzer

"""Module to define general behavior for a given buzzer"""

from time import sleep
from typing import Optional

from gpiozero.output_devices import Buzzer

from pi_weather.utils.logs import get_logger

logger = get_logger(__name__)


[docs] class ActiveBuzzer: """ Class to manage an active buzzer """
[docs] def __init__(self, pin: int) -> None: """ C-tor function to define an active buzzer :param pin: PIN of the buzzer :type pin: int """ self._buzzer: Optional[Buzzer] = None self._pin: int = pin self.setup_buzzer()
[docs] def setup_buzzer(self) -> None: """ Function to set up the active buzzer object :return: Nothing :rtype: None """ # Possible states: # LOW := ON # HIGH := OFF # Reason: Low-level trigger on this buzzer self._buzzer = Buzzer( pin=self._pin, active_high=False, # This buzzer has a low-level trigger initial_value=False, # We set the initial value to OFF (:= False) )
[docs] def turn_on(self) -> None: """ Function to turn on the buzzer :return: Nothing :rtype: None """ if self._buzzer: self._buzzer.on() logger.info("Turning on buzzer")
[docs] def turn_off(self) -> None: """ Function to turn off the buzzer :return: Nothing :rtype: None """ if self._buzzer: self._buzzer.off() logger.info("Turning off buzzer")
[docs] def beep(self, duration: float = 0.5) -> None: """ Function to make the buzzer beep :param duration: Duration of the beep (in seconds) :type duration: float :return: Nothing :rtype: None """ self.turn_on() sleep(duration) self.turn_off()
[docs] def close(self) -> None: """ Function to close the buzzer :return: Nothing :rtype: None """ if self._buzzer: logger.info("Closing buzzer...") self._buzzer.close()
[docs] def __del__(self) -> None: """ D-tor function :return: Nothing :rtype: None """ self.close()