完整word版,arduino制作各种歌曲
- 格式:doc
- 大小:184.10 KB
- 文档页数:8
目录一、新媒体装置艺术1、作品原理介绍 (1)2、作品设计的意义 (1)3、作品的主要内容 (1)4、制作方法和流程 (1)5、成果 (9)6、价值和影响 (9)7、创新点 (10)二、结论8、技术方面 (10)9、艺术方面 (10)10、不足及展望 (11)11、谢辞 (11)设计说明书一、作品原理介绍:能感应到物体靠近并且低于50CM时,蜂鸣器发出音乐,并且小灯泡随着音乐节奏变化。
二、作品设计意义:将它应用到图书馆或者购物的地方,当人们靠近的时间能只能朗读出这一栏或者这一块区域有什么东西,能够更加让人们更快速的找到自己需要的东西,很大程度上节约的时间! 也可以应用到车上,当开车的人快要和前面或者后面的物体撞上的时候,会发出声音来提醒你,从而给生命和财产加上保护套。
三、作品主要内容:1、Arduino控制蜂鸣器播放音乐、小灯泡。
2、小灯泡跟随蜂鸣器的音乐节奏变化。
3、当物体离超声波低于50CM时发出指令,控制蜂鸣器、小灯泡。
四、制作方法和流程:adruino uno一块(其他Arduino板子也可,注意引脚就行),面保线若干条,蜂鸣器或小喇叭一个。
原理:首先讲下简单的乐理知识,知道音乐是怎么演奏出来的自然就可以通过代码来进行编排了。
1.演奏单音符的原理一首音乐由若干音符组成,每一个音符唯一对应一个频率。
如果我们知道了音符相对应的频率,再让 Arduino 按照这个频率输出到蜂鸣器或喇叭,蜂鸣器或喇叭就会发出相应频率下的声音。
Arduino官方网站给出了不同音符对应的不同频率的头文件,具体请见下文介绍。
2.音符演奏的持续时间每个音符都会播放一定的时间,这样才能构成一首优美的曲子,而不是每个音符都播放一样长的时间。
如何确定每个音符演奏的单位时间呢?我们知道,音符节奏分为1拍、1/2拍、1/4拍、1/8拍等等,我们规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,所以我们可以为每个音符赋予这样的拍子播放出来,音乐就成了。
Arduino创意设计大全(一)1. 引言Arduino是一款开源的单片机开发平台,可以用来进行各种创意设计和原型开发。
本文将介绍一些有趣的Arduino创意设计项目,帮助你快速入门和掌握基本的Arduino编程和电路设计技巧。
2. LED灯控制LED灯是Arduino创意设计中常见的元件之一,可以通过Arduino来控制LED的亮灭和闪烁。
以下是一个简单的LED 灯控制的示例代码:int ledPin = 13;void setup() {pinMode(ledPin, OUTPUT);}void loop() {digitalWrite(ledPin, HIGH);delay(1000);digitalWrite(ledPin, LOW);delay(1000);}这段代码会让连接到Arduino的13号引脚上的LED灯每隔1秒亮一次、暗一次。
3. 蜂鸣器音乐播放除了控制LED灯,Arduino还可以控制蜂鸣器播放简单的音乐。
以下是一个简单的使用Arduino控制蜂鸣器播放音乐的示例代码:int buzzerPin = 8;void setup() {pinMode(buzzerPin, OUTPUT);}void loop() {playTone(261, 500);delay(500);playTone(293, 500);delay(500);playTone(329, 500);delay(500);playTone(349, 500);delay(500);playTone(392, 500);delay(500);playTone(440, 500);delay(500);playTone(493, 500);delay(500);playTone(523, 500);delay(500);}void playTone(int tone, int duration) {for (long i = 0; i < duration * 1000L; i += ton e * 2) {digitalWrite(buzzerPin, HIGH);delayMicroseconds(tone);digitalWrite(buzzerPin, LOW);delayMicroseconds(tone);}}这段代码会让连接到Arduino的8号引脚上的蜂鸣器播放一个简单的音阶。
课程设计课题:基于Arduino的音乐播放器设计班级:14计应1班:吕文龙日期:2016.12.05目录目录 (1)引言 (3)一.基本原理 (4)1.1实验目的 (4)1.2实验要求和容 (4)1.3实验器件 (4)二.基本流程图 (5)三.硬件模块 (6)3.1SD卡读写模块 (6)3.2 Arduino模块 (7)3.3 1602液晶显示模块 (7)3.4扬声器模块 (7)3.5电位器模块 (7)3.6步进电机模块 (7)四.实物图 (9)引言进入21世纪越来越来多的电子产品出现在人们的日常生活中,从而形式多样的音乐播放器已广泛应用于各种多媒体,为各种多媒体提供音频效果,人们能够听到悦耳的声音,同时给人类在多媒体播放平台上带来了一定的发展。
现有音乐播放器虽有多种设计样式,各具特色,但是回归到本质,我们可以通过Aduino做一个基于Arduino 的音乐播放器设计。
本文介绍了一种用串口输入模拟用户界面的音乐播放器平台和SD卡模块存储和读取数据,实现音乐的播放,具有反应速序快、可靠性高和连线及扩展方便等特点。
一.基本原理1.1实验目的由arduino控制的串口输入模拟用户控制界面系统和LCD1602液晶显示屏组成,其控制核心是arduino,串口输入信号是本程序的关键,由SD卡读写模块接收信号将之译码输出,扬声器通过读取信号播放音频,最后由液晶显示系统将相应的数据音乐播放信息显示出来。
1.2实验要求和容(1)SD卡模块数据存储,音频转换,读写程序的编写。
(2)设定模拟的用户按键,通过串口输入设定的信号。
(3)音乐播放器具有显示功能。
显示开机界面,播放界面,音乐信息,状态信息等等。
(4)故障模块,步进电机工作方式模拟故障信号。
(5) LED灯状态显示播放状态。
(6)电位器,调音量大小和显示屏的分辨率。
1.3实验器件Arduino板一块Lcd1602液晶一个SD卡一电位器2个步进电机一个Led灯一个电阻1个电容1个扬声器1个导线若干。
ARDUINO入门及其简单实验(7例) (2)1. Arduino硬件开发平台简介 (2)1.1 Arduino的主要特色 (3)1.2 Arduino的硬件接口功能描述 (3)1.3 Arduino的技术性能参数 (4)1.4 电路原理图 (4)2. Arduino软件开发平台简介 (5)2.1 菜单栏 (6)2.2 工具栏 (6)2.3 Arduino 语言简介 (7)3. Arduino开发实例中所用部分器件 (9)1. LED简介 (9)2. 光敏电阻简介 (10)3. 直流电机简介 (10)4. 电位器简介 (10)4. Arduino平台应用开发实例 (11)4.1【实作项目一】利用LED作光敏电阻采样实验 (11)4.2【实作项目二】利用PWM信号控制LED亮度 (13)4.3【实作项目三】单键控制一只LED的亮灭 (15)4.4【实作项目四】利用PWM控制直流电机转速 (17)4.5【实作项目五】利用电位器手控LED亮度 (20)4.6【实作项目六】控制LED明暗交替 (22)4.7【实作项目七】利用光敏电阻控制LED的亮灭 (24)ARDUINO入门及其简单实验(7例)1. Arduino硬件开发平台简介Arduino硬件是一块带有USB的I/O接口板(其中包括13条数字I/O引脚,6通道模拟输出,6通道模拟输入),并且具有类似于Java、C语言的集成开发环境。
Arduino既可以扩展一些外接的电子元器件,例如开关、传感器、LED、直流马达、步进马达或其他输入、输出装置;Arduino也可以独立运行,成为一个可以跟交互软件沟通的接口装置,例如:Flash、Processing、Max/MSP、VVVV或其他互动软件。
Arduino开发环境IDE全部开放源代码,可以供大家免费下载、利用,还可以开发出更多激发人们制作欲望的互动作品。
如图1和图2所示,分别为Arduino硬件平台的实物图和电路布局图。
Arduino编程参考手册程序结构 (4)控制语句 (5)if (5)if...else . (6)for (8)switch case (10)while (11)do...while . (12)break (12)continue (13)return (14)goto (15)相关语法 (16)分号 (16)大括号 (16)注释 (18)define (19)include (20)算术运算符 (21)赋值 (21)加,减,乘,除 (21)取模 (22)比较运算符 (24)if(条件) and ==, !=, <, > (比较运算符) (24)布尔运算符 (26)指针运算符 (27)位运算 (27)位与 (27)位或 (28)位异或 (30)位非 (32)左移、右移 (33)复合运算符 (35)自加++ (35)自减-- (35)复合加+= (35)复合减-= (36)复合乘*= (36)复合除/= (36)复合与&= (36)复合或|= (36)变量 (36)宏定义 (37)整型常量 (38)浮点数常量 (40)数据类型 (41)void (41)boolean (42)char (43)unsigned char (43)byte (43)int (44)unsigned int (45)word (46)long (46)unsigned long (47)float (48)double (49)string (49)String(c++) (51)array (52)数据类型转换 (54)char() (54)byte() (54)int() (55)word() (55)long() (56)float() (56)变量作用域&修饰符 (57)变量作用域 (57)static (静态变量) (58)volatile (易变变量) (60)const (不可改变变量) (61)辅助工具 (62)sizeof() (sizeof运算符) (62)ASCII码表 (63)基本函数 (65)数字I/O (65)pinMode() (65)digitalWrite() (66)digitalRead() (67)模拟I/O (68)analogReference() (68)analogRead() (69)analogWrite() (70)shiftOut() (71)pulseIn() (72)时间 (73)millis() (73)delay(ms) (73)delayMicroseconds(us) (74)数学库 (75)min() (75)max() (76)abs() (76)constrain() (76)map() (77)pow() (78)sqrt() (78)三角函数 (78)sin(),cos(),tan() (78)随机数 (79)randomSeed() (79)random() (79)位操作 (80)设置中断函数 (81)a (81)achInterrupt() (81)detachInterrupt() (82)interrupts() (83)noInterrupts() (83)串口通讯 (84)begin() (84)available() (84)read() (87)flush() (88)print() (88)println() (92)write() (92)peak() (93)serialEvent() (93)程序结构(本节直译自Arduino官网最新Reference)在Arduino中, 标准的程序入口main函数在内部被定义, 用户只需要关心以下两个函数:setup()当Arduino板起动时setup()函数会被调用。
(1)pinMode(接口名称,OUTPUT或INPUT),将指定的接口定义为输入或输出接口,用在setup()函数里。
(2)digitalWrite(接口名称,HIGH(高)或LOW(低)),将数字输入输出接口的数值置高或置低。
(3)digitalRead(接口名称),读出数字接口的值,并将该值作为返回值。
(4)analogWrite(接口名称,数值),给一个模拟接口写入模拟值(PWM脉冲)。
数值取值0-255。
(5)analogRead(接口名称),从指定的模拟接口读取数值,Arduino对该模拟值进行数字转换,这个方法将输入的0~5V电压值转换为0~1023间的整数值,并将该整数值作为返回值。
(6)delay(时间),延时一段时间,以毫秒为单位,如1000为1秒。
(7)Serial.begin(波特率),设置串行每秒传输数据的速率(波特率)。
在与计算机进行通讯时,可以使用下面这些值:300、1200、2400、4800、9600、14400、19200、28800、38400、57600或115200,一般9600、57600和115200比较常见。
除此之外还可以使用其他需要的特定数值,如与0号或1号引脚通信就需要特殊的波特率。
该函数用在setup()函数里。
Serial.available() 的意思是:返回串口缓冲区中当前剩余的字符个数。
一般用这个函数来判断串口的缓冲区有无数据,当Serial.available()>0时,说明串口接收到了数据,可以读取;Serial.read()指从串口的缓冲区取出并读取一个Byte的数据,比如有设备通过串口向Arduino发送数据了,我们就可以用Serial.read()来读取发送的数据。
while(Serial.available()>0){data= Serial.read();delay(2);}(8)Serial.read(),读取串行端口中持续输入的数据,并将读入的数据作为返回值。
Arduino应用范例10例作者:小新哥1.趣味彩灯2.楼道延时报警灯3.行程自动往返工件传送带目录4.A 、B、C三路智能抢答器5.机床控制系统6.楼上楼下共控一灯7.工厂顺序启动反顺序停车控制系统8.楼道声光控灯109.水塔自动上水装置11 10.电机拖动控制12{for(i nt i=0;iv=7;i++) //pin Mode(i,IN PUT);for(i nt j=8;jv=13;j++) //pin Mode(j,OUT PUT);}void loop(){if(digitalRead(1)==HIGH){if(digitalRead(1)==HIGH) {for (i nt x=9; x<=12; x++) // {digitalWrite(x,HIGH);delay(1000);}}delay(10000);for (i nt x=9; x<=12; x++) // {digitalWrite(x,LOW);}for (i nt K=1; K<=10; K++) // 把0-7设置为输入把8-13设置为输出循环方式依次让每个led在1秒内点亮循环方式依次让每个led熄灭循环10次,亮0.5秒灭0.5秒,共10秒1.趣味彩灯名称趣味彩灯功能要求1. XI触发,一组灯依次被点亮.延时W秒,将全部关闭。
等特下一次触发。
当灯关闭时.第二组灯幵始闪烁10秒.然后关闭.{digitalWrite(13,HIGH); delay(500);digitalWrite(13,L0W); delay(500); } } }2. 楼道延时报警灯示意图:Y9灯输出¥W 峰鸣报警输出void set up() {for(i nt i=0,j=9;iv=8,jv=13;i++,j++) // {pin Mode(i,IN PUT); pinM ode(j,OUT PUT);} }void loop() {if(digitalRead(1)==HIGH||digitalRead(2)==HIGH) { digitalWrite(9,HIGH); //9 delay(25000); // digitalWrite(10,HIGH); delay(5000); // digitalWrite(10,LOW);1110 //10digitalWrite(9,LOW); //9 }}置高电平 延时25秒置高电平 延时5秒置低电平 置低电平设置0-8为输入,9-13为输出//引脚1或2置高电平3. 行程自动往返工件传送带塔称功能要求行程自动往返工件传送带b XI (左侧)检知时,¥9输出,工件向右移动. 2, X2 (右侧)检知时,¥10输出,工件向左移动。
Arduino电子制作教程第一章:Arduino概述1.1 Arduino的定义和特点Arduino是一款便捷灵活、开源的电子原型平台,能够用于快速构建各种智能设备和互动作品。
其特点包括开放性硬件和软件,并且底层核心部分使用C++编写,简化了编写和上传代码的过程。
1.2 Arduino的组成和工作原理Arduino主板包含微控制器、电源和一组输入输出接口,通过连接传感器、执行器等外部元件,实现电子装置的输入和输出功能。
Arduino的工作原理是通过上传预先编写好的程序(称为“Sketch”)到主板上运行,并通过与外部元件的交互实现各种功能。
第二章:Arduino基础知识2.1 Arduino开发环境的搭建详细介绍如何下载和安装Arduino IDE(集成开发环境),并对IDE的界面进行简单的介绍。
2.2 Arduino编程基础讲解Arduino编程语言的语法和常用函数,引导读者通过简单的示例程序掌握基本的编程方法。
第三章:Arduino电路连接与扩展3.1 Arduino引脚与电路连接介绍Arduino主板上的引脚及其功能,并指导读者如何正确连接电路,包括使用面包板、杜邦线等工具。
3.2 扩展模块与传感器的使用介绍常用的扩展模块和传感器,如LED、蜂鸣器、温湿度传感器等,以及它们的引脚连接和Arduino编程的操作。
第四章:Arduino项目实战4.1 LED闪烁实验通过连接LED和Arduino主板,编写程序实现LED的闪烁,讲解数字输出和延时函数的使用。
4.2 蜂鸣器发声实验将蜂鸣器与Arduino连接,编写程序实现不同频率的声音发出,介绍模拟输出和PWM(脉宽调制)的原理。
4.3 温湿度监测器的搭建使用温湿度传感器和LCD屏幕,编写程序实时显示当前温度和湿度数值,并对数据进行处理和输出。
第五章:Arduino进阶应用5.1 无线通信实验介绍Arduino的无线通信模块(如Bluetooth、RFID等),实现与其他设备间的数据传输和控制,开启智能家居等应用的可能。
arduino创意作品及其代码标题:Arduino创意作品及其代码导言:Arduino是一款开源的硬件平台,它在创客和电子爱好者中非常受欢迎。
Arduino的强大之处在于其简单易用的编程语言和丰富的扩展模块,这使得我们能够用它实现各种创意作品。
本文将介绍一些有趣的Arduino创意作品,并分享它们的代码和实现思路。
1. 运用Arduino创造的智能灯光作品智能灯光作品是Arduino创意作品中的一个热门领域。
通过使用Arduino主板和各种传感器,我们可以实现诸如颜色变换、声控开关、远程控制等功能。
下面是一个基于Arduino的智能灯光作品示例以及其代码:```C++#include <Adafruit_NeoPixel.h>#define PIN 6#define LED_COUNT 30Adafruit_NeoPixel strip(LED_COUNT, PIN, NEO_GRB +NEO_KHZ800);void setup() {strip.begin();strip.show();}void loop() {for (int i = 0; i < strip.numPixels(); i++) {strip.setPixelColor(i, random(255), random(255),random(255));strip.show();delay(1000);}}```以上代码演示了一个每秒钟随机改变每个灯珠颜色的效果。
通过添加更多传感器和逻辑判断条件,你可以实现更多有趣的灯光效果。
2. Arduino机器人项目Arduino机器人项目是另一个令人兴奋的领域。
我们可以通过结合Arduino主板、电机和传感器,创造出行走、感知环境并执行任务的小型机器人。
下面是一个简单的Arduino机器人项目的示例代码:```C++#include <AFMotor.h>AF_DCMotor motor1(1);AF_DCMotor motor2(2);void setup() {// 初始化电机驱动器motor1.setSpeed(200);motor2.setSpeed(200);// 启动机器人motor1.run(FORWARD);motor2.run(FORWARD);}void loop() {// 向前行驶motor1.setSpeed(200);motor2.setSpeed(200);delay(2000);// 停止motor1.setSpeed(0);motor2.setSpeed(0);delay(1000);// 向后行驶motor1.setSpeed(200);motor2.setSpeed(200);motor1.run(BACKWARD);motor2.run(BACKWARD);delay(2000);// 停止motor1.setSpeed(0);motor2.setSpeed(0);delay(1000);}```该代码演示了机器人的前进、停止和后退动作。
Arduino开发教程第一章:Arduino简介与环境搭建1.1 Arduino的定义与特点Arduino是一款开源的无线控制模块,具有操作简单、易于编程和低成本等特点。
其基于开源硬件和软件平台,具有丰富的资源和社区支持。
1.2 Arduino开发环境搭建首先,下载安装Arduino开发环境,并将Arduino连接到计算机上。
接着,选择合适的开发板型号,并安装相应的驱动程序。
最后,通过Arduino IDE进行开发和编程。
第二章:基本电子元件和电路设计2.1 电子元件介绍介绍常见的电子元件,如电阻、电容、二极管、晶体管等。
解释其基本原理和作用,并讲解如何选择合适的元件。
2.2 电路设计与连接讲解如何设计电路图,并将相应的元件连接到Arduino开发板上。
详细介绍使用面包板、导线和跳线的方法。
第三章:Arduino编程基础3.1 Arduino编程语言简介介绍Arduino编程语言的基本语法和常用函数,如pinMode()、digitalRead()、analogWrite()等。
帮助读者了解如何编写简单的程序。
3.2 Arduino库的使用介绍Arduino库的概念和使用方法,讲解常用库的功能和调用方式。
示范代码编写与调试的过程。
第四章:传感器与模块的应用4.1 光敏传感器介绍光敏传感器的使用原理和连接方法。
给出示例程序,实现根据光强度控制LED灯亮灭。
4.2 温湿度传感器介绍如何使用温湿度传感器,并给出示例程序,实现温度和湿度的监测功能。
4.3 超声波传感器讲解超声波传感器的原理和使用方法,编写相应的程序,实现测距功能。
4.4 蓝牙模块介绍如何使用蓝牙模块与移动设备进行通信。
给出示例程序,实现通过手机控制LED灯的亮灭。
第五章:外部设备控制5.1 LED灯控制给出控制LED灯亮灭的示例程序,并讲解使用不同脚位和不同亮度的方法。
5.2 舵机控制介绍如何使用舵机模块实现旋转控制,并编写相应的程序。
学会使用Arduino进行电子制作Arduino是一种开源电子平台,它提供了一个简单易用的方式来制作各种电子项目。
它由一个微控制器和开发环境组成,可以编程控制电子元件,实现各种功能。
对于喜欢电子制作的人来说,学会使用Arduino是一个非常有价值的技能,它可以帮助我们实现自己的创意,打造各种有趣的电子作品。
首先,了解Arduino的基本知识是非常重要的。
Arduino是一个开放的硬件平台,由一个微控制器和一些输入输出接口组成。
它使用一种类似于C的编程语言来进行编程,可以通过USB接口与电脑连接。
在编程之前,我们需要安装Arduino 开发环境,并将开发板与电脑连接好。
接下来,学会基本的电路连接是必不可少的。
Arduino开发板上有一些数字和模拟引脚,可以连接各种传感器、执行器和其他电子元件。
通过正确连接这些元件,我们可以实现对它们的控制。
例如,我们可以使用一个温度传感器来检测环境温度,并使用LED灯来显示相应的温度值。
理解电路连接和元件的工作原理,可以帮助我们更好地设计和调试电子项目。
编写Arduino程序是实现各种功能的关键。
Arduino的编程语言基于C/C++,包含了一些特定的库函数,用于控制和读取各种传感器、执行器和其他外设。
我们可以使用这些库函数来编写程序,实现一些简单的功能,比如闪烁LED灯、读取按钮状态等。
同时,我们也可以根据自己的需要,扩展和修改这些库函数,实现更复杂的功能。
学会使用各种传感器和执行器,是用Arduino进行电子制作的重要一步。
Arduino可以连接各种传感器,比如温度传感器、光敏传感器、加速度传感器等,用于检测环境的状态。
它也可以连接各种执行器,比如电机、舵机、继电器等,用于控制各种动作。
通过合理选择和使用这些传感器和执行器,我们可以实现各种有趣的功能,比如智能家居、自动灯光控制等。
在实际制作过程中,学会使用一些常用的电子元件和工具是必不可少的。
比如,使用面包板和跳线来快速搭建电路,使用万用表来测量电路参数,使用焊接工具来连接电子元件等等。
单片机音乐盒DIY—生日快乐歌程序时间:2011-12-23 13:28:24 来源:作者:基于STC89C52单片机的七彩迷你音乐盒。
在单片机最小系统的基础上,对其他两个I/O口连接硬件电路。
P1.0接一个七彩快闪LED灯。
P1.5口接一个NPN型三极管的放大电路,再连接一个无源蜂鸣器(用来播放乐曲)。
这样一个迷你音乐盒就完成了。
硬件电路非常简单,其中单片机任意一个I/O口都可以作为乐曲的输出,信号经过NPN三极管放大驱动蜂鸣器发出电子乐曲。
紧接着就是为单片机设计运行的程序了,这里我用汇编写了一段《生日快乐》的程序。
大家可以仿照,我的思路修改乐曲。
DIY手记:用C52这么大块头的单片机,确实很浪费。
因为一共有32个I/O引脚,设计音乐盒只用了其中的两个,非常的浪费。
大家可以用其他的单片机代替,例如16引脚的单片机。
价格相对会便宜一点。
单片机汇编源代码分享:org 0000hajmp mainorg 000bhjmp tim0org 0030hmain: ;主程序setb p1.1clr p1.4setb p3.0mov tmod,#01h ;设定时方式mov ie,#82h ;开中断start0:mov 30h,#00h ;next:mov a,30hmov dptr,#tablemovc a,@a+dptr ;查表取音调和节拍mov r2,ajz end0 ;为零,不进行处理.anl a,#0fhmov r5,a ;将节拍存入R5mov a,r2swap aanl a,#0fhjnz sing ;根据音调决定是否演奏.clr tr0jmp d1sing:dec amov 22h,a ;将音调存入22H.mov dptr,#table1movc a,@a+dptr ;根据音调决定定时器初值.mov th0,a ;放入TH0mov 21h,amov a,22hrl ainc amovc a,@a+dptrmov tl0,a ;放入TL0mov 20h,asetb tr0 ;启动定时d1: call delayinc 30hjmp nextend0:clr tr0jmp start0tim0: ;定时器中断服务程序push accpush pswmov tl0,20h ;重赋初值.mov th0,21hcpl p1.7pop pswpop accretidelay:mov r7,#02h ;延时子程序d2: mov r4,#130d3: mov r3,#248djnz r3,$djnz r4,d3djnz r7,d2djnz r5,delayrettable1: ;决定音调的定时初值.dw 64260,64400,64524,64580dw 64684,64777,64820,64898dw 64968,65030,65058,65110dw 65157,65178,65217table: ;决定音调和节拍的表格,不同的歌曲只是此表不同;1db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h ;282h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h ;3db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h;4db82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00 end。
首先讲下简单的乐理知识,知道音乐是怎么演奏出来的自然就可以通过代码来进行编排了。
1.演奏单音符一首乐曲有若干音符组成,一个音符对应一个频率。
我们知道到相对应的频率让arduino输出到蜂鸣器蜂鸣器就会放出相应的声音,这里有个表供大家参考:2.音符的演奏时间我们知道了音符是如何演奏出来的,下一步就是控制音符的演奏时间。
每个音符都会播放一定的时间,这样才能构成一首优美的曲子,而不是生硬的一个调的把所有的音符一股脑的都播放出来。
如何确定每个音符演奏的单位时间呢?我们知道,音符节奏分为一拍、半拍、1/4拍、1/8拍,我们规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,所以我们可以为每个音符赋予这样的拍子播放出来,音乐就成了。
好了我们看看如何将简谱翻译成对应频率和拍子。
以葫芦娃为例:先看下左上角1=D这里,用的是D调,好那我们就看《音符频率表》中的D行(红色部分),第一个音符是1 但上面有个点,所以对应的就是589,时间是一拍=1,第二个音符6(没有点)就是495,时间也是一拍=1,第三个音符5 即441,因为有下划线所以是半拍=0.5,……以此类推第四0这里要注意下,这里是没有声音,但是要是用频率0表示还是会有声音(这个不懂),所以我们用一个很高频率的声音,这样人耳听不到就达到了没有声音的效果,所以频率为-1。
拍子=1拍第五,再接着看到第一句歌词葫芦娃这个娃的音是3—,这表示是两拍,后面每加一个“-”,表示拍子+1(1+1),本例中最多是加到4.第六,第二句歌词葫芦娃这个娃,3•带个点,点的意思是去3的拍子的一半,即3•的拍子是1+0.5第七,大家可能会问那弧线怎么表示,这在音乐中属于连音,我们要表示的话,可以稍微改下连音后面那个音的频率,比如减少或增加一些数值(需自己调试),这样表现会更流畅,但操作上更复杂了,本例没有做连音的处理,大家有兴趣可以自己调整下。
所以说了一大堆,规律就是时间上单个音符没有下划线,就是一拍(1),有下划线是半拍(0.5),两个下划线是四分之一拍(0.25),有“—”=前面音符的拍子+1;频率上就是按照音符是否带点,点在上还是在下到表中查找就可以了。
首先讲下简单的乐理知识,知道音乐是怎么演奏出来的自然就可以通过代码来进行编排了。
1.演奏单音符一首乐曲有若干音符组成,一个音符对应一个频率。
我们知道到相对应的频率让arduino输出到蜂鸣器蜂鸣器就会放出相应的声音,这里有个表供大家参考:
2.音符的演奏时间我们知道了音符是如何演奏出来的,下一步就是控制音符的演奏时间。
每个音符都会播放一定的时间,这样才能构成一首优美的曲子,而不是生硬的一个调的把所有的音符一股脑的都播放出来。
如何确定每个音符演奏的单位时间呢?
我们知道,音符节奏分为一拍、半拍、1/4拍、1/8拍,我们规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,所以我们可以为每个音符赋予这样的拍子播
放出来,音乐就成了。
好了我们看看如何将简谱翻译成对应频率和拍子。
以葫芦娃为例:
先看下左上角1=D这里,用的是D调,好那我们就看《音符频率表》中的D行(红色部分),
第一个音符是1 但上面有个点,所以对应的就是589,时间是一拍=1,
第二个音符6(没有点)就是495,时间也是一拍=1,
第三个音符5 即441,因为有下划线所以是半拍=0.5,
……以此类推
第四0这里要注意下,这里是没有声音,但是要是用频率0表示还是会有声音(这个不懂),所以我们用一个很高频率的声音,这样人耳听不到就达到了没有声音的效果,所以频率为-1。
拍子=1拍
第五,再接着看到第一句歌词葫芦娃这个娃的音是3—,这表示是两拍,后面每加一个“-”,表示拍子+1(1+1),本例中最多是加到4.
第六,第二句歌词葫芦娃这个娃,3•带个点,点的意思是去3的拍子的一半,即3•的拍子是1+0.5
第七,大家可能会问那弧线怎么表示,这在音乐中属于连音,我们要表示的话,可以稍微改下连音后面那个音的频率,比如减少或增加一些数值(需自己调试),这样表现会更流畅,但操作上更复杂了,本例没有做连音的处理,大家有兴趣可以自己调整下。
所以说了一大堆,规律就是时间上单个音符没有下划线,就是一拍(1),有下划线是半拍(0.5),两个下划线是四分之一拍(0.25),有“—”=前面音符的拍子+1;频率上就是按照音符是否带点,点在上还是在下到表中查找就可以了。
至此原理清楚,随便拿个简谱来我们都可以翻译成代码了。
好,下面进入代码部分,来看下这首《葫芦娃》的代码:
01.#define NOTE_D0 -1
02.#define NOTE_D1 294
03.#define NOTE_D2 330
04.#define NOTE_D3 350
05.#define NOTE_D4 393
06.#define NOTE_D5 441
07.#define NOTE_D6 495
08.#define NOTE_D7 556
09.
10.#define NOTE_DL1 147
11.#define NOTE_DL2 165
12.#define NOTE_DL3 175
13.#define NOTE_DL4 196
14.#define NOTE_DL5 221
15.#define NOTE_DL6 248
16.#define NOTE_DL7 278
17.
18.#define NOTE_DH1 589
19.#define NOTE_DH2 661
20.#define NOTE_DH3 700
21.#define NOTE_DH4 786
22.#define NOTE_DH5 882
23.#define NOTE_DH6 990
24.#define NOTE_DH7 1112
25.//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写D调的各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。
这样后面写起来比较好识别。
26.#define WHOLE 1
27.#define HALF 0.5
28.#define QUARTER 0.25
29.#define EIGHTH 0.25
30.#define SIXTEENTH 0.625
31.//这部分是用英文对应了拍子,这样后面也比较好看
32.int tune[] =
33.{
34. NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,
35. NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,NOTE_D6,
36. NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,NOTE_D6,
37. NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,
38.
39. NOTE_D1,NOTE_D1,NOTE_D3,
40. NOTE_D1,NOTE_D1,NOTE_D3,NOTE_D0,
41. NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
42. NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,
43. NOTE_DH1,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
44. NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,
45. NOTE_D7,NOTE_D7,NOTE_D5,NOTE_D3,
46. NOTE_D5,
47. NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOT E_D6,
48. NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,
49. NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOT E_D6,
50. NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,
51. NOTE_D3,NOTE_D3,NOTE_D1,NOTE_DL6,
52. NOTE_D1,
53. NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
54. NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
55. NOTE_DH1,NOTE_D0,NOTE_D7,NOTE_D5,
56. NOTE_D6,
57.};//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
58.
59.float duration[]=
60.{
61. 1,1,0.5,0.5,1,
62. 0.5,0.5,0.5,0.5,1,0.5,0.5,
63. 0.5,1,0.5,1,0.5,0.5,
64. 0.5,0.5,0.5,0.5,1,1,
65.
66. 1,1,1+1,
67. 0.5,1,1+0.5,1,
68. 1,1,0.5,0.5,1,
69. 0.5,1,1+0.5,1,
70. 0.5,0.5,0.5,0.5,1+1,
71. 0.5,1,1+0.5,1,
72. 1+1,0.5,0.5,1,
73. 1+1+1+1,
74. 0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
75. 0.5,1,0.5,1,1,
76. 0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
77. 0.5,1,0.5,1,1,
78. 1+1,0.5,0.5,1,
79. 1+1+1+1,
80. 0.5,1,0.5,1+1,
81. 0.5,1,0.5,1+1,
82. 1+1,0.5,0.5,1,
83. 1+1+1+1
84.};//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
85.int length;//这里定义一个变量,后面用来表示共有多少个音符
86.int tonePin=5;//蜂鸣器的pin
87.
88.void setup()
89.{
90. pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式
91. length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
92.}
93.
94.void loop()
95.{
96. for(int x=0;x<length;x++)//循环音符的次数
97. {
98. tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个音符
99. delay(400*duration[x]);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
100. noTone(tonePin);//停止当前音符,进入下一音符101. }
102. delay(5000);//等待5秒后,循环重新开始103.}
104.。