【雕爷学编程】Arduino 手册之高级 I/O 函数 tone()

您所在的位置:网站首页 播放一千赫兹的声音 【雕爷学编程】Arduino 手册之高级 I/O 函数 tone()

【雕爷学编程】Arduino 手册之高级 I/O 函数 tone()

2024-07-17 16:53| 来源: 网络整理| 查看: 265

在这里插入图片描述 在这里插入图片描述 什么是Arduino? Arduino 是一款开源的电子原型平台,它可以让你用简单的硬件和软件来创建各种创意的项目。无论你是初学者还是专家,Arduino 都能为你提供无限的可能性。你可以用 Arduino 来控制传感器、灯光、马达、机器人、物联网设备等等,只要你能想到的,Arduino 都能帮你实现。

如果你想了解更多关于 Arduino 的信息,你可以访问 Arduino 的官方网站,那里有丰富的资源和教程供你参考。你也可以加入 Arduino 的社区,和来自世界各地的爱好者、学生、设计师和工程师交流心得和经验。此外,你还可以使用 Arduino 的在线编程工具,在云端编写代码并上传到你的开发板上。

Arduino 是一个不断发展和创新的平台,它有着广泛的应用领域和潜力。这里希望本手册能激发你对 Arduino 的兴趣和热情,让你享受 Arduino 带来的创造力和乐趣

在这里插入图片描述

维基百科的定义 Arduino 是一个开源嵌入式硬件平台,用来供用户制作可交互式的嵌入式项目。此外 Arduino 作为一个开源硬件和开源软件的公司,同时兼有项目和用户社群。该公司负责设计和制造Arduino电路板及相关附件。这些产品按照GNU宽通用公共许可证(LGPL)或GNU通用公共许可证(GPL)许可的开源硬件和软件分发的,Arduino 允许任何人制造 Arduino 板和软件分发。 Arduino 板可以以预装的形式商业销售,也可以作为 DIY 套件购买。

Arduino 2005 年时面世,作为意大利伊夫雷亚地区伊夫雷亚互动设计研究所的学生设计,目的是为新手和专业人员提供一种低成本且简单的方法,以建立使用传感器与环境相互作用的装置。初学者和爱好者可用Arduino制造传感器、简单机器人、恒温器和运动检测器等装置。

Arduino 这个名字来自意大利伊夫雷亚的一家酒吧,该项目的一些创始人过去常常会去这家酒吧。 酒吧以伊夫雷亚的 Arduin(Arduin of Ivrea)命名,他是伊夫雷亚边疆伯爵,也是 1002 年至 1014 年期间的意大利国王。

在这里插入图片描述

十五、Arduino高级 I/O 函数 tone() Arduino高级 I/O tone()是一种用于向数字引脚输出音调信号的函数。tone()的作用是让Arduino根据指定的频率和持续时间,产生一定的方波信号,以便驱动或控制外部的设备或电路,例如蜂鸣器、扬声器、音乐盒等。

tone()的使用范围: 当需要向一个数字引脚输出一个固定频率的音调时,例如发出单个音符、警报声、提示音等。 当需要向一个数字引脚输出一个变化频率的音调时,例如发出多个音符、旋律、歌曲等。 当需要向一个数字引脚输出一个有规律的音调时,例如发出节奏、韵律、节拍等。

应用场景: 1)音频生成:tone()函数常用于产生不同频率的声音信号。通过在特定引脚上输出PWM信号,可以模拟各种音调和音乐效果。这在制作简单的音乐播放器、电子琴或警报系统等项目中非常有用。 2)舵机驱动:舵机是一种常见的控制装置,用于控制机械装置的位置和角度。通过使用tone()函数,可以产生PWM信号来驱动舵机。通过调整信号的频率和占空比,可以精确控制舵机的位置和运动速度。 3)振动马达:振动马达是一种常用的反馈装置,用于提供振动反馈或震动提示。通过使用tone()函数,可以产生PWM信号来控制振动马达的震动频率和强度。这在手机震动提示、游戏手柄反馈等应用中经常使用。

使用tone()时,需要注意以下事项: 1)tone()函数的第一个参数是要输出音调的数字引脚的编号,可以是任意一个数字引脚。第二个参数是要输出音调的频率,单位是赫兹,范围是31到65535。第三个参数是可选的,表示要输出音调的持续时间,单位是毫秒,范围是0到65535。 2)tone()函数会占用与输出引脚相关联的定时器,从而影响该定时器上其他功能的正常工作,例如PWM输出、analogWrite()函数等。因此,如果需要同时使用tone()函数和其他功能,那么需要注意避免冲突或干扰。 3)tone()函数会一直输出音调,直到被另一个tone()函数或noTone()函数停止,或者Arduino被复位。如果指定了持续时间参数,那么tone()函数会在持续时间结束后自动停止输出音调,并释放定时器资源。 4)tone()函数会根据输出引脚的参考电压来输出方波信号,参考电压默认是5伏,也可以通过analogReference()函数来设置为其他值。如果要驱动或控制的外部设备或电路需要不同的电压或电流,那么可能需要使用额外的元件,例如电阻、二极管、晶体管等。 5)tone()函数只能在特定支持PWM功能的引脚上使用,如3、5、6、9、10和11引脚。在其他引脚上调用tone()函数将不起作用。 6)由于tone()函数使用计时器来生成PWM信号,因此在调用tone()函数之前,应确保没有其他使用相同计时器的功能正在执行。否则,可能导致计时器冲突和功能失效。 7)tone()函数生成的PWM信号的频率受Arduino的时钟频率和计时器设置的影响。在某些Arduino板上,由于不同的时钟设置,可能会导致频率略有误差。

以下是Arduino高级 I/O tone()的三个实际运用程序案例:

案例一:使用tone()实现蜂鸣器的发声

void setup() { // 将8号引脚设为输出模式,用于控制蜂鸣器 pinMode(8, OUTPUT); } void loop() { // 向8号引脚输出1000赫兹的音调,持续1000毫秒 tone(8, 1000, 1000); // 等待1500毫秒 delay(1500); // 向8号引脚输出2000赫兹的音调,持续1000毫秒 tone(8, 2000, 1000); // 等待1500毫秒 delay(1500); }

案例二:使用tone()实现扬声器的播放

// 定义一个常量SPEAKER_PIN,表示扬声器连接到3号引脚 #define SPEAKER_PIN 3 // 定义一个数组notes,表示乐谱中每个音符对应的频率 int notes[] = {262, 294, 330, 349, 392, 440, 494, 523}; // 定义一个字符串melody,表示乐谱中每个音符对应的字母 String melody = "ccggaagffeeddc "; // 定义一个常量tempo,表示乐谱中每个音符持续的时间 int tempo = 300; void setup() { } void loop() { // 定义一个局部变量i,表示乐谱中音符的索引,并初始化为0 int i = 0; // 循环遍历乐谱中的每个音符 for (i = 0; i = 'A' && note = 'a' && note


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3