在我小学的时候,中午经常去奶奶家吃饭,奶奶家是一个公寓,他家在公寓长廊的尽头,我以前去的时候,就很好奇为什么白天廊灯不会亮,而到了晚上,我跑步带起的声音就会引得整个走廊灯火通明。直到今天我也做出了这样的一个装置,我才深刻明白这里面的道道。
首先,还是先量代码:
const int ledPin=3;
const int soundPin=A0;
const int lightPin=7;
void setup() {
// put your setup code here, to run once:
pinMode(ledPin,OUTPUT);
pinMode(soundPin,INPUT_PULLUP);
pinMode(lightPin,INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
int value=analogRead(soundPin);
int bright=digitalRead(lightPin);
Serial.println(value);
if(bright==HIGH)
{
if(value>600)
{
digitalWrite(ledPin,HIGH);
delay(1000);
}
else
{
digitalWrite(ledPin,LOW);
}
}
else
{
digitalWrite(ledPin,LOW);
}
}
我们用到的主要三个元件分别是LED,用ledPin来表示,并且接在了3号引脚;声音传感器,用soundPin来表示,并且接在了A0处引脚;光敏传感器,用lightPin来表示,并且接在了7号引脚。
然后第一个setup函数,我们定义了三个元件的输出输入方式;其中ledPin是OUTPUT,soundPin和lightPin是INPUT_PULLUP的这样一个输入上拉模式。并且开启了串口,波率为9600。
在接下来的loop函数中,首先对soundPin和lightPin的输入值进行初始化,方便后面的计算,其中soundPin的输入值定义为value(有数值的意思),lightPin的输入值定义为bright。Serial.println(value)这个式子非常重要,因为这是我们通过串口监控value值的重要途径。通过串口监视器就可以知道当下的value的值。
然后是一个if语句的嵌套使用。首先的一个if,判断bright是否为高电平,及是否有灯光照着。若有,则ledPin输出低电平,不亮光。若是bright是高电平,及没有灯光照着,此时执行下一个if语句。在这个语句中,用到了value的值与600的大小比较,value的值受两个因素影响,一个是外界声音,一个则是元件影响。我一开始做的时候一直都是亮光,后来发现,原来是因为value一直是大于600的,只要调节一个元件上的旋钮,就可以改变value的值。如果value>600,说明声音够大,亮光,并且延时;若value<600,说明声音还不很大,不亮光。
这就是通过运用光敏传感器和声音传感器控制LED光亮。总结下来就是如果外界有灯光,则有声音且达到阙值也不会使led发光,当外界没有灯光时,则声音达到阙值就会使led发光。
这一装置的一个意义就是大大节约了能量的消耗。
创作不易,请多多关注,点赞,收藏!!!