文章目录

  • 发声体和声音
  • 动手做 13-1 演奏一段马里奥旋律
    • 使用#define 替换数据
    • 输出高品质的音效
  • 13-4 认识反射型与遮光型光电开关
  • 动手做13-2 光电子琴制作
  • MIDI信息格式
  • 动手做13-3 通过Arduino演奏MIDI音乐
    • 通过MIDI信息更换音色
  • 动手做13-4 通过“虚拟MIDI”接口演奏音乐

发声体和声音

扬声器(speaker)和蜂鸣器(piezo transducer)
piezoelectric(压电感应)
音频:振动的频率
音高(pitch):声音的频率(音频)高低
tone()指令:
tone(输出端口, 频率, 持续时间);
或 tone(输出端口, 频率),若不指定时间,Arduino将持续发声,直到执行noTone()为止。

动手做 13-1 演奏一段马里奥旋律

程序代码:

const byte SP_PIN = 11;void setup() {pinMode(SP_PIN, OUTPUT);
}void loop() {tone(SP_PIN, 659, 150);  //弹出一个E5音高的四分音符 delay(150);tone(SP_PIN, 659, 150);delay(150);tone(SP_PIN, 659, 150);delay(300);tone(SP_PIN, 523, 150);delay(150);tone(SP_PIN, 659, 150);delay(150);tone(SP_PIN, 784, 150);delay(3000);
}

使用#define 替换数据

在上面的程序加入如下:

#define E5 659
#define C5 523
#define G5 784

#define和const都能用一个名称来代表数值

const byte LED_PIN = 13;
#define LED_PIN 13

当定义数组常量时,只能用const。

输出高品质的音效

自然界或乐器所发出的声音,是由多种不同频率的正弦波组成的复合波,而tone()指令仅能输出固定的方波,音质无法媲美乐器,可参考几个扩展模块。

  • Adafruit 的Wave Shield for Arduino Kit
  • Sparkfun的MP3 Player Shield
  • BabbleShield
  • SpeakJet Shield

13-4 认识反射型与遮光型光电开关

  • 反射型光电开关: 又称为反射型传感器,由一个红外线发射LED以及一个光敏晶体管(红外线接收器)所组成,它们的外观和一般的LED一样,它采用的是将发射和接收组装在一个模块的反射型光电开关。
  • 传感器里的LED能发射红外线光,若传感器前方有高反射的物体(如:白纸),红外线光将被折射,由光敏晶体管接收,而晶体管发射极将输出高电位,相反地,若前方没有物体或者是低反射的物体(如黑纸),光敏晶体管将收不到红外线光,因而输出低电位。
  • 这种元器件可应用在检测条形码,或者像上图一样,在一个圆盘上绘制黑色条纹(称为圆盘编码器),安装在电机或其他驱动机械上,可以检测物体的旋转角度或者转动圈数。发射型光电开关和被感测物体的距离,应介于1~8mm,2.5mm的效果最好。
  • 另一种称为遮光型光电开关的传感器,也常见于微电脑自动控制装置。

动手做13-2 光电子琴制作

实验说明: 本节将采用红外线传感器当做“琴键”通过感应纸张上的黑白条纹,让Arduino发出对应的音调。

MIDI信息格式

MIDI外设以31.25kbps的速率来发送TTL形式(也就是5V代表高电位)的串行数据。一个MIDI信息通常由3个字节数据构成,分别代表状态(status)、音高(pitch)和强弱(velocity,按下按键时的力量强弱)。MIDI信息的3个字节数据:MIDI的频道号从00001111共16组,音高编号与强弱的数据字节的最高位始终为0,因此有效的数值范围是0127

动手做13-3 通过Arduino演奏MIDI音乐

实验说明: 制作一个MIDI OUT(输出)接口,从Arduino板传输MIDI信息给电脑音源发出音乐。
实验电路: MIDI接口采用5针DIN插座,此元器件的引脚比较不易插入面包板,建议先在它的引脚焊接导线
实验程序: 程序采用SoftwareSerial(软件串口)扩展库,将从中央C的前一个八度音到它的后一个八度音,依序弹奏每一个音符。

