极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: cityant

基于ESP8266自动校时时钟

  [复制链接]
 楼主| 发表于 2019-7-7 12:35:01 | 显示全部楼层
附件增加了对光敏电阻的支持;

NTPclock_20190707.rar (5.98 KB, 下载次数: 24)
回复 支持 反对

使用道具 举报

发表于 2019-7-7 14:56:58 | 显示全部楼层
cityant 发表于 2019-7-7 12:35
附件增加了对光敏电阻的支持;

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

使用道具 举报

 楼主| 发表于 2019-7-7 15:46:39 | 显示全部楼层
Q88888888Q 发表于 2019-7-7 14:56
不知哪里出了问题,接进去没反应,光敏模块用万用表量确实是越亮电压越小。 ...

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

使用道具 举报

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

室内光线加用手电照着的截图,屏幕亮度没变化
光敏.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-7 17:22:00 | 显示全部楼层
本帖最后由 cityant 于 2019-7-7 17:31 编辑
Q88888888Q 发表于 2019-7-7 16:15
室内光线加用手电照着的截图,屏幕亮度没变化

不好意思,程序修改漏了一处,需要增加下面红色的一行
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]);    //使用列方式显示;
      num ++;
    }
  }
}
修改后的代码

NTPclock_20190707-2.rar (6 KB, 下载次数: 22)
回复 支持 反对

使用道具 举报

发表于 2019-7-7 18:16:48 | 显示全部楼层
cityant 发表于 2019-7-7 17:22
不好意思,程序修改漏了一处,需要增加下面红色的一行
void Display() {

好像还出错
批注 2019-07-07 174647.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-7 19:17:59 | 显示全部楼层

这样:

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]);    //使用列方式显示;
      num ++;
    }
  }
}

我样应该可以了。

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

回复 支持 反对

使用道具 举报

发表于 2019-7-7 19:34:40 | 显示全部楼层
本帖最后由 78678967 于 2019-7-7 21:41 编辑

抄你的最新的代码里面好像没有这个
回复 支持 反对

使用道具 举报

 楼主| 发表于 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]);    //使用列方式显示;
            num ++;
        }
    }
    else{
        lc.shutdown(address,true);   //lcdstatus 为false时关闭屏幕,进入节电模式
    }
  }
}

你参考试试吧,我没环境,没有做验证。
回复 支持 反对

使用道具 举报

发表于 2019-7-7 21:09:42 | 显示全部楼层
cityant 发表于 2019-7-7 19:17
这样:

void Display() {

可以了,正常了!谢谢!麻烦你一遍又一遍的修改了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-7 21:36:47 | 显示全部楼层
78678967 发表于 2019-7-7 19:34
else{
    lcdlight = 0;}
}


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

使用道具 举报

发表于 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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-8 12:02:01 | 显示全部楼层
78678967 发表于 2019-7-7 21:54
unsigned int lcdlight = 6;        //LED屏亮度
void Display() {
放这里就成了............

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

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

使用道具 举报

发表于 2019-7-8 20:37:16 | 显示全部楼层
cityant 发表于 2019-7-8 12:02
这个lcdlight在checklight()函数也会用,建议放到最前面变量定义那儿。

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

这样子对不对
AVP_3V}]D]7K41Q]ZX0@_29.png
回复 支持 反对

使用道具 举报

发表于 2019-7-9 13:44:59 | 显示全部楼层
cityant 发表于 2019-7-8 12:02
这个lcdlight在checklight()函数也会用,建议放到最前面变量定义那儿。

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

8266芯片板上的蓝色指示灯不知能不能关闭
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-2-29 19:17 , Processed in 0.077514 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表