Arduino提高篇23—OLED电子时钟

在前篇文章中,我们通过库函数驱动DS1302获取到时间数据并且通过串口输出,而串口只是方便调试,要制作电子时钟,我们需要使用显示模块,本篇结合OLED对时间数据进行展示。

1. 实验材料

  • Uno R3开发板
  • 配套USB数据线
  • 公对母杜邦线
  • 面包板及配套连接线
  • OLED显示屏
  • DS1302模块

2. 实验步骤

1. 根据原理图搭建电路图。

在前篇基础上添加了OLED模块连接。DS1302模块的VCC和GND连接Uno开发板的3.3V和GND。DS1302模块的CLK、DAT、RST对应连接Uno开发板的4、3、2引脚。OLED的VCC和GND分别连接开发板的3.3V和GND,OLED的SDA、SCL分别连接开发板的A4、A5引脚。

实验原理图如下图所示:

实验原理图

实物连接图如下图所示:

实物连接图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

#include <DS1302.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET     4
Adafruit_SSD1306 oled(128, 64, &Wire, OLED_RESET);

DS1302 rtc(2, 3, 4); //对应DS1302的RST,DAT,CLK

int sec_temp;

void initRTCTime(void)//初始化RTC时钟
{
  rtc.writeProtect(false); //关闭写保护
  rtc.halt(false); //清除时钟停止标志
  Time t(2020, 4, 25, 21, 50, 50, 7); //新建时间对象 最后参数位星期数据,周日为1,周一为2以此类推
  rtc.time(t);//向DS1302设置时间数据
}

void updatTime()//打印时间数据
{
  Time tim = rtc.time(); //从DS1302获取时间数据
  char date[20];
  char timer[20];
  snprintf(date, sizeof(date), "%04d-%02d-%02d",
           tim.yr, tim.mon, tim.date);
  snprintf(timer, sizeof(timer), "%02d:%02d:%02d",
           tim.hr, tim.min, tim.sec);

  if (tim.sec != sec_temp) { //一秒刷新一次
    oled.clearDisplay();//清屏
    oled.setCursor(15, 2);//设置显示位置
    oled.println("--CLOCK--");
    oled.setCursor(4, 25);//设置显示位置
    oled.println(date);
    oled.setCursor(18, 50);//设置显示位置
    oled.println(timer);
    oled.display(); // 开显示
  }
  sec_temp = tim.sec;
}

void setup() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.setTextColor(WHITE);//开像素点发光
  oled.clearDisplay();//清屏
  oled.setTextSize(2); //设置字体大小

  //新模块上电需要设置一次当前时间,
  //下载完成后需屏蔽此函数再次下载,否则每次上电都会初始化时间数据
  //  initRTCTime();

}

void loop() {
  updatTime();
}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

程序下载

3. 实验现象

OLED显示效果如下:

实验现象

4. 程序说明

在DS1302的各种电子时钟制作中,我们经常会遇到时钟走时不准的情况。除了DS1302芯片本身问题,大部分是由晶振精度及匹配电容造成的。对于要求不高的应用,我们可以大概测量每天的误差范围,大概率是走时过快的,然后在程序中加入每天自动校准的操作。

另外会发现秒数变化不均匀,时快时慢,这跟屏幕的刷新频率有关。我们可以使用定时器,一秒获取一次DS1302数据进行刷新。而本篇程序中通过对比前后两次获取到的时间数据中秒的值,当秒数改变后进行一次刷新。


