极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: cityant

基于ESP8266自动校时时钟

  [复制链接]
 楼主| 发表于 2019-7-12 13:49:50 | 显示全部楼层
changhai 发表于 2019-7-12 07:04
为什么把时钟芯片换成DS1302?DS3231的精度不是更好吗?

DS1302比较容易手焊而且片子便宜。

这个本来就是个网络校时时钟,放个时钟芯片也就是为了无网络掉电后能用。另外ds1302配精度高的晶振误差也不大,完全够用。



回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 14:06:02 | 显示全部楼层
78678967 发表于 2019-7-11 18:13
求写个人体传感器代码  让我抄一抄  高电平触发哈谢谢

114#楼不就是写给你的嘛,依据这个应该可以改出来吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 14:07:56 | 显示全部楼层
Q88888888Q 发表于 2019-7-12 12:42
谢谢夸奖!是用亚克力,用锯子锯起来,用亚克力胶水粘的,外面再贴上PVC墙纸。不会画图,图画起来, ...

从提示看还是库的问题,ThreeWire.h库,按编译提示把暂时不用的库删掉看看。把编译目录提前删除干净再编译
回复 支持 反对

使用道具 举报

发表于 2019-7-12 14:51:57 | 显示全部楼层
cityant 发表于 2019-7-12 13:49
DS1302比较容易手焊而且片子便宜。

这个本来就是个网络校时时钟,放个时钟芯片也就是为了无网络掉电 ...

用上3231可以在没网的环境直接当普通钟用,年误差号称不到一分钟,不过现在基本角落都有WiFi了,网络校时,1302够用。板上也可以留出1302 3231通用,想焊那个就焊哪个
回复 支持 反对

使用道具 举报

发表于 2019-7-12 20:50:00 | 显示全部楼层
本帖最后由 78678967 于 2019-7-12 20:55 编辑
cityant 发表于 2019-7-12 14:06
114#楼不就是写给你的嘛,依据这个应该可以改出来吧。


加上翻转屏幕的函数  不知道该放哪里了.........

这个论坛醉了聊天要中级会员
回复 支持 反对

使用道具 举报

发表于 2019-7-12 23:02:05 | 显示全部楼层
cityant 发表于 2019-7-12 14:06
114#楼不就是写给你的嘛,依据这个应该可以改出来吧。

我把函数放这里 读取函数模仿重力感应开关
能成功消灭屏幕 就是没法读取高电平点亮
   if (!lcdstatus){
    for(int address=0; address<devices; address++) {
      lc.shutdown(address,true);   //初始化LED
      lc.setIntensity(address, lcdlight);   //设置LED亮度;
      lc.clearDisplay(address);   //清屏
  }
  }
else{
     for(int address=0; address<devices; address++) {
      lc.shutdown(address,false);   //初始化LED
      lc.setIntensity(address, lcdlight);   //设置LED亮度;
      lc.clearDisplay(address);   //清屏
  }
}
回复 支持 反对

使用道具 举报

发表于 2019-7-13 20:49:00 | 显示全部楼层
cityant 发表于 2019-7-12 14:06
114#楼不就是写给你的嘛,依据这个应该可以改出来吧。

人体传感器我写成功了但是开机动画没显示
回复 支持 反对

使用道具 举报

发表于 2019-7-14 19:13:32 | 显示全部楼层
cityant 发表于 2019-7-12 13:49
DS1302比较容易手焊而且片子便宜。

这个本来就是个网络校时时钟,放个时钟芯片也就是为了无网络掉电 ...

大师请教一下我写这个能实现人体感应亮屏但是开机动画不显示怎么改?
void Display() {
  int num = 0;
  if ((!lcddirection) && (lcdstatus)){
    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]);    //使用列方式显示;
      lc.shutdown(address,true);   //LCD显示状态,true点亮,false关闭
      num ++;
    }
    }
  }
  else if((lcddirection) && (lcdstatus)){//翻转
    for(int address=0; address<=3; address++){    //逐个扫描四个LED屏
    for(int col=7; col>=0; col--) {    //每块LED屏逐列扫描;
      lc.setIntensity(address, lcdlight);   //设定Led亮度
      lc.setColumn(address, col, reverse_bit(disp[num]));    //使用列方式显示;
      lc.shutdown(address,true);   //LCD显示状态,true点亮,false关闭
      num ++;
    }
    }
  }
else if((lcddirection) && (!lcdstatus)){
    for(int address=0; address<=3; address++){    //逐个扫描四个LED屏
    for(int col=7; col>=0; col--) {    //每块LED屏逐列扫描;
      lc.setIntensity(address, lcdlight);   //设定Led亮度
      lc.setColumn(address, col, reverse_bit(disp[num]));    //使用列方式显示;
      lc.shutdown(address,false);   //LCD显示状态,true点亮,false关闭
      num ++;
    }
    }
  }
else{//翻转
     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]);    //使用列方式显示;
      lc.shutdown(address,false);   //LCD显示状态,true点亮,false关闭
      num ++;
    }
    }
  }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-15 14:26:04 | 显示全部楼层
