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

打開範例 “File” -> “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%的停頓時間。