当音乐声响起,学习板上的LED也会跟着音乐闪烁。是不是很有趣呢!
我们可以利用麦克风采集声音信号,然后经过程序处理。让学习板上的LED随着音乐节奏嗨起来。
# 部署
1.麦克风接到A0
引脚。
2.LED连接,左边LED1
对应11
号引脚,最右边LED10
对应接到2
号引脚。
序号 | LED端子 | osepp UNO引脚号 |
---|---|---|
1 | LED1 | 11 |
2 | LED2 | 10 |
3 | LED3 | 9 |
4 | LED4 | 8 |
5 | LED5 | 7 |
6 | LED6 | 6 |
7 | LED7 | 5 |
8 | LED8 | 4 |
9 | LED9 | 3 |
10 | LED10 | 2 |
# 程序搭建
- oseppBlock程序
- Arduino程序
int i = 0; //LED引脚变量
float sound = 0; //计算映射值变量
int LEDs = 0; //映射值变量
float ad = 0; //麦克风电压值
void soudLED() //计算映射值子程序
{
ad = analogRead(A0); //读取麦克风声音值
if (ad < sound) //如果声音值小于上次
{
sound = sound * 0.999 + ad * 0.001;
//一阶低通滤波器算法,也就是声音变小时,LED回落慢一些。
}
else
{
sound = sound * 0.95 + ad * 0.05;
//一阶低通滤波器算法,减慢LED响应速度。但是比上面声音变小时要快一些。
}
LEDs = map(sound, 20, 200, 0, 4); //映射计算出来的值,映射值
}
void setup()
{
//led1
pinMode(11, OUTPUT); //定义LED引脚模式
//led2
pinMode(10, OUTPUT);
//led3
pinMode(9, OUTPUT);
//led4
pinMode(8, OUTPUT);
//led5
pinMode(7, OUTPUT);
//led6
pinMode(6, OUTPUT);
//led7
pinMode(5, OUTPUT);
//led8
pinMode(4, OUTPUT);
//led9
pinMode(3, OUTPUT);
//led10
pinMode(2, OUTPUT);
//soundSensor1
pinMode(A0, INPUT); //定义麦克风引脚模式
}
void loop()
{
soudLED(); //计算映射值子程序,利用麦克风的值计算出来0-4之间的数
for (i = 0; i < 5; i++) //循环i
{
if (LEDs > i) //如果麦克风映射值大于i
{
digitalWrite(i + 7, HIGH); //点亮7-11号引脚的LED
digitalWrite(6 - i, HIGH); //点亮6-2号引脚的LED
}
else //否则
{
digitalWrite(i + 7, LOW); //熄灭7-11号引脚的LED
digitalWrite(6 - i, LOW); //熄灭6-2号引脚的LED
}
}
}
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
56
57
58
59
60
61
62
63
64
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
56
57
58
59
60
61
62
63
64
# 运行结果
上传好代码后,用手机在麦克风旁边播放音乐,学习板上面的LED就会随着音乐节奏闪烁起来。
# 解析
可以尝试更改代码里面的,20,200这个值。20对应的是起点的LED,可以调节触发的灵敏度。200对应的是整个范围的灵敏度,声音大时就把值改大点。或者声音小时LED点亮数量少,就把这个值改小一点。
对应代码:
LEDs = map(sound, 20, 200, 0, 4);