关注公众号「TonyCode」,更多精彩内容分享。
回复「1024」获取1000G学习资料。
个人博客
在这里插入图片描述

  • 19
    点赞
  • 180
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: 要在 Arduino 上使用 OLED 显示数字时钟,您需要先连接 OLED 显示屏到 Arduino 板上。 一般来说,OLED 显示屏连接到 Arduino 板上需要使用 I2C 总线。I2C 总线需要连接到 Arduino 板的 SDA 和 SCL 引脚上。 以下是一个简单的代码示例,它可以在 OLED 显示屏上显示数字时钟: ```C++ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET -1 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0, 0); } void loop() { display.clearDisplay(); display.setCursor(0, 0); // 获取当前时间 int hour = hour(); int minute = minute(); int second = second(); // 显示时间 display.print(hour); display.print(":"); if (minute < 10) { display.print("0"); } display.print(minute); display.print(":"); if (second < 10) { display.print("0"); } display.print(second); display.display(); delay(1000); } ``` 这个代码示例使用 Adafruit_SSD1306 库来控制 OLED 显示屏。在 setup() 函数中,我们初始化了 OLED 显示屏,并设置了字体和文本颜色。在 loop() 函数中 ### 回答2: Arduino OLED显示数字时钟是一种在Arduino开发板上使用OLED显示屏来显示时间的方法。OLED显示屏是一种高亮度、低功耗和高对比度的显示屏,非常适合用于显示时钟。要实现这个功能,我们需要连接一个OLED显示屏到Arduino开发板上,并编写一段代码来控制显示屏。 首先,我们需要连接OLED显示屏到Arduino开发板。一般来说,OLED显示屏有四个引脚:电源引脚VCC和GND,以及数据引脚SDA和时钟引脚SCL。我们需要将这些引脚连接到Arduino开发板上相应的引脚。 然后,我们需要编写一段代码来控制OLED显示屏。首先,我们需要使用一个库来和OLED显示屏进行通信。有很多不同的库可供选择,例如Adafruit SSD1306库。我们需要通过包含这个库来访问其函数和方法。 在代码中,我们需要初始化OLED显示屏,并设置其参数,例如屏幕大小和亮度。然后,我们可以使用显示函数来显示时间。Arduino开发板有一个内部时钟,我们可以使用它来获取当前时间,并将其格式化为适合在OLED显示屏上显示的形式。格式化后的时间可以使用写入函数来在OLED显示屏上显示。 最后,我们需要将代码上传到Arduino开发板上,并确保电路连接正确。一旦上传成功,OLED显示屏就会开始显示数字时钟。我们可以在显示屏上看到实时的时间,并且这个数字时钟将持续运行,直到我们断开电源或停止代码运行。 通过这种方式,我们可以很容易地使用ArduinoOLED显示屏来创建一个简单而实用的数字时钟。这个项目还可以扩展,例如添加日期显示、闹钟设置等功能。 ### 回答3: Arduino是一种具有开源硬件和软件的微控制器平台,它被广泛用于制作各种电子项目。OLED(有机发光二极管)是一种先进的显示技术,具有高亮度、高对比度和低功耗的优点。在Arduino上使用OLED显示数字时钟可以实现一个简单而实用的电子时钟。 首先,我们需要连接ArduinoOLED显示屏。Arduino Uno板上有I2C总线,它可以用于连接OLED显示屏。我们将OLED的SDA引脚连接到A4引脚上,将OLED的SCL引脚连接到A5引脚上。 接下来,我们需要编写Arduino代码来控制OLED显示屏。使用U8g2库可以简化操作。首先,我们需要包含U8g2库的头文件并定义OLED对象。然后,在setup函数中初始化OLED对象,并设置OLED显示屏的字体和显示模式。在loop函数中,我们可以使用U8g2库提供的函数来显示当前的时间。 要显示一个数字时钟,我们可以通过使用Arduino中的时钟函数来获取当前的小时、分钟和秒钟。然后,我们可以调用U8g2库的显示函数,将时间显示在OLED屏幕上。 在代码中添加一些控制逻辑,比如按下一个按钮切换显示格式或者调整时间,可以让我们的数字时钟更加灵活和实用。 总的来说,通过使用ArduinoOLED显示屏,我们可以很容易地制作一个数字时钟。这个数字时钟不仅可以显示时间,还可以通过添加一些控制逻辑来增加更多实用的功能。这是一个简单而有趣的电子项目,适合初学者和爱好者尝试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值