本文主要是介绍树莓派18/100 - 有源与无源蜂鸣器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
以前买配件的时候不知道蜂鸣器的模样,后来才发现我有两个小圆柱体,原来就是蜂鸣器。
左边的是有源蜂鸣器,右边的是无源的。
百度了一下,它们的区别:
这里的”源“不是指电源,而是指震荡源。有源蜂鸣器内部有震荡源,所以只要一通电就会叫。
而无源蜂鸣器内部不带震荡源,所以用直流信号无法令其鸣叫,只能通过不断地接通、断开它来产生不同频率的声音。
所以:有源的程序控制方便;无源的便宜,可以通过频率控制做出”多来米发索拉西“的效果。
有源蜂鸣器来的时候带着一张贴纸,上面的英文”Remove seal after washing“让我迷惑了,字面意思是”清洗之后拿掉贴纸“,难道这东西在使用前还要放在水里洗一洗???
谷歌了一下,发现并不是只有我有这样愚蠢的问题,类似的问题早就出现了,回答是这样的:
工业 PCB 组装过程通常会在电路板上留下残留物——主要是助焊剂。该过程的一个步骤是用溶剂清洗电路板(通过浸渍或喷涂)以去除这些残留物,以确保长期可靠性和外观。
一些设备(如声音或压力传感器)因为其功能方面的原因必须留有开口,如果溶剂或残留物被冲入开口并滞留在那里,它们的性能会受到影响。因此,此类装置通常具有覆盖开口的贴纸,直到洗涤后才应将其移除。
我在上一节双人比手速的游戏的基础上把蜂鸣器加上,连到GP13,线路图:
LED灯亮的5到10秒的过程中,蜂鸣器也叫着。主要改动的代码:
buzzer = machine.Pin(13, machine.Pin.OUT)
for i in range(0,urandom.uniform(5, 10)):buzzer.value(1)utime.sleep(0.1)buzzer.value(0)utime.sleep(0.9)
最后的全部代码:
import machine
import utime
import urandompressed = False
led = machine.Pin(15, machine.Pin.OUT)
buzzer = machine.Pin(13, machine.Pin.OUT)
left_button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
right_button = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN)fastest_button = Nonedef button_handler(pin):global pressedif not pressed:pressed=Trueglobal fastest_buttonfastest_button = pinprint(pin) # Pin(xx, mode=IN, pull=PULL_DOWN)timer_reaction = utime.ticks_diff(utime.ticks_ms(), timer_start)print("Your reaction time was " + str(timer_reaction) + " milliseconds!")led.value(1)
# 蜂鸣器叫5到10秒
for i in range(0,urandom.uniform(5, 10)):buzzer.value(1)utime.sleep(0.1)buzzer.value(0)utime.sleep(0.9)
led.value(0)timer_start = utime.ticks_ms()
left_button.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler)
right_button.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler)while fastest_button is None:utime.sleep(1)if fastest_button is left_button:print("Left Player wins!")
if fastest_button is right_button:print("Right Player wins!")
我把贴纸揭掉,发现声音清脆了不少。
推荐阅读:
树莓派Pico开发系列文章
这篇关于树莓派18/100 - 有源与无源蜂鸣器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!