蜂鸣器怎么才能发出连续不断的报警音

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蜂鸣器怎么才能发出连续不断的报警音相关的知识,希望对你有一定的参考价值。

蜂鸣器有有源和无源的几种。也称为直流蜂鸣器和交流蜂鸣器。
有源蜂鸣器只要通上 直流电,就会发出预定的声音,比如,连续嘀声,或者间断嘀嘀声,这种声音无法控制,频 率也无法改变。一般用在一些简单应用场合。无源蜂鸣器相当于一个简单的喇叭,通上直流 点不会发声,只有通上交流电时,才会根据交流点的频率发出相应的声音,这种蜂鸣器可以 任意控制声音输出。
参考技术A 蜂鸣器有有源和无源的几种。也称为直流蜂鸣器和交流蜂鸣器。有源蜂鸣器只要通上 直流电,就会发出预定的声音,比如,连续嘀声,或者间断嘀嘀声,这种声音无法控制,频 率也无法改变。一般用在一些简单应用场合。无源蜂鸣器相当于一个简单的喇叭,通上直流 点不会发声,只有通上交流电时,才会根据交流点的频率发出相应的声音,这种蜂鸣器可以 任意控制声音输出

GPIOZero Pi报警系统:需要延时的替代方案

我需要帮助处理我使用GPIOZero库构建的警报系统代码(我的老板非常喜欢这个库)。该系统适用于笔记本电脑推车,因此人们不会忘记关门,因为如果人们长时间打开它,就会发出蜂鸣声。所以我想要它做的非常简单,但它总是等到功能完成后才能进入下一个:

如果门打开:记录时间,延时,蜂鸣器开启

如果门关闭/关闭:蜂鸣器关闭,记录时间

有没有办法不等待功能在GPIOZero库中完成。请告诉我!

from gpiozero import Button
from signal import pause
from gpiozero import Buzzer
from gpiozero import LED
from time import sleep

##### VARIABLES DEF #######
button = Button(21, pull_up=True)
buzzer = Buzzer(4)

def door_opened():
    f = open("log" + '.txt', 'a')               
    f.write("Opened " + time.strftime("%m-%d-%Y %X"))
    f.close()
    print("Door Open")
    sleep(100)
    print("door held, alarm on")
    buzzer.on

def door_closed():
    f = open("log" + '.txt', 'a')               
    f.write(" " + time.strftime("%X"))
    f.write('
')
    f.close()
    print("Door Closed")
    buzzer.off()
    print("Buzzer off")


button.when_pressed = door_closed
button.when_released = door_opened


pause()
答案

为了完成这项工作,你必须重新构建一些东西。

这里的想法是你有一对由GPIOZero事件处理程序更新的全局变量:

  • door_is_open - 当门打开时是真的
  • door_open_counter - 计算门打开的秒数(这实际上只是由事件处理程序重置为零)。

还有一个无限的主循环,每秒滴答一次,读取door_is_open变量并递增打开的计数器......最后,如果打开的计数器达到所需的阈值(这里5秒因为我们是不耐烦的人),它会变成buzzer上。

door_closed处理程序负责重置buzzer,但也可以在主循环中完成。

我还冒昧地将日志记录重构为自己的功能,并且可以轻松地将相同的内容打印到控制台。 (顺便说一句,我建议使用ISO 8601日期格式,但我不想在这里强加。)

进一步的重构可能会将这一切包装在一个整洁的类中,以避免全局变量。

(这一切都是干编码的,所以你的里程可能会有所不同,但这个想法应该有效。:))

import time
from gpiozero import Button, Buzzer


button = Button(21, pull_up=True)
buzzer = Buzzer(4)
door_is_open = False
door_open_counter = 0


def log_event(text):
    print(log_line)
    with open("log.txt", "a") as log_file:
        log_line = "%s | %s" % (time.strftime("%m-%d-%Y %X"), text)
        log_file.write(log_line + "
")



def door_opened():
    global door_is_open
    global door_open_counter
    log_event("Opened")
    door_is_open = True
    door_open_counter = 0


def door_closed():
    global door_is_open
    global door_open_counter
    log_event("Closed")
    buzzer.off()
    door_is_open = False
    door_open_counter = 0


button.when_pressed = door_closed
button.when_released = door_opened

while True:
    time.sleep(1)
    if door_is_open:
        door_open_counter += 1
        if door_open_counter >= 5:
            buzzer.on()

以上是关于蜂鸣器怎么才能发出连续不断的报警音的主要内容,如果未能解决你的问题,请参考以下文章

怎么才能让有源蜂鸣器断断续续的响,有那种报警声,一直响太吵,要简单的方法,求帮助。

想让蜂鸣器间断性响,该怎么办?请各位高手赐教!

主机发出急促蜂鸣声是怎么回事?

GPIOZero Pi报警系统:需要延时的替代方案

开机蜂鸣大

红外感应模块+蜂鸣器实现简易报警(转)