cityant 发表于 2019-7-7 12:35:01

附件增加了对光敏电阻的支持;



注意:
1、ADC接模拟口AO;、
2、在我代码中,环境光越亮ADC读出的数值越小。


Q88888888Q 发表于 2019-7-7 14:56:58

cityant 发表于 2019-7-7 12:35
附件增加了对光敏电阻的支持;




不知哪里出了问题,接进去没反应,光敏模块用万用表量确实是越亮电压越小。

cityant 发表于 2019-7-7 15:46:39

Q88888888Q 发表于 2019-7-7 14:56
不知哪里出了问题,接进去没反应,光敏模块用万用表量确实是越亮电压越小。 ...

你用万用表量到的光敏电阻电压是多少?esp8266adc引脚接受的电压范围是0-1v,如果超过1v输出值会一直是1024。你在checklight()函数中加个打印,把adc值从串口打印出来看看。

Q88888888Q 发表于 2019-7-7 16:15:32

cityant 发表于 2019-7-7 15:46
你用万用表量到的光敏电阻电压是多少?esp8266adc引脚接受的电压范围是0-1v,如果超过1v输出值会一直是10 ...

室内光线加用手电照着的截图,屏幕亮度没变化

cityant 发表于 2019-7-7 17:22:00

本帖最后由 cityant 于 2019-7-7 17:31 编辑

Q88888888Q 发表于 2019-7-7 16:15
室内光线加用手电照着的截图,屏幕亮度没变化
不好意思,程序修改漏了一处:L,需要增加下面红色的一行
void Display() {

int num = 0;
lc.setIntensity(address, lcdlight);      //设定Led亮度

for(int address=3; address>=0; address--){    //逐个扫描四个LED屏
    for(int col=0;col<8;col++) {    //每块LED屏逐列扫描;
      lc.setColumn(address,col,disp);    //使用列方式显示;
      num ++;
    }
}
}
修改后的代码

Q88888888Q 发表于 2019-7-7 18:16:48

cityant 发表于 2019-7-7 17:22
不好意思,程序修改漏了一处,需要增加下面红色的一行
void Display() {



好像还出错:D

cityant 发表于 2019-7-7 19:17:59

Q88888888Q 发表于 2019-7-7 18:16
好像还出错

这样:

void Display() {
int num = 0;
for(int address=3; address>=0; address--){    //逐个扫描四个LED屏
    for(int col=0;col<8;col++) {    //每块LED屏逐列扫描;
      lc.setIntensity(address, lcdlight);      //设定Led亮度
      lc.setColumn(address,col,disp);    //使用列方式显示;
      num ++;
    }
}
}

我样应该可以了。

我改动电路后就没有在这套代码上继续走了,临时改一下未验证容易出错,不好意思。:L

78678967 发表于 2019-7-7 19:34:40

本帖最后由 78678967 于 2019-7-7 21:41 编辑

抄你的最新的代码里面好像没有这个

cityant 发表于 2019-7-7 20:12:48

78678967 发表于 2019-7-7 19:34
求加一个用传感器控制屏幕亮灭的代码整天亮着也浪费电

加一个人体红外传感器,输出高低电平。找一个数字引脚通过读取电平高低来决定是否关闭LED显示。
1、定义一个开关变量;
boolean lcdstatus = true; //LCD显示状态,true点亮,false关闭
2、在主循环中定时读取红外传感器的状态;
lcdstatus = digitalRead(IRPIN); //IRPIN为连接红外传感器的引脚
3、在display()函数中依据lcdstatus决定是否关闭LED显示;
void Display() {
int num = 0;
for(int address=3; address>=0; address--){    //逐个扫描四个LED屏
    if(lcdstatus){
      lc.shutdown(address,false);   //开启LED屏幕显示
      for(int col=0;col<8;col++) {    //每块LED屏逐列扫描;
          lc.setIntensity(address, lcdlight);                //设定Led亮度
            lc.setColumn(address,col,disp);    //使用列方式显示;
            num ++;
      }
    }
    else{
      lc.shutdown(address,true);   //lcdstatus 为false时关闭屏幕,进入节电模式
    }
}
}

你参考试试吧,我没环境,没有做验证。

Q88888888Q 发表于 2019-7-7 21:09:42

cityant 发表于 2019-7-7 19:17
这样:

void Display() {


可以了,正常了!谢谢!麻烦你一遍又一遍的修改了:D

cityant 发表于 2019-7-7 21:36:47

78678967 发表于 2019-7-7 19:34
else{
    lcdlight = 0;}
}


lcdlight变量没有声明。程序开头部分放这条了吗?
unsigned int lcdlight = 6;        //LED屏亮度

78678967 发表于 2019-7-7 21:54:50

本帖最后由 78678967 于 2019-7-7 22:11 编辑

unsigned int lcdlight = 6;      //LED屏亮度
void Display() {
放这里就成了............



加传感器就乱套了:'(
'lcdstatus' does not name a type

cityant 发表于 2019-7-8 12:02:01

78678967 发表于 2019-7-7 21:54
unsigned int lcdlight = 6;      //LED屏亮度
void Display() {
放这里就成了............


这个lcdlight在checklight()函数也会用,建议放到最前面变量定义那儿。

这个lcdstatus是加红外传感器示例里用到的变量,你都放代码里了?建议调完一个再加一个。

78678967 发表于 2019-7-8 20:37:16

cityant 发表于 2019-7-8 12:02
这个lcdlight在checklight()函数也会用,建议放到最前面变量定义那儿。

这个lcdstatus是加红外传感器示 ...

这样子对不对

Q88888888Q 发表于 2019-7-9 13:44:59

cityant 发表于 2019-7-8 12:02
这个lcdlight在checklight()函数也会用,建议放到最前面变量定义那儿。

这个lcdstatus是加红外传感器示 ...

8266芯片板上的蓝色指示灯不知能不能关闭
页: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15
查看完整版本: 基于ESP8266自动校时时钟