#include <SoftwareSerial.h>   //
byte note;
SoftwareSerial MIDI(2, 3);  //
void midiMsg(byte cmd, byte pitch, byte velocity) {MIDI.write(cmd);  //状态信息,write()指令用于在MIDI.write(pitch);  //音高值MIDI.write(velocity);  //强弱值
}void setup() {MIDI.begin(31250); //串口连线要设置成MIDI的传输速率
}void loop() {for (note = 48; note < 84; note ++) {midiMsg(0x90, note, 0x40);  //送出“按下琴键”及其他信息。delay(100);midiMsg(0x80, note, 0x00);  //delay(1000);}
}

实验结果: 编译并下载程序之后,将Arduino的MIDI输出接口与电脑的MIDI 转接线的“IN”相连,再打开“虚拟MIDI键盘”软件。

通过MIDI信息更换音色

动手做13-4 通过“虚拟MIDI”接口演奏音乐

**实验说明:**想必读者一定感到纳闷,既然MIDI接口采用串行联机,那为何我们不直接通过既有的接口,把MIDI信息传给电脑,通过音源软件发声呢?没问题!只要在电脑上安装“串口转MIDI桥接器”软件,让电脑把指定的串口看待成MIDI适配卡就可以了!当然,如果要将Arduino直接和其他MIDI乐器相连
实验软件:

arduino教程- 14.制作光电子琴与MIDI电子鼓相关推荐

  1. 13. 制作光电子琴与MIDI电子鼓

    发声体和声音 扬声器(speaker)和蜂鸣器(piezo transducer) piezoelectric(压电感应) 音频:振动的频率 音高(pitch):声音的频率(音频)高低 tone()指 ...

  2. arduino架子鼓_极客DIY:利用Arduino制作电子鼓

    我一直想学打鼓,但却始终遭到父母的反对,理由是噪音太大,而且十分占空间.多年后,当我掌握了很多电子方面的知识之后,我制作了一个简单的电子鼓,那些问题便迎刃而解,而我也得偿所愿. 关于Arduino方面 ...

  3. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例—利用目标灯光制作光域网筒灯效果)图文教程

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例-利用目标灯光制作光域网筒灯效果)图文教程 目录 利用目标灯光制作光域网筒灯效果 利用目标灯光制作光域网筒灯效果

  4. Arduino开发板制作

    Arduino UNO 介绍 ,Arduino开发板制作 教程: Arduino制作 Arduino UNO 图 Arduino是什么 Arduino是一款便捷灵活.方便上手的开源电子原型平台.包含硬 ...

  5. arduino摄像头监控_如何使用Arduino和Pusher制作实时光监控器

    arduino摄像头监控 by Neo Ighodaro 由新Ighodaro 如何使用Arduino和Pusher制作实时光监控器 (How to make a realtime light mon ...

  6. flash游戏教程集锦~~制作游戏有疑惑的先来这里看看~~

    http://www.flash8.net/bbs/dispbbs.asp?boardID=38&ID=183016&page=1 flash游戏教程集锦~~制作游戏有疑惑的先来这里看 ...

  7. AI+PS教程!制作油画质感早餐插画

    如何制作插画?ps和ai怎么结合使用?为您带来AI+PS教程!制作油画质感早餐插画! 步骤 01 场景分析 画面由甜甜圈.牛奶.饮料以及好看的绿植物组成,配色色卡如下: 步骤 02 新建文档 (1)打 ...

  8. Cocos2d-x高级开发教程:制作自己的《捕鱼达人》

    <Cocos2d-x高级开发教程:制作自己的<捕鱼达人>> 基本信息 作者: 火烈鸟网络科技 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115317964 ...

  9. Altium Designer 14 制作Mark点

    Altium Designer 14: 制作Mark点 Mark点 Mark点,Mark point(reference point)用于在贴片过程中给PCB定位. 要求: mark点直径1-3mm, ...

最新文章

  1. MySQL 性能测试
  2. oracle外部表ora29913,从外部表中选择sqlplus错误:ORA-29913:执行ODCIEXTTABLEOPEN标注时出错...
  3. CentOS 6.5安装MongoDB 2.6(多yum数据源)
  4. C++类和对象学习总结
  5. Java 代码细节与优化(一)
  6. 修改mysql数据库名方法_安全快速修改Mysql数据库名的5种方法
  7. 进程间通信IPC(二)(共享内存、信号、信号量)
  8. maven 结合idea入门
  9. IAR7.51提示秘钥无效IAR 以及 CCDebug驱动(包含win7 64bit)
  10. Atitit WebDriver技术规范原理与概念
  11. JDK下载与安装教程
  12. jsp分页代码mysql_jsp分页(jsp分页完整代码)
  13. Cat8八类网线是什么?与Cat5、Cat6、Cat7网线的区别?
  14. 界面开发控件DotNetBar for WPF教程:MobileRibbon快速入门指南
  15. 自动收发短信验证码机器人_除了验证码:禁止机器人!
  16. 软件测试选哪个技术方向分支_硬件测试转软件测试,应该选哪个方向
  17. 【有利可图网】PS干货:学会这个LOGO设计思路,分分钟拿下甲方!
  18. Apipost 基于设计、开发、测试一体化协作接口管理平台
  19. 三:将智能合约部署到ganache测试网
  20. Redhat设置虚拟网卡

热门文章

  1. 淘淘商城第118讲——系统部署演示
  2. Python:操作dict时避免出现KeyError的几种方法
  3. 8266+ds3231时钟之arduino官网发布的DS3231库的分析【二】
  4. Google Play 和神奇女侠是什么关系?
  5. 如何使用Divi建立会员网站 – 第1部分
  6. 数据段、代码段、BSS段、堆栈段
  7. 如何获取一个目录下的子文件和子目录
  8. PHY6252 GPIO控制
  9. 数据分析工具Pandas
  10. Ubuntu 14.04 64位下安装Chrome浏览器