Temperaturanzeige SH1106

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
    }
  }


//

Geht das bitte etwas genauer ?
Was läuft an deinem Sketch nicht ?
Oder auch, wo funktioniert es noch.

Wenn du Kommentare in deinem Sketch einfügst, wissen wir auch, was da wo passieren soll. Und dir macht es di Fehlersuche leichter.

Im Prinzip funktioniert es gar nicht mehr, der Ursprüngliche Code, welcher Problemlos lief , was für einen großen LCD Bildschirm gedacht. Da habe ich jetzt so gut, wie es geht auf den Oled angepasst, und seit dem funktioniert es gar nicht mehr...

Dann solltest du grundsätzlich nochmal neu anfangen und die Anzeige entsprechend dem Beispiel in der Library aufbauen. Wenn die Anzeige auf dem Display funktioniert, kannst du den Sensor wie im gezeigten Sketch hinzubauen.
Und vergiss die Kommentare nicht, das macht es allen einfacher.

Da gibt es keinen Inhalt, der auf das Display geschrieben wird.

Serial.print schreibt auf den seriellen Monitor der Arduino-IDE.

Ah, ups danke :sweat_smile:

Den großteil des Codes habe ich von dem mit dem LCD Bildschrim 1:1 übernommen, nur das LCD gegen den Oled getauscht. aber von dem Oled habe ich keine Ahnung, wie der funktioniert, bzw gibts es auch im Internet keine Anleitungen dazu, nur mit Oled Bildschirmen von anderen Typen, diese Codes habe ich auch nach Abänderungen ausprobiert, aber auch das hat nicht funktioniert...

Das verstehe ich jetzt nicht. Du hast doch den Treiber für das SH1106 installiert und da sind doch die entsprechenden Beispiele mit auf deinem Rechner. Wenn nicht, hast du bei der Installation was falsch gemacht.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.