This is an old revision of the document!
Student: Eduard Popa-Costin
Grupa: 332CC
#include <dht11.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
#define BUTTON_INCREMENT 2 #define BUTTON_DECREMENT 3 #define BUTTON_MODE 4 #define DHT11PIN_OUTSIDE 7 #define DHT11PIN_INSIDE 6
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
dht11 DHT11;
int INA_OUTSIDE = 9; int INB_OUTSIDE = 10; int incrementButtonState = HIGH; int decrementButtonState = HIGH; int lastIncrementButtonState = HIGH; int lastDecrementButtonState = HIGH; unsigned long lastDebounceTime = 0; unsigned long debounceDelay = 50;
unsigned long previousTemperatureTime = 0; long referenceTemperature = 25.00; const unsigned long temperatureInterval = 2000;
bool buttonModeState = false; bool buttonModePressed = false;
bool fanOn = false; bool mode = false;
void setup() {
pinMode(BUTTON_INCREMENT, INPUT); pinMode(BUTTON_DECREMENT, INPUT); pinMode(BUTTON_MODE, INPUT_PULLUP); pinMode(INA_OUTSIDE, OUTPUT); pinMode(INB_OUTSIDE, OUTPUT); digitalWrite(INA_OUTSIDE, LOW); digitalWrite(INB_OUTSIDE, LOW); Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for(;;); } delay(2000); display.clearDisplay();
display.setTextSize(1); display.setTextColor(WHITE);
}
void loop() {
unsigned long currentMillis = millis(); if (digitalRead(BUTTON_MODE) == LOW) { if (!buttonModePressed) { buttonModePressed = true; buttonModeState = !buttonModeState; } } else { buttonModePressed = false; }
if (!buttonModeState) { display.clearDisplay(); display.setCursor(0, 10); display.println("Mode: Manual"); display.setCursor(0, 25); display.print("Temp (C): "); display.println((float)DHT11.temperature, 2); display.setCursor(0, 40); display.print("Temp limit (C): "); display.println(referenceTemperature); display.setCursor(0, 52); display.print("Fan: "); if (fanOn) { display.println("ON"); } else { display.println("OFF"); } display.display();
int reading_increment = digitalRead(BUTTON_INCREMENT); int reading_decrement = digitalRead(BUTTON_DECREMENT);
if (reading_increment != lastIncrementButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { if (reading_increment != incrementButtonState) { incrementButtonState = reading_increment;
if (incrementButtonState == LOW) { referenceTemperature++; } } }
lastIncrementButtonState = reading_increment;
if (reading_decrement != lastDecrementButtonState) { lastDebounceTime = millis(); }
if ((millis() - lastDebounceTime) > debounceDelay) { if (reading_decrement != decrementButtonState) { decrementButtonState = reading_decrement; if (decrementButtonState == LOW) { referenceTemperature--; } } }
lastDecrementButtonState = reading_decrement;
if (currentMillis - previousTemperatureTime >= temperatureInterval) { previousTemperatureTime = currentMillis; DHT11.read(DHT11PIN_OUTSIDE); if ((float)DHT11.temperature > referenceTemperature) { if (!fanOn) { digitalWrite(INA_OUTSIDE, LOW); digitalWrite(INB_OUTSIDE, HIGH); fanOn = true; } } else { if (fanOn) { digitalWrite(INA_OUTSIDE, LOW); digitalWrite(INB_OUTSIDE, LOW); fanOn = false; } } } display.display();
} else { display.clearDisplay(); display.setCursor(0, 10); display.println("Mode: Auto");
if (currentMillis - previousTemperatureTime >= temperatureInterval) { previousTemperatureTime = currentMillis;
DHT11.read(DHT11PIN_OUTSIDE); float temperature_outside = DHT11.temperature; DHT11.read(DHT11PIN_INSIDE); float temperature_inside = DHT11.temperature; display.setCursor(0, 25);
display.print("Temp outside(C) "); display.println(temperature_outside, 2);
display.setCursor(0, 40); display.print("Temp inside(C) "); display.println(temperature_inside, 2);
if (temperature_inside <= temperature_outside) { if (!fanOn) { digitalWrite(INA_OUTSIDE, LOW); digitalWrite(INB_OUTSIDE, HIGH); fanOn = true; display.setCursor(0, 52); display.println("Fan: ON"); display.display(); } } else { if (fanOn) { digitalWrite(INA_OUTSIDE, LOW); digitalWrite(INB_OUTSIDE, LOW); fanOn = false; display.setCursor(0, 52); display.println("Fan: OFF"); display.display(); } } }
}
}