☛ 功能说明

利用 Arduino Uno 开发板输出电话声音。如下图所示电话声波是由两种不同频率的信号组合成一次振铃 ( ringer ),经过多次振铃后,再静音一段时间,重复不断。

☛ 使用材料

Arduino UNO R3  开发板 × 1、10 μF/16V 电容 × 1、 喇叭或蜂鸣器 × 1。

☛ 电路图及面包板接线图

☛ 程式码

const int speaker = 2;              // 数位接脚 2 连接至喇叭

void setup()
{ }

void loop()
{
     for(int i=0;i<10;i++)          // 振铃 10 次
     {
         tone(speaker,1000);        // 输出 1000 Hz 音调
         delay(50);                 // 延迟 50ms
         tone(speaker,500);         // 输出 500 Hz 音调
         delay(50);                 // 延迟 50ms
     }
     noTone(speaker);               // 静音 2 秒
     delay(2000);
}

 

☛ 练习

⑴ 设计 Arduino 程式,输出由低至高的警报声音。

const int speaker = 2;              // 数位接脚 2 连接至喇叭
int fequency1 =1000;                // 声音频率 1
int fequency2 =500;                 // 声音频率 2

void setup()
{ }

void loop()
{
     soundWoring();                 // 警报声音副程序
     noTone(speaker);               // 静音 2 秒
     delay(2000);
     fequency1 += 500;              // fequency1 每次递增 500 Hz
     fequency2 += 500;              // fequency2 每次递增 500 Hz
     if (fequency1 == 4500 )        // 当 fequency1 频率为 4500 Hz, 就恢复至初始值
     {
         fequency1 = 1000;
         fequency2 = 500;
     }
}

void soundWoring()
{
     for(int i=0;i<10;i++)          // 振铃 10 次
     {
         tone(speaker,fequency1);   // 输出 fequency1 音调
         delay(50);                 // 延迟 50ms
         tone(speaker,fequency2);   // 输出 fequency2 音调
         delay(50);                 // 延迟 50ms
     }  
}

 

⑵ 设计 Arduino 程式,输出哔!哔!哔!警报声音。

const int speaker = 2;              // 数位接脚 2 连接至喇叭

void setup()
{ }

void loop()
{
     for(int i=0;i<10;i++)          // 振铃 10 次
     {
         tone(speaker,2000);        // 输出 2000 Hz 音调
         delay(50);                 // 延迟 50ms
         tone(speaker,500);         // 输出 500 Hz 音调
         delay(50);                 // 延迟 50ms
     }
     noTone(speaker);               // 静音 2 秒
     delay(2000);
}

 

⑶ 设计 Arduino 程式,输出警车警报声音。

float sinVal;
int   toneVal;
int   speaker = 2;                             // 数位接脚 2 接至喇叭

void setup()
{ }

void loop()
{
     for(int x=0;x<180;x++)
     {
         sinVal = (sin(x*(3.1412/180)));       // 角度转化为弧度
         toneVal = 2000+(int(sinVal*1000));    // 相加时,要将 sinVal 转化为整数
         tone(speaker,toneVal);
         delay(2);                             // 延迟 2 ms
     }
}