帮我做一个基于Arduino的时钟和闹钟;编程软件:arduino ;设备:DS1302时钟模块、I2C LCD1602显示屏、蜂鸣器、三个按钮、电位器;各设备的接线流程及完整的编程代码
时间: 2024-01-31 12:03:42 浏览: 126
好的,我可以帮你做一个基于Arduino的时钟和闹钟。下面是设备的接线流程和完整的编程代码。
设备接线流程:
1. DS1302时钟模块:
- VCC引脚连接到Arduino的5V引脚
- GND引脚连接到Arduino的GND引脚
- CE引脚连接到Arduino的数字引脚2
- IO引脚连接到Arduino的数字引脚3
- SCLK引脚连接到Arduino的数字引脚4
2. I2C LCD1602显示屏:
- VCC引脚连接到Arduino的5V引脚
- GND引脚连接到Arduino的GND引脚
- SDA引脚连接到Arduino的A4引脚
- SCL引脚连接到Arduino的A5引脚
3. 蜂鸣器:
- 正极连接到Arduino的数字引脚5
- 负极连接到Arduino的GND引脚
4. 三个按钮:
- 一个按钮的一端连接到Arduino的数字引脚6,另一端连接到GND引脚(用于设置小时)
- 另一个按钮的一端连接到Arduino的数字引脚7,另一端连接到GND引脚(用于设置分钟)
- 第三个按钮的一端连接到Arduino的数字引脚8,另一端连接到GND引脚(用于设置闹钟时间)
5. 电位器:
- 电位器的中间引脚(VRx)连接到Arduino的模拟引脚0(A0)
- 电位器的两个边缘引脚连接到Arduino的5V和GND引脚
编程代码:
```cpp
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS1302.h>
#define BUTTON_HOUR_PIN 6
#define BUTTON_MINUTE_PIN 7
#define BUTTON_ALARM_PIN 8
#define BUZZER_PIN 5
#define POTENTIOMETER_PIN A0
LiquidCrystal_I2C lcd(0x27, 16, 2);
DS1302 rtc(2, 3, 4);
void setup() {
lcd.begin(16, 2);
lcd.print("Clock & Alarm");
delay(2000);
lcd.clear();
pinMode(BUTTON_HOUR_PIN, INPUT_PULLUP);
pinMode(BUTTON_MINUTE_PIN, INPUT_PULLUP);
pinMode(BUTTON_ALARM_PIN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
rtc.halt(false);
rtc.writeProtect(false);
rtc.setDOW(WEDNESDAY);
rtc.setTime(12, 0, 0);
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
lcd.setCursor(0, 1);
lcd.print("Alarm: ");
lcd.print(rtc.readAlarm(ALARM_1), DEC);
int potValue = analogRead(POTENTIOMETER_PIN);
int alarmHour = map(potValue, 0, 1023, 0, 23);
int alarmMinute = map(potValue, 0, 1023, 0, 59);
if (digitalRead(BUTTON_HOUR_PIN) == LOW) {
rtc.setHour(alarmHour);
delay(200);
}
if (digitalRead(BUTTON_MINUTE_PIN) == LOW) {
rtc.setMinute(alarmMinute);
delay(200);
}
if (digitalRead(BUTTON_ALARM_PIN) == LOW) {
rtc.setAlarm(ALARM_1, alarmHour, alarmMinute, 0, 0);
delay(200);
}
if (rtc.isAlarm(ALARM_1)) {
tone(BUZZER_PIN, 1000);
delay(1000);
noTone(BUZZER_PIN);
rtc.resetAlarm();
}
delay(1000);
}
```
这段代码使用了DS1302库(DS1302.h)和LiquidCrystal_I2C库(LiquidCrystal_I2C.h)。请确保将这两个库正确安装到Arduino IDE中。
请在Arduino IDE中打开一个新的项目,将上述代码复制并粘贴到新项目中。然后,将代码上传到Arduino板上。
这个时钟和闹钟将会在LCD显示屏上显示当前时间,并且你可以通过按钮设置小时、分钟和闹钟时间。当闹钟时间到达时,蜂鸣器将会响起。
阅读全文