#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <Servo.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define TFT_CS A1
#define TFT_RST A2
#define TFT_DC A3
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
Servo servoMotor;
// Pin Definities
int ledPins[3] = {3, 4, 5}; // LED pins
int rgbPins[3] = {6, 7, 8}; // RGB LED pins (Blauw, Groen, Rood)
int buttonPins[4] = {9, 10, A5, A4}; // Button pins (A, B, C, D)
int photoResistorPin = A0; // Fotoweerstand pin
void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++) {
pinMode(ledPins[i], OUTPUT);
pinMode(rgbPins[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
pinMode(photoResistorPin, INPUT);
dht.begin();
tft.begin();
tft.fillScreen(ILI9341_BLACK);
servoMotor.attach(12);
}
void loop() {
static int lastFanState = -1;
int lightLevel = analogRead(photoResistorPin);
float temp = dht.readTemperature();
adjustLights(lightLevel);
int fanState = adjustFan(temp);
if (fanState != lastFanState) {
lastFanState = fanState;
updateFanDisplay(fanState);
}
checkButtons();
updateDisplay(temp, lightLevel);
delay(1000);
}
void adjustLights(int level) {
int brightness = map(level, 0, 1023, 255, 0);
for (int i = 0; i < 3; i++) {
analogWrite(ledPins[i], brightness);
}
}
int adjustFan(float temp) {
int fanState = 0; // 0: Off, 1: Green, 2: Blue, 3: Red
if (temp < 20) {
digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); // Alles uit
} else if (temp >= 20 && temp < 25) {
digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(8, LOW); // Groen
fanState = 1;
} else if (temp >= 25 && temp < 30) {
digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW); // Blauw
fanState = 2;
} else if (temp >= 30) {
digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, HIGH); // Rood
fanState = 3;
}
return fanState;
}
void checkButtons() {
if (digitalRead(9) == LOW) {
static bool lightsOn = false;
lightsOn = !lightsOn;
for (int i = 0; i < 3; i++) {
digitalWrite(ledPins[i], lightsOn ? HIGH : LOW);
}
}
if (digitalRead(10) == LOW) {
static int fanSpeed = 0;
fanSpeed = (fanSpeed + 1) % 4;
adjustFanByButton(fanSpeed);
}
if (digitalRead(A5) == LOW) {
static bool curtainOpen = false;
curtainOpen = !curtainOpen;
servoMotor.write(curtainOpen ? 180 : 0);
}
if (digitalRead(A4) == LOW) {
emergencyMode();
}
}
void adjustFanByButton(int speed) {
switch(speed) {
case 0:
digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW);
break;
case 1:
digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(8, LOW);
break;
case 2:
digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW);
break;
case 3:
digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, HIGH);
break;
}
}
void emergencyMode() {
for (int i = 0; i < 3; i++) {
digitalWrite(ledPins[i], HIGH);
}
digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, HIGH); // Rood voor alarm
servoMotor.write(180);
tft.setTextColor(ILI9341_RED);
tft.setTextSize(2);
tft.setCursor(0, 0);
tft.println("EMERGENCY MODE");
}
void updateDisplay(float temp, int lightLevel) {
tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
tft.setTextSize(2);
tft.setCursor(0, 0);
tft.print("Temp: ");
tft.print(temp);
tft.println(" C");
tft.print("Light: ");
tft.print(lightLevel);
tft.println();
}
void updateFanDisplay(int state) {
const char* colors[4] = {"Off", "Green", "Blue", "Red"};
tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
tft.setTextSize(2);
tft.setCursor(0, 20);
tft.print("Fan: ");
tft.println(colors[state]);
}