1、pin输出使用官方的函数tone,可以产生占空比50的方波,频率(单位Hz)可以根据需求设定,很方便。
简谱中的音符和频率有对应的关系,使用宏进行标识,如下所示:
2、根据两只老虎的简谱编写如下的程序:
case 0: 中音,case 1: 高音,case 2: 低音。
void two_tigers(int type)
{
byte count = 0;
switch(type)
{
case 0:
{
for (count = 0; count < 2; count++)
{
tone(BUZZER, MID_1);
delay(500);
tone(BUZZER, MID_2);
delay(500);
tone(BUZZER, MID_3);
delay(500);
tone(BUZZER, MID_1);
delay(500);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, MID_3);
delay(500);
tone(BUZZER, MID_4);
delay(500);
tone(BUZZER, MID_5);
delay(1000);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, MID_5);
delay(350);
tone(BUZZER, MID_6);
delay(150);
tone(BUZZER, MID_5);
delay(350);
tone(BUZZER, MID_4);
delay(150);
tone(BUZZER, MID_3);
delay(500);
tone(BUZZER, MID_1);
delay(500);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, MID_1);
delay(500);
tone(BUZZER, MID_5);
delay(500);
tone(BUZZER, MID_1);
delay(1000);
noTone(BUZZER);
delay(500);
}
break;
}
case 1:
{
for (count = 0; count < 2; count++)
{
tone(BUZZER, HIG_1);
delay(500);
tone(BUZZER, HIG_2);
delay(500);
tone(BUZZER, HIG_3);
delay(500);
tone(BUZZER, HIG_1);
delay(500);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, HIG_3);
delay(500);
tone(BUZZER, HIG_4);
delay(500);
tone(BUZZER, HIG_5);
delay(1000);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, HIG_5);
delay(350);
tone(BUZZER, HIG_6);
delay(150);
tone(BUZZER, HIG_5);
delay(350);
tone(BUZZER, HIG_4);
delay(150);
tone(BUZZER, HIG_3);
delay(500);
tone(BUZZER, HIG_1);
delay(500);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, HIG_1);
delay(500);
tone(BUZZER, HIG_5);
delay(500);
tone(BUZZER, HIG_1);
delay(1000);
noTone(BUZZER);
delay(500);
}
break;
}
case 2:
{
for (count = 0; count < 2; count++)
{
tone(BUZZER, LOW_1);
delay(500);
tone(BUZZER, LOW_2);
delay(500);
tone(BUZZER, LOW_3);
delay(500);
tone(BUZZER, LOW_1);
delay(500);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, LOW_3);
delay(500);
tone(BUZZER, LOW_4);
delay(500);
tone(BUZZER, LOW_5);
delay(1000);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, LOW_5);
delay(350);
tone(BUZZER, LOW_6);
delay(150);
tone(BUZZER, LOW_5);
delay(350);
tone(BUZZER, LOW_4);
delay(150);
tone(BUZZER, LOW_3);
delay(500);
tone(BUZZER, LOW_1);
delay(500);
noTone(BUZZER);
delay(500);
}
for (count = 0; count < 2; count++)
{
tone(BUZZER, LOW_1);
delay(500);
tone(BUZZER, LOW_5);
delay(500);
tone(BUZZER, LOW_1);
delay(1000);
noTone(BUZZER);
delay(500);
}
break;
}
}
}