#include <Wire.h>
#include <RTClib.h>
#include <TM1637Display.h>
RTC_DS1307 rtc;
TM1637Display display(9, 8); // تعیین پایههای دیتا و کلاک نمایشگر TM1637
const int hourSetPin = 4; // پایه کلید تنظیم ساعت
const int minuteSetPin = 5; // پایه کلید تنظیم دقیقه
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(hourSetPin, INPUT_PULLUP);
pinMode(minuteSetPin, INPUT_PULLUP);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
display.setBrightness(0x0a); // تنظیم روشنایی نمایشگر
}
void loop() {
DateTime now = rtc.now();
int hour = now.hour();
int minute = now.minute();
bool pm = false;
if (hour >= 12) {
pm = true;
if (hour > 12) {
hour -= 12;
}
}
if (hour == 0) {
hour = 12;
}
// نمایش زمان روی نمایشگر
int displayHour = hour * 100 + minute;
if (pm) {
displayHour += 10000;
}
int displayData = (displayHour / 100) * 100 + displayHour % 10;
display.showNumberDec(displayData, false);
// تنظیم ساعت با استفاده از کلید تنظیم ساعت
if (digitalRead(hourSetPin) == LOW) {
delay(200); // انتظار برای جلوگیری از ورودیهای متعدد
hour++;
if (hour > 12) {
hour = 1;
}
rtc.adjust(DateTime(now.year(), now.month(), now.day(), hour, minute, 0));
}
// تنظیم دقیقه با استفاده از کلید تنظیم دقیقه
if (digitalRead(minuteSetPin) == LOW) {
delay(200); // انتظار برای جلوگیری از ورودیهای متعدد
minute++;
if (minute >= 60) {
minute = 0;
}
rtc.adjust(DateTime(now.year(), now.month(), now.day(), hour, minute, 0));
}
delay(1000);
}