Hallo zusammen,
ich plane ein Projekt zur Temperaturüberwachung von Kühltruhen.
Dazu habe ich einen DS18B20 Temperatur Sensor und ein 1.3` Oled Bildschirm (SH1106).
Im Prinzip soll nur wenn die Temperatur über eine bestimmte Schwelle steigt ein Actor geschalten werden. Und bei einfachen Tastendruck soll der Bildschirm 30 s angehen und dann wieder ausgehen.
Unten habe ich mal meinen bisherigen Code, aber irgendwie läuft der nicht vielleicht kann mir ja jemand damit weiterhelfen.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
const byte DS18B20_DATA = 2;
const byte Relais_PIN = 5;
OneWire oneWire(DS18B20_DATA);
DallasTemperature sensors(&oneWire);
#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
const bool an = LOW;
String tempString;
int Truhe;
int schwellTemp = 23; //Für testezwecke nur bei 23° sonst bei -2
const int hystereseTemp = 1;
int Taster = 3;
int Bildschirm = 4;
int tasterstatus = 0;
void setup()
{
display.begin(SH1106_SWITCHCAPVCC, 0x3D);
sensors.begin();
sensors.setWaitForConversion(false);
sensors.requestTemperatures();
pinMode(Relais_PIN, OUTPUT);
digitalWrite(Relais_PIN, !an);
pinMode(Taster, INPUT);
pinMode(Bildschirm, OUTPUT);
}
void loop()
{
getSensors();
tasterBildschirm();
setActor();
displayInfo();
}
//
void displayInfo() //das müsste der Teil sein, der gar nicht läuft
{
static int lastTruhe = 1000;
static bool lastRelaisState = !digitalRead(Relais_PIN);
if (lastTruhe != Truhe ||
lastRelaisState != digitalRead(Relais_PIN))
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.print(F("Kuehltruhe: "));
display.print(tempString);
display.print("\337C ");
display.print(digitalRead(Relais_PIN) == an ? "AUS" : "EIN");
display.setCursor(0, 3);
display.print(digitalRead(Relais_PIN) == an ? "" : "-------ALARM!-------");
lastTruhe = Truhe;
lastRelaisState = !lastRelaisState;
}
}
//
void tasterBildschirm() //Wenn Taster gedrückt wird, geht Bildschirm 5 sek an
{
tasterstatus=digitalRead(Taster);
if (tasterstatus == HIGH)
{
digitalWrite(Bildschirm, HIGH);
delay (5000);
}
else
{
}
}
//
void getSensors()
{
static uint32_t lastReadTime = 0;
if (millis() - lastReadTime > 1000)
{
Truhe= sensors.getTempCByIndex(0);
sensors.requestTemperatures();
lastReadTime = millis();
}
}
//
void setActor()
{
if (Truhe >= schwellTemp) //Wenn Temp über Schwellentemperatur, dann wird Relais geschalten
{
digitalWrite(Relais_PIN, !an);
}
else
{
digitalWrite(Relais_PIN, an); //sonst aus lassen
}
}
//