当我们走在楼道里,一拍手,楼道里面的灯就自动亮起来了,楼道里面用的声控灯就是用麦克风来控制的。我们还可以结合之前的光线感应器做一个灯,只有光线不足的时候,然后有声音的时候LED才会亮起,并且延时5秒后熄灭。

# 部署

  1. LED6接到OSEPP UNO的13号引脚。
  2. 麦克风接到OSEPP UNO的A0引脚。
  3. 光线感应器接到OSEPP UNO的A1引脚。

流程图

uml diagram

程序的值可以根据实际情况设定,光线传感器的值越低,就需要更暗的环境,声音传感器的值越高,就需要更大的声音来触发,你也可以适当的修改来看一下实际效果。

# 程序搭建

  • oseppBlock程序

  • Arduino程序
void setup()
{
    //soundSensor1
    pinMode(A0, INPUT); //定义A0为输入模式
    //led1
    pinMode(13, OUTPUT); //定义13号引脚为输出模式
    //light1
    pinMode(A1, INPUT); //定义A0为输入模式
}

void loop()
{
    if (analogRead(A1) < 150 && analogRead(A0) > 300) //如果A1小于150与A0大于300,要同时满足这两个条件
    {
        digitalWrite(13, HIGH); //13号引脚输出高电平
        delay(5000);            //延时5000毫秒
    }
    else
    {
        digitalWrite(13, LOW); //13号引脚输出低电平
        delay(100);            //延时100毫秒
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 运行结果

当光线变暗,光线传感器的值小于150,并且声音传感器的值要大于300,此时就会执行下面的程序。点亮LED并且延时5秒后熄灭,否则LED保持低电平状态。

# 解析

  • 逻辑运算符

代码里面 用到了一个新的运算符号 与(&&) ,常用的运算符还有 或(||)非(!)

代码里面用 &&表示 ,就像串联关系。如果第一个条件与第二个条件皆为"真",传回"真"(true)值。也就是条件都同时满足时,才执行。
代码:
if(a&&b)
只有当ab同时为真时才能为真,其余为假。

代码里面用 ||表示 ,就像并联关系。如果第一个条件和第二个条件,其中只要有一个为"真",传回"真"(true)值。也就是满足给定条件其中的一个,就执行。
代码:
if(a||b)
只有当ab同时为假时才能为假,其余为真。

代码里面用 !表示 ,如果条件为"假",传回"真"(true)值。也就是不符合给定条件,就执行。
代码:
if(!a)
!a,若a为真,则!a为假;若a为假,则!a为真。