Skip to content

xw-Soleil/DigitalClock_Arduinio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

多功能 Arduino RTC 时钟 (LCD + OLED 双显示)

项目概述

本项目是一个基于 Arduino 的多功能数字和模拟(OLED部分可选模拟表盘)时钟,具有时间、日期、星期、温度显示、闹钟、整点报时、秒表和倒计时功能。它使用 DS1302 RTC 模块保持时间准确性,并通过 LCD1602 和一个可选的 OLED SSD1306/SH1106 显示屏同时显示信息。用户通过三个按钮进行交互。

主要功能

_compressed.mp4
  • 双显示: 同时在 LCD1602 和 OLED 屏幕上显示信息。

  • 实时时钟 (RTC): 使用 DS1302 模块精确计时,断电后时间不丢失。

  • 时间显示: 年、月、日、星期、时、分、秒。

  • 温度显示: 显示当前环境温度,使用卡尔曼滤波器平滑读数。

  • 闹钟功能:

    • 可设置时间闹钟 (时、分)。
    • 可设置温度阈值闹钟。
  • 整点报时: 可选功能,在每个整点蜂鸣提示。

  • 秒表功能: 正向计时,支持开始、暂停、继续和重置。

  • 倒计时功能:

    • 可设置倒计时时长 (时、分、秒)。
    • 支持开始、暂停、继续和停止。
    • 倒计时结束时蜂鸣提示。
  • 用户交互: 通过三个按钮(选择/模式、增加、减少)进行操作。

  • 可配置性: 大部分参数(如引脚定义、功能开关、阈值)可通过 Config.h 文件配置。

  • 卡尔曼滤波器: 用于温度传感器读数的平滑处理,参数可通过串口动态配置。

  • 游戏功能: 类似超级马里奥的小游戏

image

硬件要求

  • Arduino UNO (或其他兼容开发板)
  • DS1302 RTC 模块 (带电池)
  • LCD1602 显示屏 (通常带 I2C 背板或直接并口连接)
  • OLED 显示屏 (SSD1306 或 SH1106, I2C接口, 例如 128x64 分辨率)
  • 温度传感器 (例如 LM35, 或根据代码中 readAndUpdateTemperature 函数的转换公式选择合适的传感器)
  • 无源蜂鸣器
  • 3个瞬时按钮 (按键)
  • 若干杜邦线和面包板 (如果未使用 PCB)
  • 上拉/下拉电阻 (如果按钮未设置为 INPUT_PULLUP 或模块未自带)

软件要求与库

  • PlatformIO (最新版本推荐)

  • 必需的库:

    • DS1302.h (例如 Rinky-Dink Electronics 的版本) - 用于 RTC 模块。
    • LiquidCrystal.h - (通常 Arduino IDE 自带) 用于 LCD1602 并口连接。
    • U8g2lib.h by oliver - 用于 OLED 显示屏。

    请通过 Arduino IDE 的“库管理器”安装这些库。

安装与设置

  1. 连接硬件: 根据 Config.h 文件中的引脚定义连接所有模块和组件到 Arduino。
  2. 配置 Config.h:
    • 打开项目中的 Config.h 文件。
    • 仔细检查并修改所有引脚定义 (LCD, RTC, OLED_SCL_PIN, OLED_SDA_PIN, 按钮, 蜂鸣器, 温度传感器) 以匹配您的实际硬件连接。
    • 根据需要调整其他参数,如功能启用/禁用、闹钟默认值、延时等。
  3. 安装库: 确保已通过 Arduino IDE 安装了上述所有必需的库。
  4. 上传代码: 将主 .ino 文件和 Config.h 文件放在同一工程文件夹下,然后通过 Arduino IDE 上传代码到您的 Arduino 板。

引脚连接 (示例 - 请参考 Config.h)

所有引脚连接均在 Config.h 文件中定义。以下为典型示例:

  • LCD1602: LCD_RS_PIN, LCD_EN_PIN, LCD_D4_PIN, LCD_D5_PIN, LCD_D6_PIN, LCD_D7_PIN
  • DS1302 RTC: DS1302_CE_PIN (RST), DS1302_IO_PIN (DAT), DS1302_SCLK_PIN (CLK)
  • OLED (I2C): OLED_SDA_PIN (SDA), OLED_SCL_PIN (SCL) - 确保与代码中软件I2C定义一致
  • 按钮: BUTTON_CHOOSE_PIN, BUTTON_ADD_PIN, BUTTON_MINUS_PIN (建议使用 INPUT_PULLUP 并将另一端接地)
  • 蜂鸣器: BUZZER_TONE_PIN
  • 温度传感器: TEMP_SENSOR_PIN (模拟输入)

使用说明

通过三个按钮(选择/模式、增加、减少)与时钟交互:

  • 正常模式:
    • 短按【选择】: 进入时间设置模式。
    • 长按【增加】: 进入秒表模式。
    • 长按【减少】: 进入倒计时设置模式。
    • 同时按【增加】+【减少】: 进入闹钟设置模式。
  • 设置模式中:
    • 【选择】: 切换要调整的项目 (例如 时 -> 分 -> 秒) 或确认/进入下一步。
    • 【增加】: 增加当前选定项目的值。
    • 【减少】: 减少当前选定项目的值。
    • 同时按【增加】+【减少】: (在某些设置模式下) 强制退出设置而不保存。
    • 设置模式通常有30秒无操作超时,会自动退出。
  • 秒表/倒计时运行模式:
    • 【选择】: 开始 / 暂停 / 继续。
    • 【增加】: (秒表暂停时) 重置秒表。
    • 【减少】: (倒计时运行时) 停止倒计时并返回设置。
    • 倒计时结束或闹钟响起时,按任意键通常可以停止蜂鸣。

OLED 显示特别说明

  • OLED 显示屏提供更丰富的图形化界面,可以与 LCD1602 同时工作。
  • RAM占用: U8g2 库在全缓冲模式下 (代码中默认使用 _F_ 后缀的构造函数) 会占用较多RAM (128x64 OLED 约 1KB)。如果 Arduino UNO 出现不稳定或内存不足的情况,请将 U8g2 构造函数更改为页缓冲模式 (例如,U8G2_SSD1306_128X64_NONAME_1_SW_I2C)。这会显著减少 RAM 占用,但可能需要微调绘图代码。
  • F() 宏: 为了节省 RAM,代码中应广泛使用 F() 宏来处理固定字符串 (例如 lcd.print(F("Hello"))oledPrint(0, 10, F("Status")))。

注意事项与调试

  • 首次使用 DS1302 或更换电池后,RTC 时间可能不准确,需要手动设置一次时间。代码包含一个简单的 RTC 时间有效性检查,如果无效会设置一个默认时间。
  • 如果显示不正常或功能异常,请首先检查 Config.h 中的引脚定义是否与硬件连接完全一致。
  • 使用 Arduino IDE 的串口监视器(如果启用了 __Serial_DEBUG__)可以帮助调试。
  • 确保所有外部模块(RTC, OLED, LCD)供电稳定。

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors