上面的实验让扬声器只发出一个声音显得太无趣,接下来我们要让扬声器发出不同的声调。并且使用一个个开关控制一个声调,就像电子琴一样。
# 部署
按照下表连接好导线
序号 | 元件端子 | osepp UNO引脚号 |
---|---|---|
1 | Speaker | 2 |
2 | Button1 | 9 |
3 | Button2 | 8 |
4 | Button3 | 7 |
5 | Button4 | 6 |
6 | Button5 | 5 |
7 | Button6 | 4 |
8 | Button7 | 3 |
# 程序搭建
- oseppBlock程序
- Arduino程序
void setup()
{
//speaker1
pinMode(2, OUTPUT); //定义2号引脚为输出模式
//button1
pinMode(9, INPUT); //定义9号引脚为输入模式
//button2
pinMode(8, INPUT); //定义8号引脚为输入模式
//button3
pinMode(7, INPUT); //定义7号引脚为输入模式
//button4
pinMode(6, INPUT); //定义6号引脚为输入模式
//button5
pinMode(5, INPUT); //定义5号引脚为输入模式
//button6
pinMode(4, INPUT); //定义4号引脚为输入模式
//button7
pinMode(3, INPUT); //定义3号引脚为输入模式
}
void loop()
{
if (digitalRead(9) == LOW) //如果9号引脚为低电平时
{
tone(2, 131); //2号引脚输出131频率的声音
}
else if (digitalRead(8) == LOW) //如果8号引脚为低电平时
{
tone(2, 147); //2号引脚输出147频率的声音
}
else if (digitalRead(7) == LOW) //如果7号引脚为低电平时
{
tone(2, 165); //2号引脚输出165频率的声音
}
else if (digitalRead(6) == LOW) //如果6号引脚为低电平时
{
tone(2, 175); //2号引脚输出175频率的声音
}
else if (digitalRead(5) == LOW) //如果5号引脚为低电平时
{
tone(2, 196); //2号引脚输出196频率的声音
}
else if (digitalRead(4) == LOW) //如果4号引脚为低电平时
{
tone(2, 220); //2号引脚输出220频率的声音
}
else if (digitalRead(3) == LOW) //如果3号引脚为低电平时
{
tone(2, 247); //2号引脚输出247频率的声音
}
else //否则
{
noTone(2); //停止声音
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 运行结果
学习板上只有7个开关,我们就设定前面7个音调。从开关1至7就是哆唻咪哗嗦啦西。
找一首简单的曲子,试试能不能弹出来1-2-3-1,1-2-3-1,3-4-5,3-4-5...
一首乐曲有若干音符组成,一个音符对应一个频率。
tone()
函数可以产生固定频率的PWM信号来驱动扬声器发声。发声时间长度和声调都可以通过参数控制。
定义发声时间长度有两种方法,第一种是通过tone()
函数的参数来定义发声时长,另一种是使用no Tone()
函数来停止发声。
如果您在使用tone()
函数时没有定义发声时间长度,那么除非您通过noTone()
函数来停止声音,否则Arduino将会一直通过tone()
函数产生声音信号。
# 解析
Arduino一次只能产生一个声音。假如Arduino的某一个引脚正在通过 tone()
函数产生发声信号,那么此时让Arduino使用另外一个引脚通过tone()
函数发声是不行的。
- 函数
tone()
:
代码:
tone(pin, frequency)
tone(pin, frequency, duration)
参数:
pin: 发声引脚(该引脚需要连接扬声器)
frequency: 发声频率(单位:赫兹) – 无符号整数型
duration: 发声时长(单位:微秒,此参数为可选参数) – 无符号长整型
该函数无返回值