#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS3231 rtc;
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define LIGHT_SENSOR A0
#define HEADLIGHT_RED 9
#define HEADLIGHT_GREEN 10
#define HEADLIGHT_BLUE 11
#define TEMP_UP 3
#define TEMP_DOWN 4
float currentTemperature = 0;
float desiredTemperature = 22.0;
int lightLevel = 0;
bool headlightsOn = false;
void setup() {
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
lcd.print("RTC not found!");
while (1);
}
dht.begin();
pinMode(HEADLIGHT_RED, OUTPUT);
pinMode(HEADLIGHT_GREEN, OUTPUT);
pinMode(HEADLIGHT_BLUE, OUTPUT);
pinMode(TEMP_UP, INPUT_PULLUP);
pinMode(TEMP_DOWN, INPUT_PULLUP);
lcd.clear();
lcd.print("Car Computer Ready");
delay(2000);
}
void loop() {
DateTime now = rtc.now();
String currentTime = String(now.hour()) + ":" + String(now.minute()) + ":" + String(now.second());
currentTemperature = dht.readTemperature();
lightLevel = analogRead(LIGHT_SENSOR);
headlightsOn = (lightLevel > 200);
if (digitalRead(TEMP_UP) == LOW) {
desiredTemperature += 0.5;
delay(200);
}
if (digitalRead(TEMP_DOWN) == LOW) {
desiredTemperature -= 0.5;
delay(200);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(currentTime);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(currentTemperature);
lcd.print("C");
lcd.setCursor(0, 2);
lcd.print("Desired: ");
lcd.print(desiredTemperature);
lcd.print("C");
lcd.setCursor(0, 3);
lcd.print("Lights: ");
lcd.print(headlightsOn ? "ON" : "OFF");
if (headlightsOn) {
digitalWrite(HEADLIGHT_RED, HIGH);
digitalWrite(HEADLIGHT_GREEN, HIGH);
digitalWrite(HEADLIGHT_BLUE, LOW);
} else {
digitalWrite(HEADLIGHT_RED, LOW);
digitalWrite(HEADLIGHT_GREEN, LOW);
digitalWrite(HEADLIGHT_BLUE, LOW);
}
delay(500);
}