Arduino_OLED电子时钟

好久之前入手了一个高精度时钟模块DS3231,之后就一直闲置着。国庆实在是太闲,收拾东西的时候找出来了,就想着做一个电子时钟测试一下这个时钟模块准不准吧。

材料:Arduino Uno, 面包板, DS3231, 12864的OLED屏

原理什么的就不细讲了,很简单的。先初始化DS3231,这个时钟模块断电以后还可以计时,先用串口给一个精确的时间,然后加上OLED,每隔500ms(考虑到程序运行时间不能设置为1000ms,否则不一定每秒都会更新,不过还是会有一丢丢的显示误差)读取一次时间,并输出在OLED上。

DS3231的使用方法可见卖家的资料,在DS3231.c和DS3231.h上有会用到的函数,简单易懂。
OLED的使用方法网上很多的,而且这次只是显示字符而已,请自行查阅。

连线的话(OLED与DS3231接线相同):
5V —— VCC
GND —— GND
A4 —— SDA
A5 —— SCL

另:
本人使用的DS3231和OLED均使用IIC通信,IIC通信是可以串联多个设备的,但一定要保证各个设备的地址是不一样的。地址可以在对应的库文件里面找到,一般是一个名为 xxx_ADDRESS的宏定义。找不到的话可自行百度“Arduino IIC 地址扫描”。

代码如下

#include <DS3231.h>
#include "U8glib.h"

DS3231  rtc(SDA, SCL);
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

void Init(int y,int mmon,int d,int h,int mmin,int s)
{
  rtc.setTime(h,mmin,s);
  rtc.setDate(d,mmon,y);
  rtc.setDOW();
}
void draw()
{
  /*char data[10];
  char week[10];
  char t[8];
  
  data = rtc.getDateStr(FORMAT_LONG,FORMAT_BIGENDIAN,'.');
  week = rtc.getDOWStr(FORMAT_SHORT);
  t = rtc.getTimeStr(FORMAT_LONG);*/

  u8g.setFont(u8g_font_unifont);
  u8g.setFontPosTop();
  
  u8g.setPrintPos(0, 0); 
  u8g.print(rtc.getDateStr(FORMAT_LONG,FORMAT_BIGENDIAN,'.') );

  u8g.setPrintPos(100, 0); 
  u8g.print(rtc.getDOWStr(FORMAT_SHORT) );

  u8g.setPrintPos(35, 40); 
  u8g.print(rtc.getTimeStr(FORMAT_LONG) );
}
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  rtc.begin();
 // Init(2019,10,6,20,1,50);
  
}
void loop() {
  
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  delay(500);
}

最终运行效果如图:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 6
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答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显示屏,我们可以很容易地制作一个数字时钟。这个数字时钟不仅可以显示时间,还可以通过添加一些控制逻辑来增加更多实用的功能。这是一个简单而有趣的电子项目,适合初学者和爱好者尝试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值