PWM - 通过蜂鸣器播放音乐

材料准备

  • AmebaD [AMB21 / AMB22 / AMB23 / BW16] x 1

  • 蜂鸣器 x 1

范例说明

声音的组成包括音量、音调与音色。音量为声波的振幅,音调为声波的频率,音色则是由声波的波形决定。

这个范例里我们使用PWM控制蜂鸣器发出想要的音调。 PWM输出的是方波,当我们想要发出中央C(C4)的声音时,C4的频率是262Hz,每个波的长度是 1/262 = 3.8ms,所以波形如下:

../../../../_images/image158.png

所以我们只要让PWM送出不同的频率,就可以让蜂鸣器发出音乐

接着我们将蜂鸣器接上要发出讯号的PWM pin脚:

AMB21 / AMB22 的接线图如下:

../../../../_images/image255.png

AMB23 的接线图如下:

../../../../_images/image337.png

BW16 的接线图如下:

../../../../_images/image3-16.png

BW16-TypeC Wiring Diagram:

../../../../_images/image3-23.png

Open the example code in “Examples” “AmebaAnalog” “TonePlayMelody” Compile and upload to Ameba, press the reset button. Then you can hear the buzzer playing music.

程式码说明

Ameba implement the tone() and noTone() API of Arduino: https://www.arduino.cc/en/Reference/Tone https://www.arduino.cc/en/Reference/NoTone

程式码里我们宣告melody的阵列, 里面摆要发出的音调, 另外宣告noteDurations的阵列, 里面放每个音调的长度, 4代表4分音符, 8代表8分音符,4分音符的长度是3000ms/ 4 = 750ms, 另外加上30%的停顿时间。