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()