Ameba Arduino: [RTL8195] [RTL8710] PWM – 让Ameba播音乐

材料准备

  • Ameba x 1
  • 蜂鸣器 x 1

范例说明

声音的组成包括音量、音调与音色。音量为声波的振幅,音调为声波的频率,音色则是由声波的波形决定。
这个范例里我们使用PWM控制蜂鸣器发出想要的音调。 PWM输出的是方波,当我们想要发出中央C(C4)的声音时,C4的频率是262Hz,每个波的长度是 1/262 = 3.8ms,所以波形如下:
1所以我们只要让PWM送出不同的频率,就可以让蜂鸣器发出音乐
接着我们将蜂鸣器接上要发出讯号的PWM pin脚:
2

RTL8710 的接线图如下:
2 “Examples” -> “AmebaAnalog” -> “TonePlayMelody”
编译并上传完成之后, 按下Reset按钮, Ameba就会播出 ”妹妹背着洋娃娃” 的音乐。

程式码说明

Ameba实作了跟 Arduino一样的tone()与noTone() API:
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%的停顿时间。