基于 Arduino 高精度简易桌面钟(Oled/DS3231)

在网上很少能看到有关RTC时钟的教程,有的话也是语焉不详,更多的是基于ESP8266的电子时钟,可惜宿舍网不稳定,不如使用自带电源的RTC模块显示时间,于是就做了这个桌面时间显示,下面提供一下思路

材料:Arduino Uno, DS3231, 中景园7针SPI 0.96寸 1306 OLED屏(4针的IIC也可以用 后续会讲),杜邦线,硬纸壳,3.7v升压模块,3.7v锂电池

1.连线

参考网上的Oled接线图
Arduino线路图
从图中可以看到Arduino的IIC接口是A4和A5,对应接上DS3231的四根管脚就可以(SDA和SCL)

2.DS3231设定

想要对DS3231进行校对和使用需要在网上下载对应的库文件,这里不建议用商家给的DS3231的官方库,缺少很多头文件,建议使用RTClib库,可以直接在管理库里搜索下载

首先校正现在时间:

提供几个谜一样的小技巧:

0.1 把//rtc.adjust的注释去掉即可设定时间

0.2 上传和编译占用一定的时间,建议提前9秒点上传按钮(这个时间自己试一下,不一定相同)

0.3 不要同时使用多个时间库,因为有些库关于周日是第一天还是周一是第一天有很大的争议,这就导致很多数据是错乱的

#include "RTClib.h"

RTC_DS3231 rtc;

.......

void setup () {
   
  Serial.begin(9600);

  if (! rtc.begin()) {
   
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于Arduino UNO,DS1302时模块和OLED显示屏的代码示例: ```C++ #include <DS1302.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // DS1302连接引脚 const int CLK = 2; const int DAT = 3; const int RST = 4; DS1302 rtc(CLK, DAT, RST); // OLED连接引脚 #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); void setup() { Serial.begin(9600); // 设置时时间,格式:年,月,日,小时,分,秒 rtc.writeProtect(false); rtc.halt(false); rtc.setDOW(SATURDAY); rtc.setTime(12, 0, 0); rtc.setDate(1, 1, 2000); rtc.writeProtect(true); // 初始化OLED显示屏 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); } void loop() { // 获取当前时间 rtc.readTime(); // 显示时间,格式:小时:分:秒 Serial.print(rtc.hrs, DEC); Serial.print(':'); Serial.print(rtc.min, DEC); Serial.print(':'); Serial.println(rtc.sec, DEC); // 清空OLED显示屏 display.clearDisplay(); // 显示时间,格式:小时:分:秒 display.setCursor(0, 0); display.print("Time: "); if (rtc.hrs < 10) { display.print('0'); } display.print(rtc.hrs, DEC); display.print(':'); if (rtc.min < 10) { display.print('0'); } display.print(rtc.min, DEC); display.print(':'); if (rtc.sec < 10) { display.print('0'); } display.println(rtc.sec, DEC); // 显示日期,格式:月/日/年 display.setCursor(0, 10); display.print("Date: "); if (rtc.mon < 10) { display.print('0'); } display.print(rtc.mon, DEC); display.print('/'); if (rtc.date < 10) { display.print('0'); } display.print(rtc.date, DEC); display.print('/'); display.print(rtc.year, DEC); // 刷新OLED显示屏 display.display(); // 等待1秒 delay(1000); } ``` 在上面的代码中,我们使用了 `DS1302.h` 库来连接和读取DS1302时模块,并使用 `Adafruit_SSD1306.h` 库来连接和控制OLED显示屏。在 `setup()` 函数中,我们设置了时的起始时间,并初始化了OLED显示屏。在 `loop()` 函数中不断读取和显示当前时间,并在OLED显示屏上显示时间和日期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值