#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
// Pin Definitions
const int Thermostat_pin = A0; // Pin for the NTC temperature sensor output
// RTC Object
RTC_DS1307 rtc;
// LCD Object
LiquidCrystal_I2C lcd(0x27, 20, 4); // Change address if needed
// Menu items
String MenuItems[] = {
"Main Menu",
"Submenu 1",
"Submenu 2",
"Submenu 3",
"Submenu 4",
"Submenu 5",
"Submenu 6"
};
// Current menu state
int currentMenuItem = 0;
void setup() {
Serial.begin(9600); // Initialize serial communication for output
// Initialize RTC
if (!rtc.begin()) {
Serial.println("RTC not found!"); // Inform if RTC is not found
while (1); // Halt if RTC is not found
}
// Initialize LCD
lcd.begin(20, 4);
lcd.backlight(); // Turn on the backlight
lcd.clear();
// Animation: Scrolling Text
String welcomeMessage = " Welcome!................"; // Add spaces for smoother scrolling
int messageLength = welcomeMessage.length();
int displayWidth = 20; // Width of the display
int scrollLength = messageLength + displayWidth; // Total length to scroll
// Scroll the message across the LCD
for (int pos = 0; pos < scrollLength; pos++) {
lcd.setCursor(0, 1); // Set cursor position on the second row
// Print the substring of the welcomeMessage
lcd.print(welcomeMessage.substring(pos, pos + displayWidth));
delay(50); // Adjust delay for speed of scrolling
}
delay(1000); // Pause before proceeding
}
void loop() {
// Read and display the temperature
int Thermostat = analogRead(Thermostat_pin); // Read the NTC sensor value
float temperature = calculateTemperature(Thermostat); // Calculate temperature
// Get current time from RTC
DateTime currentTime = rtc.now();
// Output the temperature and time
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
// Print date (DD/MM/YYYY)
Serial.print(currentTime.day());
Serial.print("/");
Serial.print(currentTime.month());
Serial.print("/");
Serial.print(currentTime.year());
Serial.print(" - ");
// Print time (HH:MM:SS)
Serial.print(currentTime.hour());
Serial.print(":");
Serial.print(currentTime.minute());
Serial.print(":");
Serial.println(currentTime.second());
// Update LCD with current menu item
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(MenuItems[currentMenuItem]);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 2);
lcd.print("Date: ");
lcd.print(currentTime.day());
lcd.print("/");
lcd.print(currentTime.month());
lcd.print("/");
lcd.print(currentTime.year());
lcd.setCursor(0, 3);
lcd.print("Time: ");
lcd.print(currentTime.hour());
lcd.print(":");
lcd.print(currentTime.minute());
lcd.print(":");
lcd.print(currentTime.second());
delay(1000); // Delay for 1 second before the next read
}
// Thermostat to temperature
float calculateTemperature(int sensorValue) {
float resistance = (1023.0 / sensorValue) - 1.0; // Calculate resistance
resistance = 10000.0 / resistance; // Convert to temperature
return (1.0 / (log(resistance / 10000.0) / 3950 + (1.0 / 298.15))) - 273.15; // Return Celsius
}