#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define ONE_WIRE_BUS 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature oneWireSensors(&oneWire);
byte Devices = 0;
byte Address[1];
float ActualTemp;
const int maxTemp = 30;
float SetTemp = 30;
const int statusPin = 3;
float interval = 0.5;
const int relaisPin = 9;
unsigned long temp_timestore;
float Hysterese = 0.5;
const byte INPUTPIN = A0;
void setup() {
Serial.begin(115200);
oneWireSensors.begin();
while (oneWire.search(Address)) {
Devices++;
for (byte i = 0; i < 40; i++);
}
pinMode(relaisPin, OUTPUT);
pinMode(statusPin, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
display.display();
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(6, 5);
display.setTextSize(1);
display.print(String("Temperature control"));
display.setCursor(15, 25);
display.setTextSize(1);
display.print(String("SetTemp: " + String(SetTemp, 1) + "\xF7" + "C"));
display.setCursor(22, 40);
if ((millis() / 500) % 2 == 20) {
display.print(String("Initializing"));
} else {
display.print(String("Initializing"));
}
display.display();
delay(5000);
display.clearDisplay();
}
void loop() {
if (millis() - temp_timestore > 3000 ) {
oneWireSensors.requestTemperatures();
ActualTemp = oneWireSensors.getTempCByIndex(0);
display.setCursor(6, 5);
display.setTextSize(1);
display.print(String("Temperature control"));
display.setCursor(16, 20);
display.setTextSize(1);
display.print(String("SetTemp:" + String(SetTemp, 1) + "\xF7" + "C"));
display.setCursor(16, 30);
display.setTextSize(1);
display.print(String("ActualTemp:" + String(ActualTemp, 1) + "\xF7" + "C"));
display.display();
if (SetTemp >= ActualTemp + Hysterese) {
digitalWrite(relaisPin, LOW);
digitalWrite(statusPin, LOW);
display.setCursor(35, 50);
display.setTextSize(1);
display.print(String("Heating"));
display.display();
display.clearDisplay();
digitalWrite(statusPin, HIGH);
digitalWrite(relaisPin, HIGH);
}
if (SetTemp < ActualTemp - Hysterese) {
digitalWrite(relaisPin, HIGH);
digitalWrite(statusPin, HIGH);
display.setCursor(10, 50);
display.setTextSize(1);
display.print(String("Temperature reached"));
display.display();
display.clearDisplay();
digitalWrite(relaisPin, LOW);
digitalWrite(statusPin, LOW);
}
temp_timestore = millis();
}
}