Multiple tone player 多音播放器

这段代码是一个Arduino示例程序,名为“Multiple tone player”,用于在多个扬声器上依次播放不同的音调。代码通过tone()函数在不同的数字引脚上生成音调,并通过noTone()函数停止当前引脚的音调播放。

/*
  Multiple tone player

 Plays multiple tones on multiple pins in sequence

 circuit:
 * 3 8-ohm speaker on digital pins 6, 7, and 8

 created 8 March 2010
 by Tom Igoe
 based on a snippet from Greg Borenstein

This example code is in the public domain.

 http://arduino.cc/en/Tutorial/Tone4

 */

void setup() {

}

void loop() {
  // turn off tone function for pin 8:
  noTone(8);
  // play a note on pin 6 for 200 ms:
  tone(6, 440, 200);
  delay(200);

  // turn off tone function for pin 6:
  noTone(6);
  // play a note on pin 7 for 500 ms:
  tone(7, 494, 500);
  delay(500);

  // turn off tone function for pin 7:
  noTone(7);
  // play a note on pin 8 for 500 ms:
  tone(8, 523, 300);
  delay(300);
}

代码功能

  • 多扬声器播放音调:代码通过三个8欧姆的扬声器(分别连接在数字引脚6、7和8上)依次播放不同的音调。

  • 顺序播放:每次只在一个扬声器上播放音调,播放完成后停止当前扬声器的音调,然后切换到下一个扬声器。

代码逐行解释

1. 注释部分

这是代码的注释部分,说明了代码的功能和硬件连接方式

/*
  Multiple tone player

 Plays multiple tones on multiple pins in sequence

 circuit:
 * 3 8-ohm speaker on digital pins 6, 7, and 8

 created 8 March 2010
 by Tom Igoe
 based on a snippet from Greg Borenstein

This example code is in the public domain.

 <url id="cuh0s5ai5976le9esn20" type="url" status="parsed" title="Tone on Multiple Speakers | Arduino Documentation" wc="2319">http://arduino.cc/en/Tutorial/Tone4</url> 

 */
  • 功能:在多个扬声器上依次播放不同的音调。

  • 硬件连接:将三个8欧姆的扬声器分别连接到数字引脚6、7和8。

2. setup() 函数

void setup() {
}
  • setup() 函数在Arduino板复位后只运行一次。在这个示例中,setup()函数为空,没有初始化任何内容。

3. loop() 函数

void loop() {
  // turn off tone function for pin 8:
  noTone(8);

  // play a note on pin 6 for 200 ms:
  tone(6, 440, 200);
  delay(200);

  // turn off tone function for pin 6:
  noTone(6);

  // play a note on pin 7 for 500 ms:
  tone(7, 494, 500);
  delay(500);

  // turn off tone function for pin 7:
  noTone(7);

  // play a note on pin 8 for 300 ms:
  tone(8, 523, 300);
  delay(300);
}
  • loop() 函数会不断重复运行。

  • 停止引脚8的音调

noTone(8);
  • 调用noTone(8);停止数字引脚8上的音调播放。

  • 在引脚6上播放音调

tone(6, 440, 200);
delay(200);
  • 调用tone(6, 440, 200);在数字引脚6上播放频率为440Hz的音调,持续时间为200毫秒。

  • delay(200);等待200毫秒,确保音调播放完成。

  • 停止引脚6的音调

noTone(6);
  • 调用noTone(6);停止数字引脚6上的音调播放。

  • 在引脚7上播放音调

tone(7, 494, 500);
delay(500);
  • 调用tone(7, 494, 500);在数字引脚7上播放频率为494Hz的音调,持续时间为500毫秒。

  • delay(500);等待500毫秒,确保音调播放完成。

  • 停止引脚7的音调

noTone(7);
  • 调用noTone(7);停止数字引脚7上的音调播放。

  • 在引脚8上播放音调

tone(8, 523, 300);
delay(300);
  • 调用tone(8, 523, 300);在数字引脚8上播放频率为523Hz的音调,持续时间为300毫秒。

  • delay(300);等待300毫秒,确保音调播放完成。

硬件连接

扬声器连接

  • 将三个8欧姆的扬声器分别连接到数字引脚6、7和8。

  • 每个扬声器的另一端连接到地(GND)。

Arduino板

确保Arduino板通过USB线连接到电脑。

运行结果

  • 当代码上传到Arduino板并运行后,三个扬声器会依次播放不同的音调:

  • 引脚6上的扬声器播放频率为440Hz的音调,持续200毫秒。

  • 引脚7上的扬声器播放频率为494Hz的音调,持续500毫秒。

  • 引脚8上的扬声器播放频率为523Hz的音调,持续300毫秒。

  • 每个音调播放完成后,会停止当前扬声器的音调,然后切换到下一个扬声器。

修改建议

  • 调整音调频率:可以通过修改tone()函数中的频率值(如440494523)来改变音调。

  • 调整持续时间:可以通过修改tone()函数中的持续时间(如200500300)来改变每个音调的持续时间。

  • 添加更多扬声器:如果需要更多的扬声器,可以增加更多的引脚,并在loop()函数中添加对应的tone()noTone()调用。

关于tone()noTone()函数

  • tone(pin, frequency, duration)

  • 在指定的引脚上生成指定频率的音调,持续指定的时间(毫秒)。

  • noTone(pin)

  • 停止指定引脚上的音调播放。

通过这种方式,代码可以依次在多个扬声器上播放不同的音调,而不会同时播放多个音调。这是因为tone()函数使用了Arduino内部的定时器,一次只能控制一个引脚的音调。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)