פוטנציומטר ימני - ווליום + באפס מכבה
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
// ====== LCD & RTC ======
LiquidCrystal_I2C lcd(0x3F, 16, 2); // אם הכתובת שלך 0x27, שנה כאן
RTC_DS3231 rtc;
// קיצור לשמות ימים (3 אותיות כדי להיכנס לשורה השנייה)
const char* DOW[7] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
void setup() {
Serial.begin(115200);
Wire.begin();
// LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("RTC + LCD Ready");
delay(800);
// RTC
if (!rtc.begin()) {
lcd.clear();
lcd.print("RTC not found");
Serial.println("Couldn't find RTC");
while (true) delay(10);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, setting compile time");
// הגדרת זמן לפי זמן הקומפילציה
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
lcd.clear();
}
void loop() {
static int lastSecond = -1;
DateTime now = rtc.now();
if (now.second() != lastSecond) { // עדכון תצוגה פעם בשנייה
lastSecond = now.second();
// שורה ראשונה: HH:MM:SS
lcd.setCursor(0, 0);
printTwoDigits(now.hour()); lcd.print(':');
printTwoDigits(now.minute());lcd.print(':');
printTwoDigits(now.second());
// ניקוי שארית אם היה טקסט ארוך קודם
lcd.print(" "); // מרווחי ביטחון
// שורה שנייה: DD/MM/YY + יום בשבוע + טמפ' (אם נכנס)
lcd.setCursor(0, 1);
printTwoDigits(now.day()); lcd.print('/');
printTwoDigits(now.month()); lcd.print('/');
lcd.print(now.year() % 100); lcd.print(' ');
lcd.print(DOW[now.dayOfTheWeek()]);
// אם נשאר מקום, נציג גם טמפרטורת ה־RTC (לרוב נכנס ב־16 תווים)
// דוגמה: "16/08/25 Sun 28C"
float t = rtc.getTemperature();
lcd.print(' ');
lcd.print((int)round(t));
lcd.print('C');
// לצורך דיבוג בסריאל
Serial.print("Time: ");
Serial.print(now.timestamp(DateTime::TIMESTAMP_TIME));
Serial.print(" Date: ");
Serial.print(now.timestamp(DateTime::TIMESTAMP_DATE));
Serial.print(" DOW: ");
Serial.print(DOW[now.dayOfTheWeek()]);
Serial.print(" Temp: ");
Serial.print(t);
Serial.println(" C");
}
delay(50); // לולאה קלה; העדכון נשלט לפי השנייה
}
// ====== Utilities ======
void printTwoDigits(uint8_t v) {
if (v < 10) lcd.print('0');
lcd.print(v);
}