本帖最后由 珜羽 于 2013-1-30 16:15 编辑
先看视频:
硬件准备: 你需要arduino的板子一张。红色LED一只。导线两根。以及日光灯。(成都阴霾天光照不足)
源代码如下,也可以下载附件的方式获得:
[mw_shl_code=c,true]char led1 = 2;//定义连接到LED的负极的引脚
char led2 = 3;//定义连接到LED的正极的引脚
unsigned int time;
void setup() {
pinMode(led2, OUTPUT);
Serial.begin(9600);
}
void loop() {
time=0;
digitalWrite(led2, LOW);
pinMode(led1, OUTPUT);
digitalWrite(led1, HIGH);
delayMicroseconds(10);//反向给LED结电容充电10us
pinMode(led1, INPUT);//设置为高阻检测结电容放电时间
while(digitalRead(led1)==1){
if(++time>=2500){//检测时间参数(没有效果就修改这个数字,加大直到60000)
pinMode(led1, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(5);//闪速严重的话减小这个值,但是亮度会降低
break;
}
}
Serial.println(time);//调试输出观察,可以注释掉
}[/mw_shl_code]
LED.zip
(813 Bytes, 下载次数: 23)
编译下载后你就能看到视频中的效果了。
有光照的样子:
手遮挡光线的样子:
串口调试器看到的数据:
如果你看不到,请修改代码中的参数。 原理,LED在制造的时候有一个叫做结电容的东西,还有一个叫内阻,或者叫光电阻的东西,环境光越两,这个电阻越小。 当我们给结电容充电到5V后,IO切换到高阻态去检测这个电容上的电压。电容的电荷通过内阻泄放,电压下降,降低到IO的低电平感应阙值的时间与外界光照有关系(和温度也有关系)。
PS:没有效果的时候请按照下面的步骤检查: 1.检查硬件连接对了没,或者LED是否接反了。 2.看看你的LED是否为红色,我测试过暖白需要检测的时间较长,效果不好,其他颜色的没有测试。因为最近天气原因光照不好,没法测试日光下效果如何,所以开了灯补光。 3.其他原因请大家交流。
|