Arduino Uno >>> 蜂鸣器播放《千本樱》

话不多说,直接上码:

/* Author: Waao666
 * Created on 2020-1-7  
 * Version 1.0 
 */ 
/* 以下部分是定义是把每个音符和频率值对应起来
 *  A+数字:表示音符;
 *  AH+数字:表示上面有点的那种音符;
 *  AL+数字:表示下面有点的那种音符
 */
#define A0 0
#define A1 441
#define A2 495
#define A3 556
#define A4 589
#define A5 661
#define A6 742

#define AL1 221
#define AL2 248
#define AL3 278
#define AL4 294
#define AL5 330
#define AL6 371
#define AL7 416

#define AH1 882
#define AH2 990
#define AH3 1112
#define AH4 1178
#define AH5 1322
#define AH6 1484
#define AH7 1665
/******************************************/

/********** 这部分是用英文对应了拍子 **********/
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
/******************************************/

/* 这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数 */
int tune[] = {
  A0,A0,A0,A3,A5,
  A6,A0,A0,A5,A6,A0,A0,A5,
  A6,AH1,A5,A6,A3,A0,A3,A5,
  A6,A0,A0,A5,A6,A0,A0,A5,
  A6,AH3,AH1,AH2,A6,A0,A3,A5,
  A6,A0,A0,A5,A6,A0,A0,A5,
  A6,AH1,A5,A6,A3,A5,A1,A2,
  A3,AH1,A6,AH3,
  AH2,AH3,AH2,AH1,AH2,A6,A0,
  A6,A6,A6,A6,AH1,AH2,AH3,
  A6,A6,A6,A5,A5,A6,
  A6,A6,A6,A6,AH1,AH2,AH3,
  A6,A6,A6,AH4,AH4,AH3,
  A6,A6,A6,A6,AH1,AH2,AH3,
  A6,A6,A6,A5,A5,A6,
  A6,A6,A6,A6,AH1,AH2,AH3,
  AH6,A5,A5,A6,A6
};
/****************************************************/

/* 这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的) */
float duration[]= {
  1,1,1,0.5,0.5,
  0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
  0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
  0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
  0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
  0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
  0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
  1,1,1,1,
  0.5,0.25,0.25,0.5,0.5,1,1,
  1,1,1,0.25,0.25,0.25,0.25,
  1,1,0.5,0.5,0.5,0.5,
  1,1,1,0.25,0.25,0.25,0.25,
  1,1,0.5,0.5,0.5,0.5,
  1,1,1,0.25,0.25,0.25,0.25,
  1,1,0.5,0.5,0.5,0.5,
  1,1,1,0.25,0.25,0.25,0.25,
  1+0.5,0.5,0.5,0.5,1
};
/**********************************************************************************/

int length;     /* 这里定义一个变量,后面用来表示共有多少个音符 */
int tonePin=12; /* 蜂鸣器的pin */

void setup()
{
  /* 设置蜂鸣器的pin为输出模式 */
  pinMode(tonePin,OUTPUT);
  /* 这里用了一个sizeof函数,可以查出tone序列里有多少个音符 */
  length = sizeof(tune)/sizeof(tune[0]);
}

void loop()
{
  /* 循环音符的次数 */
  for(int x=0;x<length;x++){
    /* 此函数依次播放tune序列里的数组,即每个音符 */
    tone(tonePin,tune[x]);
    /* 每个音符持续的时间,即节拍duration,450是调整时间的越大,曲子速度越慢 */
    delay(450*duration[x]);
    /* 停止当前音符,进入下一音符 */
    noTone(tonePin);
  }
  /* 等待5秒,重新开始循环 */
  delay(5000);
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺亚方包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值