当音乐声响起,学习板上的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

# 运行结果

上传好代码后,用手机在麦克风旁边播放音乐,学习板上面的LED就会随着音乐节奏闪烁起来。

# 解析

可以尝试更改代码里面的,20,200这个值。20对应的是起点的LED,可以调节触发的灵敏度。200对应的是整个范围的灵敏度,声音大时就把值改大点。或者声音小时LED点亮数量少,就把这个值改小一点。
对应代码:
LEDs = map(sound, 20, 200, 0, 4);

# 操作视频