Arduino入门笔记(3)

     分类: Arduino,个人笔记 发布时间: 2018-08-23 10:42 2,101人浏览

蜂鸣器的使用


蜂鸣器分为两种,有源蜂鸣器和无源蜂鸣器。
其中有源,无源的区别是是否自带信号源。
简单的来说,两种蜂鸣器有以下特点:

1.有源蜂鸣器
通入直流电源即可发声,发出的声音一定,不可改变

2.无源蜂鸣器
不可直接通直流电发声,需要通过PWM调频输入方波才可发声。
优点是音调可调。

在Arduino中,以无源蜂鸣器为例。

控制的方法如下:

 tone(tonepin,int); //tonepin为蜂鸣器连接的端口号,int为具体的输入值,用于控制频率

改变式中的int即可改变发声频率,具体的音调定义表如下

#define NTD0 -1     //各频率表
#define NTD1 294    //普通
#define NTD2 330
#define NTD3 350
#define NTD4 393
#define NTD5 441
#define NTD6 495
#define NTD7 556
#define NTDL1 147   //低音
#define NTDL2 165
#define NTDL3 175
#define NTDL4 196
#define NTDL5 221
#define NTDL6 248
#define NTDL7 278
#define NTDH1 589   //高音
#define NTDH2 661
#define NTDH3 700
#define NTDH4 786
#define NTDH5 882
#define NTDH6 990
#define NTDH7 112

通过for循环即可改变音调,从而实现播放音乐功能(虽然很有可能很难听)

下面的代码是实现用蜂鸣器播放炉石传说背景音乐:

#define NTD0 -1     //各频率表
#define NTD1 294    //普通
#define NTD2 330
#define NTD3 350
#define NTD4 393
#define NTD5 441
#define NTD6 495
#define NTD7 556
#define NTDL1 147   //低音
#define NTDL2 165
#define NTDL3 175
#define NTDL4 196
#define NTDL5 221
#define NTDL6 248
#define NTDL7 278
#define NTDH1 589   //高音
#define NTDH2 661
#define NTDH3 700
#define NTDH4 786
#define NTDH5 882
#define NTDH6 990
#define NTDH7 112

#define tonepin 12   //蜂鸣器用12号接口

int tune[]=                 //根据简谱列出各频率
{
  NTDH2,NTDH4,NTDH2,NTDH1,NTD0,
  NTD6,NTDH1,NTD6,NTD5,NTD0,
  NTD2,NTD4,NTD6,NTD7,
  NTD5,NTD2,NTD4,NTD0,NTD3,NTD0,
  NTDH2,NTDH4,NTDH2,NTDH1,NTD0,
  NTD6,NTDH1,NTD6,NTD5,NTD0,
  NTD2,NTD4,NTD6,NTD7,
  NTD5,NTD2,NTD4,NTD0,
  NTD6,NTDH1,NTD6,NTD5,NTD3,NTD1,
  NTD2,NTDL6,NTD2,NTD3,NTD4,NTD3,NTD1,NTD0,
  NTD2,NTDL6,NTD2,NTD3,NTD4,NTD3,
  NTD2,NTDL6,NTD2,NTD3,NTD4,NTD3,NTD4,NTD3,NTD2,NTD1,
  NTDL6,NTD0,NTDL5,NTD0,NTDL6,NTD0,
};
float durt[]=                   //根据简谱列出各节拍
{
  1,1,1,1,1,
  1,1,1,1,1,
  1,1,1,1,
  1,1,1+0.5,1,1,1+1,
  1,1,1,1,1,
  1,1,1,1,1,
  1,1,1,1,
  1,1,1+0.5,1+1,
  1,1,1,1,1,1,
  1+1,1,1,1,1,1+0.5,1+1,1+1,
  1+1,1,1,1,1,1+2,
  1+1,1,1,1,1,1+1,0.5,0.5,1+0.5,1+0.5,
  1+1,1,1+1,1,1+1,1+2,  
};
int length;                                                             //定义音符个数

void setup()
[
  pinMode(tonepin,OUTPUT);         //定义接口为OUT输出
]

void loop()
{
 for(int x=0;x<length;x++)
  {
   tone(tonepin,tune[x]); //调节蜂鸣器变化
    delay(150*durt[x]);   //这里用来根据节拍调节延时
    noTone(tonepin);
  }
}


上一篇文章:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注