【Arduino官方教程第一辑】示例程序 2-6 音乐键盘-tone函数的运用
来源:互联网 发布:大数据学什么专业 编辑:程序博客网 时间:2024/06/05 00:44
音乐键盘-tone函数的运用
本例向你展示如何使用tone()函数在不同的传感器被按下时发出不同的音调。
完成本例所需的硬件设备
Arduino板Genuino板
8Ω扬声器
3个压敏电阻(FSR)
3个10kΩ电阻
100Ω电阻
跳线/面包板连接线
面包板
电路搭建
将扬声器用一个100Ω电阻连接到数字引脚8,扬声器另一个引脚连到GND。
并联连接你的三个压敏电阻(或者其他类似传感器)并将他们连接到5V。分别将三个压敏电阻的引脚连接到A0-A2引脚,并且在A0-A2上分别用三个10kΩ电阻连接到GND,作为低电压参照。
电路原理图
例程代码
下面的代码会读取3个传感器的模拟值。每个传感器与音调数组中一个音调相对。如果任何传感器的值超过临界,那么就播放对应的音调。
下面是代码:
/* 音乐键盘-tone函数的运用 在不同传感器被按下时发出不同的音调 电路连接: * 3个压敏电阻分别连接到5V和A0-A2 (原文错误,原文说的是A0-A5但实际没那么多键) * 3个10kΩ电阻分别连接到GND和A0-A2 (原文错误,原文说的是A0-A5但实际没那么多键) * 8Ω扬声器连接到8号引脚 * 代码是公开的 */#include "pitches.h"const int threshold = 10; // 播放声音的传感器临界值// 要播放的音符,与三个传感器匹配:int notes[] = { NOTE_A4, NOTE_B4, NOTE_C3};void setup() {}void loop() { for (int thisSensor = 0; thisSensor < 3; thisSensor++) { // 获取传感器的值: int sensorReading = analogRead(thisSensor); // 如果传感器的读数大于临界值(压力足够): if (sensorReading > threshold) { // 播放与这个传感器对应的音符: tone(8, notes[thisSensor], 20); } }}
这个工程用到了另一个头文件:pitches.h。这个文件包含了所有常见的音符对应的音调值。比如NOTE_C4代表中央C,NOTE_FS4代表F#以此类推。这个音符表是Brett Hagman(tone函数原型的作者)写的。当你想要发出播放音符的时候,这个头文件可能会派大用处。
为了包含这个新的pitches.h 文件,你可以点击串口监视器下面的下箭头按钮,选择新代码页(New Tab)选项。或者按快捷键Ctrl+Shift+N。
接着,粘贴以下代码到代码编辑区域:
/************************************************* * 公共常量 *************************************************/#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 82#define NOTE_F2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define NOTE_E3 165#define NOTE_F3 175#define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311#define NOTE_E4 330#define NOTE_F4 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 622#define NOTE_E5 659#define NOTE_F5 698#define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_F6 1397#define NOTE_FS6 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 2637#define NOTE_F7 2794#define NOTE_FS7 2960#define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978
相关资料
array()
for()
tone()
LED闪烁进阶:不用delay()函数的LED闪烁工程。
按钮:用按钮控制LED。
按键去抖:读取一个按钮状态,并且滤去干扰。
数字引脚上拉电阻:展示pinMode()函数INPUT_PULLUP 常量的使用。
按钮状态改变的探测:记录按钮被按下的次数。
音乐键盘:使用压力传感器和压电扬声器制作三键电子琴。
曲调1:使用压电扬声器播放一段曲调。
曲调2:使用tone()函数操作多个扬声器播放曲调。
曲调3:根据模拟信号通过压电扬声器播放一个音调。
更新进程
日期 日志 译者 2016年4月24日 创建并翻译文档 唐家勋
译者:唐家勋
邮箱:mrsteventang@gmail.com
QQ:649196486
转载请注明出处,一切只因为热爱。
希望您能指出宝贵意见,谢谢。
- 【Arduino官方教程第一辑】示例程序 2-6 音乐键盘-tone函数的运用
- 【Arduino官方教程第一辑】示例程序 2-7 使用tone()函数弹奏一段小曲
- 【Arduino官方教程第一辑】示例程序 1-2 Arduino工程的最小单元
- 【Arduino官方教程第一辑】示例程序 2-2 按键
- 【Arduino官方教程第一辑】示例程序 4-2 调光器
- 【Arduino官方教程第一辑】示例程序 4-4 MIDI音乐
- 【Arduino官方教程第一辑】示例程序 2-5 按键状态改变的探测
- 【Arduino官方教程第一辑】示例程序 2-9 制作你的特雷门琴
- 【Arduino官方教程第一辑】示例程序 6-2 用压电元件检测振动
- 【Arduino官方教程第一辑】示例程序-目录
- 【Arduino官方教程第一辑】示例程序 5-1 数组
- 【Arduino官方教程第一辑】示例程序 3-5 模拟信号的校准
- 【Arduino官方教程第一辑】示例程序 1-6 制作一个简易电压表
- 【Arduino官方教程第一辑】示例程序 3-6 LED亮度渐隐
- 【Arduino官方教程第一辑】示例程序 4-6 串口控制LED
- 【Arduino官方教程第一辑】示例程序 5-6 While循环
- 【Arduino官方教程第一辑】示例程序 6-1 读取ADXL3xx加速度计
- 【Arduino官方教程第一辑】示例程序 6-3 Memsic2125加速度计
- actionbar 返回箭头的替换和lable的字体颜色
- java基础(22)--单例模式序列化
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 A. 喝酒
- 【matlab】中文无法显示解决办法
- C++中数字与字符串之间的转换
- 【Arduino官方教程第一辑】示例程序 2-6 音乐键盘-tone函数的运用
- leetcode算法题之 3. Longest Substring Without Repeating Characters
- Android:使用pagerslidingtabstrip做Tab
- 专题二 1011
- cloudfoundry dea 之 app staging
- java内部类
- java定时器
- linux下使用命令修改IP地址
- 记毕业之后第一次面试经历,包括面试内容,面试心得。。。