实验材料:
arduino duemilanove一块
8Ω 0.5W 喇叭一个
电位器一个
面包板一个
面包板连接线若干
电位器作用就是调节音量,一般是要求与喇叭阻抗匹配,本次实验没找到小阻值电位器,所以用了一个5K的。
注意:因为扬声器驱动电压要求比较小,远远小于5V,所以需要在扬声器上串联一个大于10uf的电解电容,电解电容负极连接喇叭的正极,电容正极连接另外一端。不接电容长时间使用,会烧毁扬声器。串联一个100Ω电阻也可以(因为电位器最小电阻为0)
上硬件连接图:
本次实验arduino命令中最重要的就是tone()命令。
tone()
tone(pin, frequency, duration)
tone(pin, frequency)
*pin代表连接扬声器的引脚,frequency代表发声频率,duration代表持续的时间,单位是毫秒。
描述:
在一个端口生成一个特定频率的方波,可以指定持续的时间。如果没有指定持续时间,就需要使用noTone()命令终止。端口用来连接到蜂鸣器或者是喇叭播放特定频率声音。
在同一时间,只能产生一个音调。如果已经有音调在某个端口播放,那这时再使用tone()命令将没有效果。如果新的tone()命令是作用在同一端口,将用新的音调替代。
使用tone()命令会干扰3号与11号的PWM输出(除mega以外的其他板子)。
注意:如果想要在不同的端口发出不同的音调,需要在下一个tone()命令前,先使用noTone()命令终止前面音调。
把下面的代码编译后上传进入arduino控制板:ARDUINO 代码复制打印
- /*
- Play Super Mario theme song with Arduino and speaker
- circuit:
- * 8-ohm speaker on digital pin 8
- created 4 June 2011
- by naozhendang.com
- reference:
- http://arduino.cc/en/Tutorial/Tone
- */
- #define NOTE_B0 31
- #define NOTE_C1 33
- #define NOTE_CS1 35
- #define NOTE_D1 37
- #define NOTE_DS1 39
- #define NOTE_E1 41
- #define NOTE_F1 44
- #define NOTE_FS1 46
- #define NOTE_G1 49
- #define NOTE_GS1 52
- #define NOTE_A1 55
- #define NOTE_AS1 58
- #define NOTE_B1 62
- #define NOTE_C2 65
- #define NOTE_CS2 69
- #define NOTE_D2 73
- #define NOTE_DS2 78
- #define NOTE_E2 82
- #define NOTE_F2 87
- #define NOTE_FS2 93
- #define NOTE_G2 98
- #define NOTE_GS2 104
- #define NOTE_A2 110
- #define NOTE_AS2 117
- #define NOTE_B2 123
- #define NOTE_C3 131
- #define NOTE_CS3 139
- #define NOTE_D3 147
- #define NOTE_DS3 156
- #define NOTE_E3 165
- #define NOTE_F3 175
- #define NOTE_FS3 185
- #define NOTE_G3 196
- #define NOTE_GS3 208
- #define NOTE_A3 220
- #define NOTE_AS3 233
- #define NOTE_B3 247
- #define NOTE_C4 262
- #define NOTE_CS4 277
- #define NOTE_D4 294
- #define NOTE_DS4 311
- #define NOTE_E4 330
- #define NOTE_F4 349
- #define NOTE_FS4 370
- #define NOTE_G4 392
- #define NOTE_GS4 415
- #define NOTE_A4 440
- #define NOTE_AS4 466
- #define NOTE_B4 494
- #define NOTE_C5 523
- #define NOTE_CS5 554
- #define NOTE_D5 587
- #define NOTE_DS5 622
- #define NOTE_E5 659
- #define NOTE_F5 698
- #define NOTE_FS5 740
- #define NOTE_G5 784
- #define NOTE_GS5 831
- #define NOTE_A5 880
- #define NOTE_AS5 932
- #define NOTE_B5 988
- #define NOTE_C6 1047
- #define NOTE_CS6 1109
- #define NOTE_D6 1175
- #define NOTE_DS6 1245
- #define NOTE_E6 1319
- #define NOTE_F6 1397
- #define NOTE_FS6 1480
- #define NOTE_G6 1568
- #define NOTE_GS6 1661
- #define NOTE_A6 1760
- #define NOTE_AS6 1865
- #define NOTE_B6 1976
- #define NOTE_C7 2093
- #define NOTE_CS7 2217
- #define NOTE_D7 2349
- #define NOTE_DS7 2489
- #define NOTE_E7 2637
- #define NOTE_F7 2794
- #define NOTE_FS7 2960
- #define NOTE_G7 3136
- #define NOTE_GS7 3322
- #define NOTE_A7 3520
- #define NOTE_AS7 3729
- #define NOTE_B7 3951
- #define NOTE_C8 4186
- #define NOTE_CS8 4435
- #define NOTE_D8 4699
- #define NOTE_DS8 4978
- // notes in the melody:
- int melody[ = {
- NOTE_E4, NOTE_E4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_G4, NOTE_G3,
- NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A3, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3,
- NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A3, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3,
- NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_C5, NOTE_C5, NOTE_C5,
- NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_DS4, NOTE_D4, NOTE_C4,
- NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4,
- NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3
- };
- // note durations: 4 = quarter note, 8 = eighth note, etc.:
- int noteDurations[ = {
- 8,4,4,8,4,2,2,
- 3,3,3,4,4,8,4,8,8,8,4,8,4,3,8,8,3,
- 3,3,3,4,4,8,4,8,8,8,4,8,4,3,8,8,2,
- 8,8,8,4,4,8,8,4,8,8,3,8,8,8,4,4,4,8,2,
- 8,8,8,4,4,8,8,4,8,8,3,3,3,1,
- 8,4,4,8,4,8,4,8,2,8,4,4,8,4,1,
- 8,4,4,8,4,8,4,8,2
- };
- void setup() {
- // iterate over the notes of the melody:
- for (int thisNote = 0; thisNote < 98; thisNote++) {
- // to calculate the note duration, take one second
- // divided by the note type.
- //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
- int noteDuration = 1000/noteDurations[thisNote;
- tone(8, melody[thisNote,noteDuration);
- // to distinguish the notes, set a minimum time between them.
- // the note's duration + 30% seems to work well:
- int pauseBetweenNotes = noteDuration * 1.30;
- delay(pauseBetweenNotes);
- // stop the tone playing:
- noTone(8);
- }
- }
- void loop() {
- // no need to repeat the melody.
- }
0
|
|
|
|