• arduino上实现天空之城播放


    代码:

     1 #define NOTE_D0 -1 
     2 #define NOTE_D1 294 
     3 #define NOTE_D2 330 
     4 #define NOTE_D3 350 
     5 #define NOTE_D4 393 
     6 #define NOTE_D5 441 
     7 #define NOTE_D6 495 
     8 #define NOTE_D7 556 
     9  
    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 112  
    25 //以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写
    26  
    27 #define WHOLE 1 
    28 #define HALF 0.5 
    29 #define QUARTER 0.25 
    30 #define EIGHTH 0.25 
    31 #define SIXTEENTH 0.625  
    32 //这部分是用英文对应了拍子,这样后面也比较好看
    33  
    34  int tune[] = {  
    35  NOTE_D0,NOTE_D0,NOTE_D0,NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3,
    36  NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D3,NOTE_D4,NOTE_D3,NOTE_D4,NOTE_DH1,
    37  NOTE_D3,NOTE_D3,NOTE_D0,NOTE_DH1,NOTE_DH1,NOTE_DH1,NOTE_D7,NOTE_D4,NOTE_D4,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D0,NOTE_D6,NOTE_D7,
    38  NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,
    39  NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D2,NOTE_D3,NOTE_D4,NOTE_DH1,NOTE_D7,NOTE_D7,NOTE_DH1,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH3,NOTE_DH1,NOTE_DH1,NOTE_DH1,
    40  NOTE_DH1,NOTE_D7,NOTE_D6,NOTE_D6,NOTE_D7,NOTE_D5,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_DH1,NOTE_DH2,NOTE_DH3,NOTE_DH2,NOTE_DH3,NOTE_DH5,
    41  NOTE_DH2,NOTE_DH2,NOTE_DH2,NOTE_D5,NOTE_D5,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,
    42  NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH2,NOTE_DH2,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_DH4,NOTE_DH3,NOTE_DH2,NOTE_DH1,
    43  NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5,NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,NOTE_DH1,
    44  NOTE_DH2,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH5,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5,
    45  NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,NOTE_DH1,NOTE_DH2,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_D7,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D7
    46 };//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
    47  
    48 float duration[]= {  
    49   1,1,1,0.5,0.5,     1+0.5,0.5,1,1,     1,1,1,0.5,0.5,
    50   1+0.5,0.5,1,1,     1,1,1,1,          1+0.5,0.5,1,1, 
    51   1,1,0.5,0.5,0.5,0.5,    1+0.5,0.5,1,1,     1,1,1,0.5,0.5,
    52   1+0.5,0.5,1,1,    1,1,1,0.5,0.5,     1+0.5,0.5,1,1,
    53   1,1,1,0.5,0.5,    1,0.5,0.25,0.25,0.25,0.5,    0.5,0.5,0.5,0.25,0.5,1,
    54   0.5,0.5,0.5,0.5,1,1,    1,1,1,0.5,0.5,    1+0.5,0.5,1,1,
    55   1,1,1,0.5,0.5,    1.5,0.5,1,1,    1,1,1,1,
    56   0.5,0.5,1,1,0.5,0.5,    1.5,0.25,0.5,1,    1,1,1,1,
    57   1,1,1,1,    1,1,1,1,    0.5,0.5,1,1,0.5,0.5,
    58   1,0.5,0.5,1,1,    1,1,1,1,    1,1,1,1,
    59   0.5,0.5,1,1,0.5,0.5,    1,0.5,0.25,0.5,1,    1,1,1,0.5,0.5
    60 };//这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
    61  
    62 int length;//这里定义一个变量,后面用来表示共有多少个音符 
    63 int tonePin=5;//蜂鸣器的pin  
    64  
    65 void setup()  
    66 {  
    67   pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式
    68   length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数, 可以查出tone序列里有多少个音符
    69  } 
    70  
    71 void loop()  
    72 {  
    73  
    74   for(int x=0;x<length;x++)//循环音符的次数
    75   {  
    76     tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个音符 
    77     delay(400*duration[x]);//每个音符持续的时间,即节拍duration,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
    78     noTone(tonePin);//停止当前音符,进入下一音符 
    79     } 
    80   delay(5000);//等待5秒后,循环重新开始
    81 }
  • 相关阅读:
    我这些年的项目管理心得...
    14条建议,使你的IT职业生涯更上一层楼
    手机通过WIFI连上ZXV10 H618B路由器但不能上网问题的解决
    优秀中层必备的十大能力
    IMX51启动模式
    VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题
    VS2005工程增加SDK
    VS2005下开发PPC2003和WM50编译器一些设置
    CTO俱乐部下午茶:技术团队管理中的那些事儿
    Android通过JNI调用驱动程序(完全解析实例)
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14122691.html
Copyright © 2020-2023  润新知