带闹钟功能的可调时钟,显示温度,使用lcd1602代码
时间: 2024-03-19 22:44:35 浏览: 13
以下是一个使用LCD1602液晶屏、DS3231实时时钟模块和温度传感器的Arduino代码,实现带闹钟功能、可调时钟和温度显示的设备。代码注释中有详细的说明,希望能够帮到你!
```
#include <Wire.h> //引用Wire库,用于I2C通讯
#include <LiquidCrystal.h> //引用LiquidCrystal库,用于控制LCD1602液晶屏
#include <DS3231.h> //引用DS3231库,用于读取实时时钟模块
#include <OneWire.h> //引用OneWire库,用于读取温度传感器
#include <DallasTemperature.h> //引用DallasTemperature库,用于读取温度传感器
//定义液晶屏引脚
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//定义DS3231实时时钟模块引脚
DS3231 rtc(SDA, SCL);
//定义温度传感器引脚
#define ONE_WIRE_BUS 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//定义闹钟时间
int alarmHour = 8;
int alarmMinute = 0;
//设置闹钟标志
bool alarmSet = false;
void setup() {
//初始化液晶屏
lcd.begin(16, 2);
//初始化DS3231实时时钟模块
rtc.begin();
//初始化温度传感器
sensors.begin();
}
void loop() {
//获取当前时间
DateTime now = rtc.now();
//获取当前温度
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
//显示时间和温度
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
if (now.minute() < 10) {
lcd.print("0");
}
lcd.print(now.minute(), DEC);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
//检查是否到达闹钟时间
if (now.hour() == alarmHour && now.minute() == alarmMinute && !alarmSet) {
//闹钟时间到,显示闹钟提示
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm!");
lcd.setCursor(0, 1);
lcd.print("Press reset");
alarmSet = true; //设置闹钟标志
}
//检查是否按下重置按钮
if (digitalRead(7) == LOW && alarmSet) {
//重置闹钟
lcd.clear();
alarmSet = false;
}
//检查是否按下设置按钮
if (digitalRead(8) == LOW) {
//进入设置模式
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Set Time");
lcd.setCursor(0, 1);
lcd.print("H:");
lcd.print(now.hour(), DEC);
lcd.print(" M:");
lcd.print(now.minute(), DEC);
while (digitalRead(8) == HIGH) {
//等待设置完成
if (digitalRead(9) == LOW) {
//按下确认按钮,保存设置
rtc.adjust(DateTime(0, 0, 0, lcd.read(7), lcd.read(8), 0));
lcd.clear();
break;
}
//调整时间
if (digitalRead(10) == LOW) {
//按下小时调整按钮
lcd.setCursor(2, 1);
lcd.print(" ");
lcd.setCursor(2, 1);
lcd.print(lcd.read(7));
}
if (digitalRead(11) == LOW) {
//按下分钟调整按钮
lcd.setCursor(5, 1);
lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(lcd.read(8));
}
}
}
}
```
请注意,这只是一个简单的示例代码,需要根据具体硬件和需求进行修改和优化。另外,还需要添加按键和旋钮的电路连接和代码处理。