实现目标效果:光敏电阻控制LED的亮度 同时数码管显示光敏电阻的数值
实现原理:获得光敏电阻阻值后传入开发板 在串口通信中显示光敏电阻阻值同时将数值传入数码管 将数值大小写入6引脚就能控制LED的亮度
过程:一、在编写过程中发现数码管会闪烁 则取消延时并在大函数中多循环几次即可解决 二、在编写过程中发现数码管每换一个数就会灭一次然后再亮 则在主函数中取消延时即可解决 三、又发现1引脚不正常 检查了所有的代码发现没有问题 又单独测试了1引脚发现1引脚出现未知错误(新手勿喷) 那就把1引脚换成13引脚解决 四、发现光敏电阻经过程序的洗礼后并不灵敏 原因是本人太菜不会多线程 这个问题以后解决 五、发现接上13引脚时也会微微亮 芯片内部结构不太懂 不知道为什么13引脚会有微微的电平
连线:数码管和上一次的相同 把1引脚改成13引脚即可 LED灯连6引脚 光敏电阻Vcc连接5V引脚 GND连接GND OUT连接A0 其中 LED连接一个阻值为100欧姆的电阻 光敏电阻连接一个阻值为10K欧姆的电阻 最好不要用同一个GND 可能会提升最底电平导致实现出现小问题
图片:
下面提供了代码 和上一次写的相同的数码管显示数字的逻辑 但是最大的缺陷就是没有使用多线程 勉强能用就是反应有点迟钝
#define open(num) digitalWrite(num,LOW)
#define close(num) digitalWrite(num,HIGH)
int e=13;
int d=2;
int dp=3;
int c=4;
int g=5;
int b=7;
int BT3=8;
int BT2=9;
int f=10;
int a=11;
int BT1=12;
int LED=13;///LED变成高电平时会亮
void digital_1()
{
open(b);
open(c);
//delay(10);
}
void digital_2()
{
open(a);
open(b);
open(g);
open(e);
open(d);
//delay(10);
}
void digital_3()
{
open(a);
open(b);
open(g);
open(c);
open(d);
//delay(10);
}
void digital_4()
{
open(b);
open(f);
open(g);
open(c);
//delay(10);
}
void digital_5()
{
open(a);
open(f);
open(g);
open(c);
open(d);
//delay(10);
}
void digital_6()
{
open(a);
open(f);
open(g);
open(e);
open(c);
open(d);
//delay(10);
}
void digital_7()
{
open(a);
open(b);
open(c);
//delay(10);
}
void digital_8()
{
open(a);
open(f);
open(g);
open(e);
open(c);
open(d);
open(b);
//delay(10);
}
void digital_9()
{
open(a);
open(f);
open(g);
open(c);
open(d);
open(b);
//delay(10);
}
void digital_0()
{
open(a);
open(f);
open(e);
open(c);
open(d);
open(b);
//delay(10);
}
void resetup()
{
int i;
for(i=1;i<=13;i++)
{
if(i!=6)
digitalWrite(i,HIGH);
}
open(8);
open(9);
open(12);
}
void digital_up(int num)
{
int num1=num/100;
int num2=num/10%10;
int num3=num%10;
int i=100;
Serial.println(num,DEC);
while(i--)
{
analogWrite(6,num/4);
switch(num1)
{
case 0:digital_0();break;
case 1:digital_1();break;
case 2:digital_2();break;
case 3:digital_3();break;
case 4:digital_4();break;
case 5:digital_5();break;
case 6:digital_6();break;
case 7:digital_7();break;
case 8:digital_8();break;
case 9:digital_9();
}
close(BT1);
delay(2);
resetup();
open(BT1);
switch(num2)
{
case 0:digital_0();break;
case 1:digital_1();break;
case 2:digital_2();break;
case 3:digital_3();break;
case 4:digital_4();break;
case 5:digital_5();break;
case 6:digital_6();break;
case 7:digital_7();break;
case 8:digital_8();break;
case 9:digital_9();
}
close(BT2);
delay(2);
resetup();
open(BT2);
switch(num3)
{
case 0:digital_0();break;
case 1:digital_1();break;
case 2:digital_2();break;
case 3:digital_3();break;
case 4:digital_4();break;
case 5:digital_5();break;
case 6:digital_6();break;
case 7:digital_7();break;
case 8:digital_8();break;
case 9:digital_9();
}
close(BT3);
delay(2);
resetup();
open(BT3);
}
open(BT1);
open(BT2);
open(BT3);
return;
}
void setup(){
pinMode(6,OUTPUT);
Serial.begin(9600);
unsigned char i;
for(i=1;i<=13;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
open(8);
open(9);
open(12);
}
void loop(){
int light;
light=analogRead(A0);
digital_up(light);
Serial.println(light,DEC);
}