(2016/11/02)
題目一:我是作曲家
播放一聲Do:利用「蜂鳴器」D9播出一個音階(上圖左下角的地方有說明,如果D9要當作蜂鳴器,要將Jump移到左方)
音階--頻率對照表(單位:Hz)
進入Moto Blockly,蜂鳴器下主要有二個積木,建議利用下方積木,比較可以彈性使用
所以播一聲Do的程式,如下:
播放「小蜜蜂」:利用「蜂鳴器」D9播出一首「小蜜蜂」的歌曲
「小蜜蜂」的譜
進入Moto Blockly,程式如下(檔案於附件)
測試成功!!
題目二:我是小喇叭
說明:利用S4A Sensor Board的「滑桿」模擬成小喇叭,並隨著滑桿在不同位置,發出不同音階!
進入Moto Blockly,程式如下(檔案於附件),此例其實用剛剛的上方積木會比較方便!!
此例使用線性比例來分配音階:
當A0=0時,停止發出聲音
A0介於1~130發Do音
A0介於130~260發Re音
A0介於260~390發Mi音
....
由於A0值並非線性排列,因此每個音階的距離不同!
將上面程式轉成Arduino程式語言
long Do;
long Re;
long Mi;
long Fa;
long So;
long La;
long Si;
long Do2;
void setup()
{
pinMode(9, OUTPUT);
Do = 523;
Re = 587;
Mi = 659;
Fa = 698;
So = 784;
La = 880;
Si = 988;
Do2 = 1046;
}
void loop()
{
if (analogRead(A0) == 0) {
noTone(9);
}
if (analogRead(A0) >= 1 && analogRead(A0) < 130) {
tone(9,Do,500);
}
if (analogRead(A0) >= 130 && analogRead(A0) < 260) {
tone(9,Re,500);
}
if (analogRead(A0) >= 260 && analogRead(A0) < 390) {
tone(9,Mi,500);
}
if (analogRead(A0) >= 390 && analogRead(A0) < 520) {
tone(9,Fa,500);
}
if (analogRead(A0) >= 520 && analogRead(A0) < 650) {
tone(9,So,500);
}
if (analogRead(A0) >= 650 && analogRead(A0) < 780) {
tone(9,La,500);
}
if (analogRead(A0) >= 780 && analogRead(A0) < 910) {
tone(9,Si,500);
}
if (analogRead(A0) >= 910) {
tone(9,Do2,500);
}
}
測試成功!