Tiny RTC DS1307 时钟模块 完整代码(Arduino)及一些要注意的地方
这个东西其实是可以的,就是没什么技术支持,有很多细节会有坑,我搞了十几天(期间还花了一周来学习焊接)才完全成功的,期间我很恼火,觉得就是买了个垃圾,甚至想扔掉这个2块钱的东西。于是我又买了一个,结果两个都是一样的,这时我才静下心来看看到底是怎么一回事。现在把经验细节分享给后来的新手,高手可以略过。
下面开始分享我的经验,有以下几个点值得注意:
1、需要手工焊接,这点无法回避,老老实实焊接好5个洞的那头,至少焊接4根,DS那根可以不用,但是既然都能焊接4根了,也不在乎多1根了,我一次性把两头(一头5根,一头7根)都焊接好了;
2、焊好就是接线了,这里不会有坑,4根线没人会接错的;
3、接下来就是需要一个测试程序了,2块钱买来的地方未必会提供,客服一般都是机器人,这时如果没有一个测试完好的程序,新手就会很迷茫,到底这东西有没有用,下一步不知道从哪里开始着手了。现在不用慌了,以下有一个完整的程序,我测试了100遍以上。硬件上我用的是Arduino UNO R3,由于只有电源正负2根和SCL、SDA2根共4根线,所以硬件连接上不用考虑什么硬件不一致的问题。另外,我还可以提供部分技术支持,尽管留言。到这里就完成一半了,下面一半是代码了;
4、代码的第一个问题可能是你店家带来的声明是不对的,应该使用RTC_DS1307 RTC来定义RTC变量,而不是DS1307 RTC;(RTClib等库是需要的,这个我不再这里赘述)
5、当前时间设置用这句:RTC.adjust(DateTime(2021, 5, 9, 15, 43, 01));
6、秒钟肯定不对的,不过不用慌,文末的代码还包括了一点我自己的代码来进行秒钟微调,不过现在不用管这种小事,稍后反注释//#define HACK_ADJUST这句我们再来调整准确的秒钟;
7、程序刷入进去之后,第一个可能遇到的问题就是时间动了,但是每次重启又还是原来的时间。这个问题仔细想想就不难发现,因为我们刚刚刷进去的代码就包括了一个写死的时间呀,那每次启动可不又像第一次来设置时间时一模一样了?这和时光倒流效果一样,对吧 :P
8、所以,一旦成功写入读出时间了,那就再也不需要设置时间这一句了,马上注释掉并再次烧入程序; //RTC.adjust(DateTime(2021, 5, 9, 15, 43, 01)); //设置初始时间
9、现在程序里没有任何地方可以修改你的时间了,想修改都修改不了了,呵呵,这时不是还有秒针不太对的问题吗,用这句#define HACK_ADJUST打开我写的那段代码功能,修改其中这句中的数字1为合适的值: Wire.write(bin2bcd(sec + 1)); //秒级微调——+1可以改为合适的调整值,不要加太多,避免进位,或者用减法更靠谱。这段代码是我从Wire库和RTClib库里面抽取并修改形成的;
10、这下好像就全完成了,还有一些什么要注意的呢,让我想想。对咯,就是拔线的时候注意不要碰到那个3V锂电池(CR2032),否则时间会变成2000-01-01,不过,这又有什么慌的呢,重做一遍就是了。如果我没有遇到我怎么会知道呢,O(∩_∩)O
#include <Streaming.h>
#include <Wire.h>//IIC库
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>//#define HACK_ADJUST
#ifdef HACK_ADJUST
int adjusted = 0;
static uint8_t bin2bcd(uint8_t val) {return val + 6 * (val / 10);
}
#endifLiquidCrystal_I2C lcd(0x27, 16, 2); //设置LCD1602设备地址0x27
RTC_DS1307 RTC;void setup()
{Wire.begin(); // 开启总线,这个用于I2C的使用RTC.begin(); // 初始化时钟//RTC.adjust(DateTime(2021, 5, 9, 15, 43, 01)); //设置初始时间lcd.init(); // 初始化LCDlcd.backlight(); //设置LCD背景灯亮Serial.begin(115200);
}void loop()
{DateTime dateTime = RTC.now(); // 获取现在的时间Serial << dateTime.year() << "-" << dateTime.month() << "-" << dateTime.day() << endl;Serial << dateTime.hour() << ":" << dateTime.minute() << ":" << dateTime.second() << endl;//显示年lcd.setCursor(3, 0);lcd.print(dateTime.year());//显示月lcd.print('-');if (dateTime.month() > 9){lcd.print(dateTime.month());}else{lcd.print('0');lcd.print(dateTime.month());}//显示日lcd.print('-');if (dateTime.day() > 9){lcd.print(dateTime.day());}else{lcd.print('0');lcd.print(dateTime.day());}//显示小时lcd.setCursor(4, 1);if (dateTime.hour() > 9){lcd.print(dateTime.hour());} else{lcd.print('0');lcd.print(dateTime.hour());}//显示分钟lcd.print(':');if (dateTime.minute() > 9){lcd.print(dateTime.minute());}else{lcd.print('0');lcd.print(dateTime.minute());}//显示秒lcd.print(':');if (dateTime.second() > 9){
#ifdef HACK_ADJUST //A hacking adjust by Safirst C. Keint sec = dateTime.second();if (!adjusted){Wire.beginTransmission(DS1307_ADDRESS);Wire.write((byte)0);Wire.write(bin2bcd(sec + 1)); //秒级微调——+1可以改为合适的调整值,不要加太多,避免进位,或者用减法更靠谱。Wire.endTransmission();adjusted = 1;}
#endiflcd.print(dateTime.second());}else{lcd.print('0');lcd.print(dateTime.second());}delay(990);
}
Tiny RTC DS1307 时钟模块 完整代码(Arduino)及一些要注意的地方相关推荐
- ardino DS1307时钟模块
ardino开发版 x1 DS1307时钟模块x1 接线: VCC-5V GND-GND(负极) CLK-SCL DAT-SDA 代码: #include <RtcDS1307.h> #i ...
- DS1307时钟模块
https://blog.csdn.net/chuannaoxuan4674/article/details/101048391?ops_request_misc=%257B%2522request% ...
- Android 自定义控件,模仿小米秒表样式的时钟,完整代码注解
一个模仿小米手机秒表样式的安卓小应用程序,利用自定义控件实现. 超详细的代码注释 开发工具为:Android Studio 看图 代码: 大表盘自定义控件:[xiaomiClock ] public ...
- 51DS1302时钟及可调时钟(完整代码)
DS1302时钟 #include <REGX52.H> #include "LCD1602.h" #include "DS1302.h" void ...
- Arduino 使用DS1307时钟
相关资料链接 链接:https://pan.baidu.com/s/1eE0rkaSJsKJMU_RUorS5OA 提取码:3ujh 1.1 介绍: 这个模块主要用到实时时钟芯片DS1307.是美国D ...
- Python 拼图成心2.0【重新梳理】【附完整代码】
最新版本,点这里 之前一时兴起,写了个生成心形贴图的程序[链接在这里]但是只是把功能实现了,有很多鸡肋还有逻辑之类混乱的,于是又重新整理了一下. 需要用到的库 import os import os. ...
- 树莓派3B添加DS1307 RTC时钟模块
前段时间用树莓派做了一个小项目,到实施阶段后才突然发现树莓派没有硬件时钟,最后在某宝找到了时钟模块,商家只提供硬件,不提供技术服务,只能百度搜索配置方法,最后参照树莓派 3B+ 安装 DS1307 R ...
- (米联客MSXBO)开发板 osrc-lab LINUX下RTC时钟模块使用
概述 RTC(real-time clock)简称实时时钟,是日常生活中应用最为广泛的消费类电子产品之一.它为人们提供精确的实时时间或者为电子系统提供精确的时间基准,而备份电池在掉电后数据不丢失,在下 ...
- 「雕爷学编程」Arduino动手做(29)——DS1302时钟模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
最新文章
- [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
- 成功解决graphviz\backend.py, line 162, in pipe raise ExecutableNotFound(args) graphviz.backend.Executab
- 《Python高效开发实战》实战演练——开发Django站点1
- CVPR 2019 | 近日新出论文汇总(含视频目标分割、GAN、度量学习、高效语义分割等主题)...
- 《天天数学》连载46:二月十五日
- HTML5拖放API(代码展示)
- springboot获取客户端发来的数据
- RabbitMQ入门:发布/订阅(Publish/Subscribe)
- 微信小程序服务器端语言,微信小程序后端用什么语言好
- A 股历年三大财务报表 API 接口
- D-Link 智能家居新品将登陆苹果中国官网
- [转载]视频格式介绍
- mybatis的xmly文件与必依赖
- 高效的敏捷测试第四课 测试的团队协作
- 父亲节华为P40软文营销广告
- 关于平面战机射击游戏的一点小结
- Windows 清理磁盘
- PS基础入门教程-如何制作GIF动画
- 多元线性回归算法: 线性回归Linear Regression、岭回归Ridge regression、Lasso回归、主成分回归PCR、偏最小二乘PLS
- uni-app 点击图片放大预览
热门文章
- VUE 音频MP3播放插件
- postgresql系统架构图
- 常用linux指令集
- 国内市场占有率第一,份额上涨至46.4%,阿里云还在涨!
- vb microsoft html object library,HTML对象库简介(Microsoft HTML Object Library - mshtml.tlb)...
- sketch八个高效的快捷方式(上)
- [全网首发]一款好看的个人主页源码
- CCM-SLAM跑自己的USB摄像头
- 南京邮电大学图书管理系统
- 发那科机器人点位编辑_发那科机器人指令编辑详细介绍