
☛ 功能說明
利用 Arduino Uno 開發板播放鋼琴入門音樂 – 小蜜蜂 ( Little Bee )。如下表所示小蜜蜂簡譜,數位 1 ~ 5 代表音符 C、D、E、F、G。每一段有四小節,每小節有四拍,如果演奏的速度是每分鐘 180 拍,則每拍的時間是 60/180 秒 = 60000 / 180 毫秒。

☛ 使用材料
Arduino UNO R3 開發板 × 1、10 μF/16V 電容 × 1、 喇叭或蜂鳴器 × 1。
☛ 電路圖及麵包板接線圖


☛ 程式碼
const int speaker = 2; // 數位接腳 2 接至喇叭
unsigned int frequency[7] = // 音符頻率
{ 523, 587, 659, 694,
784, 880, 988 };
char toneName[] = "CDEFGAB"; // 音符表
char beeTone[] = "GEEFDDCDEFGGGGEEFDDCEGGEDDDDDEFEEEEEFGGEEFDDCEGGC";
byte beeBeat[] = { 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2,
1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1,
1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1,
1, 2, 1, 1, 2, 1, 1, 1, 1, 4 };
const int beeLen= sizeof(beeTone); // 小蜜蜂音符總數
unsigned long tempo = 180; // 每分鐘 180 拍
int i, j;
void setup()
{ }
void loop()
{
for(i=0;i<beeLen;i++)
playTone(beeTone[i], beeBeat[i]); // 播放小蜜蜂樂曲
delay(3000); // 間隔 3 秒重複播放
}
void playTone(char toneNo, byte beatNo) // 播放音符函式
{
unsigned long duration = beatNo*60000 / tempo; // 計算每拍時間 ( 毫秒 )
for(j=0;j<7;j++)
{
if(toneNo==toneName[j]) // 查音符表
{
tone(speaker,frequency[j]); // 播放音符
delay(duration); // 此音符的節拍
noTone(speaker); // 關閉聲音
}
}
}
☛ 練習
⑴ 設計 Arduino 程式,利用 Arduino 開發板播放鋼琴入門音樂 – 小星星 ( Little Star )。小星星簡譜如下所示,每一段有 4 小節,每小節有 4 拍,演奏速度是每分鐘 120 拍。

const int speaker = 2; // 數位接腳 2 接至喇叭
unsigned int frequency[7] = // 音符頻率
{ 523, 587, 659, 694,
784, 880, 988 };
char toneName[] = "CDEFGAB"; // 音符表
char beeTone[] = "CCGGAAGFFEEDDCGGFFEEDGGFFEEDCCGGAAGFFEEDDC";
byte beeBeat[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1, 1, 2 };
const int beeLen= sizeof(beeTone); // 小星星音符總數
unsigned long tempo = 120; // 每分鐘 120 拍
int i, j;
void setup()
{ }
void loop()
{
for(i=0;i<beeLen;i++)
playTone(beeTone[i], beeBeat[i]); // 播放小星星樂曲
delay(3000); // 間隔 3 秒重複播放
}
void playTone(char toneNo, byte beatNo) // 播放音符函式
{
unsigned long duration = beatNo*60000 / tempo; // 計算每拍時間 ( 毫秒 )
for(j=0;j<7;j++)
{
if(toneNo==toneName[j]) // 查音符表
{
tone(speaker,frequency[j]); // 播放音符
delay(duration); // 此音符的節拍
noTone(speaker); // 關閉聲音
}
}
}
⑵ 設計 Arduino 程式,利用 Arduino 開發板播放鋼琴入門音樂 – 小星星 ( Little Star )。並使用 6 個 LED 顯示 C、D、E、F、G、A 等 6 個目前正在播放的音符。

const int speaker = 2; // 數位接腳 2 接至喇叭
unsigned int frequency[7] = // 音符頻率
{ 523, 587, 659, 694,
784, 880, 988 };
char toneName[] = "CDEFGAB"; // 音符表
char beeTone[] = "CCGGAAGFFEEDDCGGFFEEDGGFFEEDCCGGAAGFFEEDDC";
byte beeBeat[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1, 1, 2 };
const int beeLen= sizeof(beeTone); // 小星星音符總數
unsigned long tempo = 120; // 每分鐘 120 拍
int led[6] = { 4, 5, 6, 7, 8, 9 }; // 數位接腳 4 ~ 9 連接 6 個 LED
int i, j;
void setup()
{
for(i=0;i<7;i++)
pinMode(led[i],OUTPUT); // 設定數位接腳 4 ~ 9 為輸出模式
}
void loop()
{
for(i=0;i<beeLen;i++)
playTone(beeTone[i], beeBeat[i]); // 播放小星星樂曲
delay(3000); // 間隔 3 秒重複播放
}
void playTone(char toneNo, byte beatNo) // 播放音符函式
{
unsigned long duration = beatNo*60000 / tempo; // 計算每拍時間 ( 毫秒 )
for(j=0;j<7;j++)
{
if(toneNo==toneName[j]) // 查音符表
{
tone(speaker,frequency[j]); // 播放音符
digitalWrite(led[j],HIGH); // 點亮音符對應的LED
delay(duration); // 此音符的節拍
noTone(speaker); // 關閉聲音
digitalWrite(led[j],LOW); // 熄滅音符對應的LED
}
}
}




