树莓派18/100 - 有源与无源蜂鸣器

2024-01-09 11:48

本文主要是介绍树莓派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 - 有源与无源蜂鸣器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587015

相关文章

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli

【LeetCode热题100】前缀和

这篇博客共记录了8道前缀和算法相关的题目,分别是:【模版】前缀和、【模版】二维前缀和、寻找数组的中心下标、除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和。 #include <iostream>#include <vector>using namespace std;int main() {//1. 读取数据int n = 0, q = 0;ci

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

诺瓦星云校招嵌入式面试题及参考答案(100+面试题、10万字长文)

SPI 通信有哪些内核接口? 在嵌入式系统中,SPI(Serial Peripheral Interface,串行外设接口)通信通常涉及以下内核接口: 时钟控制接口:用于控制 SPI 时钟的频率和相位。通过设置时钟寄存器,可以调整 SPI 通信的速度以适应不同的外设需求。数据发送和接收接口:负责将数据从主机发送到从机以及从从机接收数据到主机。这些接口通常包括数据寄存器,用于存储待发

多个线程如何轮流输出1到100

多个线程如何轮流输出1到100的值 这个面试问题主要考察如何让线程同步,首先线程同步必会用到的就是互斥锁,互斥锁保证多个线程对数据的同时操作不会出错。但是线程同步还会用到条件变量condition_variable,condition_variable(条件变量)是 C++11 中提供的一种多线程同步机制,它允许一个或多个线程等待另一个线程发出通知,以便能够有效地进行线程同步。 conditi