78678967 发表于 2019-7-14 19:13
大师请教一下我写这个能实现人体感应亮屏但是开机动画不显示怎么改?
void Display() {
  int num = 0;

你这个逻辑中如果lcddirection和lcdstatus都为false时,屏幕是关闭的。把lcdstatus变量定义时初始化为true;
你这个代码这样写会直观些;


void Display() {
    int num = 0;
    if (lcdstatus){
      if (!lcddirection) {
        for(int address=3; address>=0; address--){    //逐个扫描四个LED屏
            for(int col=0; col<8; col++) {    //每块LED屏逐列扫描;
              lc.shutdown(address,true);   //LCD显示状态,true点亮,false关闭
              lc.setIntensity(address, lcdlight);   //设定Led亮度
              lc.setColumn(address, col, disp[num]);    //使用列方式显示;
              num ++;
              }
        }
      }
      else{//翻转
        for(int address=0; address<=3; address++){    //逐个扫描四个LED屏
            for(int col=7; col>=0; col--) {    //每块LED屏逐列扫描;
              lc.shutdown(address,true);   //LCD显示状态,true点亮,false关闭
              lc.setIntensity(address, lcdlight);   //设定Led亮度
              lc.setColumn(address, col, reverse_bit(disp[num]));    //使用列方式显示;
              num ++;
              }
        }
      }
    }
    else{
        lc.shutdown(address,false);   //LCD显示状态,true点亮,false关闭
        delay(10);
    }
}
回复 支持 反对

使用道具 举报

发表于 2019-7-15 20:07:53 | 显示全部楼层
本帖最后由 78678967 于 2019-7-15 20:10 编辑
cityant 发表于 2019-7-15 14:26
你这个逻辑中如果lcddirection和lcdstatus都为false时,屏幕是关闭的。把lcdstatus变量定义时初始化为tru ...


这个什么回事呢?

没必要加延时吧?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-16 09:08:11 | 显示全部楼层
78678967 发表于 2019-7-15 20:07
这个什么回事呢?

没必要加延时吧?

是有问题,删多了。
void Display() {
    int num = 0;
    if (lcdstatus){
      if (!lcddirection) {
        for(int address=3; address>=0; address--){    //逐个扫描四个LED屏
            for(int col=0; col<8; col++) {    //每块LED屏逐列扫描;
              lc.shutdown(address,true);   //LCD显示状态,true点亮,false关闭
              lc.setIntensity(address, lcdlight);   //设定Led亮度
              lc.setColumn(address, col, disp[num]);    //使用列方式显示;
              num ++;
              }
        }
      }
      else{//翻转
        for(int address=0; address<=3; address++){    //逐个扫描四个LED屏
            for(int col=7; col>=0; col--) {    //每块LED屏逐列扫描;
              lc.shutdown(address,true);   //LCD显示状态,true点亮,false关闭
              lc.setIntensity(address, lcdlight);   //设定Led亮度
              lc.setColumn(address, col, reverse_bit(disp[num]));    //使用列方式显示;
              num ++;
              }
        }
      }
    }
    else{
        for(int address=0; address<=3; address++){    //逐个扫描四个LED屏
           lc.shutdown(address,false);   //LCD显示状态,true点亮,false关闭
           delay(10);
       }

    }
}
回复 支持 反对

使用道具 举报

发表于 2019-7-16 13:55:42 来自手机 | 显示全部楼层
cityant 发表于 2019-7-16 09:08
是有问题,删多了。
void Display() {
    int num = 0;

我试过这样写熄屏后蓝灯不闪感觉不运行了我觉得是一开机检测是不是高电平太慢了跟开机动画接不上就没显示我改成是低电平就熄灭就解决了
回复 支持 反对

使用道具 举报

发表于 2019-7-16 19:50:32 | 显示全部楼层
cityant 发表于 2019-7-16 09:08
是有问题,删多了。
void Display() {
    int num = 0;

12小时制怎么弄????
回复 支持 反对

使用道具 举报

发表于 2019-7-17 10:14:10 | 显示全部楼层
web升级固件方便,改个参数,直接浏览器往上一传就好了,省的拿过来连上电脑,弄好又放回去
回复 支持 反对

使用道具 举报

发表于 2019-7-18 21:35:21 | 显示全部楼层
您好,请问您能帮我看看程序吗,我也做的是时钟 我想让他整点报时,用别的芯片或者nodered实现,但是我不会写整点报时了#include <ESP8266WiFi.h>

void setup() {
  Serial.begin(115200);
  Serial.println();
  WiFi.mode(WIFI_STA);
  WiFi.begin("GZY", "88888888");
  while (!WiFi.isConnected())
  {
    delay(100);
  }
  Serial.println(WiFi.localIP());
  configTime(8*3600, 0, "time.windows.com");
  //         时区偏移+8,夏令时,时间服务器
}

void loop() {
  time_t now = time(0);     //获取当前绝对时间,从1970-1-1到现在的秒数
  Serial.print(ctime(&now));//将秒数转成字符串表示的时间
  
  delay(1000);
}
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 17:56 , Processed in 0.043344 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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