Fix buzzer

This commit is contained in:
2026-08-23 20:04:20 +02:00
parent 8a71d4eaa7
commit 5c60de3f03
3 changed files with 39 additions and 30 deletions
+35 -23
View File
@@ -1,33 +1,45 @@
import time
import threading
import grovepi
from sensors.lock import grove_lock
from shared import config
# Pin definition
BUZZER_PIN = 8
BUZZER_PIN = 8 # Must be a PWM pin on GrovePi (D3, D5, D6, D8 support analogWrite)
grovepi.pinMode(BUZZER_PIN, "OUTPUT")
buzzer_state = 0
# Initialize pin mode
try:
with grove_lock:
grovepi.pinMode(BUZZER_PIN, "OUTPUT")
except Exception as e:
print(f"[BUZZER] Init error: {e}")
def set_buzzer(state: int):
global buzzer_state
buzzer_state = state
def _siren_worker(beats_nb: int, delay: float):
if not config.BUZZER_ACTIVATED:
return
try:
with grove_lock:
grovepi.digitalWrite(BUZZER_PIN, state)
except Exception as e:
print(f"[BUZZER] Error occurred while setting buzzer state: {e}")
def buzzer_toggle():
global buzzer_state
new_state = 1 - buzzer_state
set_buzzer(new_state)
def buzzer_siren(beatsNb: int = 3, delay: float = 0.3):
for _ in range(beatsNb):
set_buzzer(1)
time.sleep(delay)
set_buzzer(0)
time.sleep(delay)
with grove_lock:
try:
for _ in range(beats_nb):
# 1. Send single PWM write to start sound (Duty cycle ~128/255)
grovepi.analogWrite(BUZZER_PIN, 128)
time.sleep(delay)
# 2. Send single PWM write to kill sound
grovepi.analogWrite(BUZZER_PIN, 0)
time.sleep(delay)
except Exception as e:
print(f"[BUZZER] Error during siren execution: {e}")
finally:
# Absolute safety reset
try:
grovepi.analogWrite(BUZZER_PIN, 0)
grovepi.digitalWrite(BUZZER_PIN, 0)
except Exception:
pass
def buzzer_siren(beats_nb: int = 3, delay: float = 0.2, async_run: bool = True):
if async_run:
thread = threading.Thread(target=_siren_worker, args=(beats_nb, delay), daemon=True)
thread.start()
else:
_siren_worker(beats_nb, delay)
-3
View File
@@ -1,6 +1,3 @@
import grovepi
import math
from sensors.lock import grove_lock
from picamera2 import Picamera2, Preview
import time