BS2專題 : 自動撥放多種歌曲的音樂盒

一、目的與應用

隨著聖誕節到來,讓我們自己製作可以撥放5種不同聖誕歌曲的裝置,並且用LED顯示每個音符。我們用BASIC Stamp控制器搭配我們的5段切換開關(5-Position Switch),當你每次按下開關後BASIC Stamp就會撥放不同的歌曲,並且透過LED顯示歌曲中的每個音符 。

 

二、所需零件

  • MCC0002 (Arduino 控制器), 數量 : 1
  • DTC0118 (Parallax 5段開關模組),數量:1

 

三、動作說明

 

四、製作說明

請按照以下電路圖配置

Schematics

 

電路實體完成圖

bsx0003-s1

 

五、程式說明

測試電路

一但接線完成後, 根據下面的測試程式 TestCarolingDevice.bs2 , 並且確認會有下面的動作, 這樣, 才不會待會執行完整程式時, 浪費許多時間去修改程式。

√   所有LED都會亮

√   蜂鳴器會發出聲音

√   所有5段開端, 都會顯示在 Debug Terminal上(up, down, left, right, and pressed)

‘ TestCarolingDevice.bs2

‘ Tests that the Caroling Device is wired correctly.

 

‘ {$STAMP BS2}

‘ {$PBASIC 2.5}

 

HIGH 15                       ‘ Turn on all LEDs

HIGH 14

HIGH 13

HIGH 12

HIGH 11

 

FREQOUT 8, 2000, 3000         ‘ Play a tone

 

DEBUG CLS,                    ‘ Display directional graph

"            “, CR,

"     |      “, CR,

"   –   –    “, CR,

"     |      “, CR

 

‘ Display which direction is pressed on the 5-Position Switch

DO

IF (IN0 = 0) THENDEBUGCRSRXY, 2, 2, “<“ELSEDEBUGCRSRXY, 2, 2, " "

IF (IN1 = 0) THENDEBUGCRSRXY, 5, 4, “v"ELSEDEBUGCRSRXY, 5, 4, " "

IF (IN2 = 0) THENDEBUGCRSRXY, 8, 2, “>"ELSEDEBUGCRSRXY, 8, 2, " "

IF (IN3 = 0) THENDEBUGCRSRXY, 5, 2, “o"ELSEDEBUGCRSRXY, 5, 2, " "

IF (IN4 = 0) THENDEBUGCRSRXY, 5, 0, “^"ELSEDEBUGCRSRXY, 5, 0, " "

PAUSE 20

LOOP

選擇你的曲調

現在已經確認你的基本電路是OK的,該是選擇你要撥放的歌曲並且製作進入BASIC Stamp裡面。這裡我們利用5段開關,選擇四首歌曲並利用第五段開關關閉每首歌曲。我們選擇了耳熟能詳的的四首歌分別是 We Wish You a Merry ChristmasJingle BellsDeck the Halls and O Christmas Tree 接下來我們必須將這四首歌寫成程式並且放在四個不同的程式段。請參考程式下載

下方是利用五段開關,所寫的程式變換

DO

IF (IN0 = 0) THEN

GOSUB Deck_The_Halls

ELSEIF (IN1 = 0) THEN

GOSUB Jingle_Bells

ELSEIF (IN2 = 0) THEN

GOSUB Merry_Christmas

ELSEIF (IN4 = 0) THEN

GOSUB Christmas_Tree

ELSE

PAUSE 20

ENDIF

LOOP

為了節省EEPROM的空間,利用LOOKUP and LOOKDOWN指令去決定頻率
Get_Frequency:

LOOKDOWN noteLetter, [ “C", “d", “D", “e", “E",

“F", “g", “G", “a", “A",

“b", “B", “R", “Q"     ], offset

 

LOOKUP offset,        [ 4186, 4435, 4699, 4978, 5274,

5588, 5920, 6272, 6645, 7040,

7459, 7902,    0,    0     ], noteFreq

RETURN

 

六、文件下載: