Heizungssteuerung/ Raumtemperaturregelung

Achso, das meintest du.

GitHub - milesburton/Arduino-Temperature-Control-Library: Arduino Temperature Library 3.9.0
GitHub - johnrickman/LiquidCrystal_I2C: LiquidCrystal Arduino library for the DFRobot I2C LCD displays 1.1.2
OneWire Arduino Library, connecting 1-wire devices (DS18S20, etc) to Teensy 2.3.7
das wären die Bibliotheken.

Hallo Leute, Irgendwie bekomme ich das immernoch nicht zum laufen. Meist läuft die Solltemperatur abwärts, bzw aufwärts und ich wiß nicht warum. zum teil funktioniert es in der Simulation, aber in echt leider nicht.
ezgif-4-e5fe9e85ad
Beispielcode:

/*Temperatursteuerung von Stellantriebe fuer Heizungen mit stromlos geschlossenen 24V Antriebe
   Version 1.0 vom 9.10.2022
 
  // https://forum.arduino.cc/t/heizungssteuerung-raumtemperaturregelung/1041610/3
  // to be deleted 2022-12
*/

#include <OneWire.h>
#include <DallasTemperature.h>


#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

constexpr byte DS18B20_DATA_WZ {2};   //Wohnzimmer
constexpr byte DS18B20_DATA_B {5};    // BAD
constexpr byte DS18B20_DATA_SZ {8};   //Schlafzimmer
constexpr byte DS18B20_DATA_AZ {11};  //Arbeitszimmer

class Room
{
  protected:
    const byte pinPlus;               // increase target temperature, button LOW active, connects to GND
    const byte pinMinus;
    const byte pinRelay;              // relay LOW active
    const byte lcdRow;                // a LCD row for this room
    const char *text ;                // text to identify that room
    float target = 18.0;              // soll temperatur
    float temp = 20.0;                  // last measured temperature
    uint32_t previousMillis = -10000; // time management for the temperature sensor
    DallasTemperature *sensor;

  public:
    Room (const byte pinPlus, const byte pinMinus, const byte pinRelay, const byte lcdRow, const char *text, DallasTemperature &sensor) :
      pinPlus{pinPlus}, pinMinus{pinMinus}, pinRelay{pinRelay}, lcdRow{lcdRow}, text{text}, sensor{&sensor} {}

    void begin()       // call in setup
    {
      digitalWrite(pinRelay, HIGH);
      pinMode(pinRelay, OUTPUT);
      pinMode(pinPlus, INPUT_PULLUP);
      pinMode(pinMinus, INPUT_PULLUP);
    }

    void handleLCD()  // output to a LCD
    {
      lcd.setCursor(0, lcdRow);
      lcd.print(text);
      lcd.print(" S:");
      lcd.print(target, 1);
      lcd.print(" I:");
      lcd.print(temp, 1);
      lcd.print("C ");
      if (digitalRead(pinRelay) == LOW) // indicator for relay on or off
        lcd.print('+'); 
      else 
        lcd.print('o');
    }

    void handleRelay() // switch relays by temperature
    {
      if (digitalRead(pinRelay) == LOW)  // relay is on
      {
        if (target <= temp)
        {
          Serial.print(text); 
          Serial.print(F(" target lower - OFF for relay pin "));
          Serial.println(pinRelay);
          digitalWrite(pinRelay, HIGH);
          handleLCD();
        }
      }
      else
      {
        if (target > temp)
        {
          Serial.print(text);
          Serial.print(F(" target higher - ON for relay pin "));
          Serial.println(pinRelay) ;
          digitalWrite(pinRelay, LOW);
          handleLCD();
        }
      }
    }

    void handleButton()  // read buttons, modify target value
    {
      const float step = 0.1;
      if (digitalRead(pinPlus) == LOW)
      {
        target += step;
        handleLCD();
        delay(200); // dirty delay
      }
      if (digitalRead(pinMinus) == LOW)
      {
        target -= step;
        handleLCD();
        delay(200); // dirty delay
      }
    }

    void handleSensor()  // read temperature sensor
    {
      if (millis() - previousMillis > 10000)
      {
        previousMillis = millis();
        temp = sensor->getTempCByIndex(0);
        handleLCD();
      }
    }

    void update()  // the "run" function for the loop
    {
      handleButton();
      handleSensor();
      handleRelay();
    }
};

OneWire oneWire(DS18B20_DATA_WZ);
DallasTemperature sensors(&oneWire);
OneWire oneWire_B(DS18B20_DATA_B);
DallasTemperature sensors_B(&oneWire_B);
OneWire oneWire_SZ(DS18B20_DATA_SZ);
DallasTemperature sensors_SZ(&oneWire_SZ);
OneWire oneWire_AZ(DS18B20_DATA_AZ);
DallasTemperature sensors_AZ(&oneWire_AZ);

Room room[] {
  {3, 4, A0, 0, "WZ", sensors},
  {6, 7, A1, 1, "Ba", sensors_B},
  {9, 10, A2, 2, "SZ", sensors_SZ},
  {12, 13, A3, 3, "AZ", sensors_AZ}
};

void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
  for (auto &i : room) {
    i.begin();
    i.handleLCD();  // update once
  }
  sensors.begin();
  sensors_B.begin();
  sensors_SZ.begin();
  sensors_AZ.begin();
}

void loop() {
  for (auto &i : room) i.update(); // call each object
}


Keine Lösung zu Deinem Problem, aber Du quälst den LCD ziemlich oft. Baue in Room eine Variable bool needLCDrefresh; ein, setze die am Anfang von update() auf false und überall in den handle...() ersetzt du handleLCD() durch needsLCDrefresh = true;. Am Ende von update() machst du dann ein if (needsLCDrefresh) handleLCD();.

Die mehrfachen delay(200); sind nicht schön - schaue dich mal nach Debouncing-Libs für Taster um...

Tut mir leid, aber ich verstehe gerade überhaubt nichts.
In der Simulation bekomme ich nur fehler. Irgendwie weiß ich nicht, wo ich was hin setzen soll.

Wir können uns aber gerne auch ein anderes Programm anschauen. Problem hier das Selbe. letze Zeile zählt die Temperatur wieder ab:

/*Temperatursteuerung von Stellantriebe fuer Heizungen mit stromlos geschlossenen 24V Antriebe
   Version 1.0 vom 9.10.2022
 
  // https://forum.arduino.cc/t/heizungssteuerung-raumtemperaturregelung/1041610/3
  // to be deleted 2022-12
*/

#include <OneWire.h>
#include <DallasTemperature.h>


#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

//================================Wohnzimmer==Ein-/Ausg�nge================================================

const byte DS18B20_DATA_WZ = 2;
const byte Knopf_Plus_PIN_WZ = 3;
const byte Knopf_Minus_PIN_WZ = 4;
const byte Relais_PIN_WZ = A0;
const float start_WZ = 18.0;

//=======================================Bad==Ein-/Ausg�nge================================================

const byte DS18B20_DATA_B = 5;
const byte Knopf_Plus_PIN_B = 6;
const byte Knopf_Minus_PIN_B = 7;
const byte Relais_PIN_B = A1;
const float start_B = 18.0;

//===============================Schlafzimmer==Ein-/Ausg�nge================================================

const byte DS18B20_DATA_SZ = 8;
const byte Knopf_Plus_PIN_SZ = 9;
const byte Knopf_Minus_PIN_SZ = 10;
const byte Relais_PIN_SZ = A2;
const float start_SZ = 18.0;

//==============================Arbeitszimmer==Ein-/Ausg�nge================================================

const byte DS18B20_DATA_AZ = 11;
const byte Knopf_Plus_PIN_AZ = 12;
const byte Knopf_Minus_PIN_AZ = 13;
const byte Relais_PIN_AZ = A3;
const float start_AZ = 18.0;

//=========================================Code=============================================================

OneWire oneWire_WZ(DS18B20_DATA_WZ);
DallasTemperature sensors(&oneWire_WZ);
float soll_Temp_WZ;
float temp_WZ;
OneWire oneWire_B(DS18B20_DATA_B);
DallasTemperature sensors_B(&oneWire_B);
float soll_Temp_B;
float temp_B;
OneWire oneWire_SZ(DS18B20_DATA_SZ);
DallasTemperature sensors_SZ(&oneWire_SZ);
float soll_Temp_SZ;
float temp_SZ;
OneWire oneWire_AZ(DS18B20_DATA_AZ);
DallasTemperature sensors_AZ(&oneWire_AZ);
float soll_Temp_AZ;
float temp_AZ;


void setup(){
  Serial.begin(115200);
  Serial.println(F("Start..."));
  lcd.init();
  lcd.backlight();
  sensors.begin();
  pinMode(Relais_PIN_WZ, OUTPUT);
  digitalWrite(Relais_PIN_WZ,HIGH);
  pinMode(Knopf_Plus_PIN_WZ,INPUT_PULLUP);
  pinMode(Knopf_Minus_PIN_WZ,INPUT_PULLUP);
  sensors_B.begin();
  pinMode(Relais_PIN_B, OUTPUT);
  digitalWrite(Relais_PIN_B,HIGH);
  pinMode(Knopf_Plus_PIN_B,INPUT_PULLUP);
  pinMode(Knopf_Minus_PIN_B,INPUT_PULLUP);
  sensors_SZ.begin();
  pinMode(Relais_PIN_SZ, OUTPUT);
  digitalWrite(Relais_PIN_SZ,HIGH);
  pinMode(Knopf_Plus_PIN_SZ,INPUT_PULLUP);
  pinMode(Knopf_Minus_PIN_SZ,INPUT_PULLUP);
  sensors_AZ.begin();
  pinMode(Relais_PIN_AZ, OUTPUT);
  digitalWrite(Relais_PIN_AZ,HIGH);
  pinMode(Knopf_Plus_PIN_AZ,INPUT_PULLUP);
  pinMode(Knopf_Minus_PIN_AZ,INPUT_PULLUP);
}

void loop()
{
  wohnzimmerSetup();
  badSetup();
  schlafzimmerSetup();
  arbeitszimmerSetup();
  ausgabeLcd();
}
//==============================================Wohnzimmer===================================================
void wohnzimmerSetup()
{
 if (soll_Temp_WZ == 0)
  {
    soll_Temp_WZ = start_WZ;
  }
  int knopf_lang = 0;
  while (digitalRead(Knopf_Plus_PIN_WZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_WZ = soll_Temp_WZ + 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_WZ = soll_Temp_WZ + 1;
    }
    if (soll_Temp_WZ > 40)
    {
      soll_Temp_WZ = start_WZ;
    }
    lcd.setCursor(10, 0);
    if (soll_Temp_WZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_WZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  knopf_lang = 0;
  while (digitalRead(Knopf_Minus_PIN_WZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_WZ = soll_Temp_WZ - 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_WZ = soll_Temp_WZ - 1;
    }
    if (soll_Temp_WZ < start_WZ)
    {
      soll_Temp_WZ = 40;
    }
    lcd.setCursor(10, 0);
    if (soll_Temp_WZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_WZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  temp_WZ = sensors.getTempCByIndex(0);
  sensors.requestTemperatures();
}
//==============================================Bad==========================================================

 void badSetup()
{
 if (soll_Temp_B == 0)
  {
    soll_Temp_B = start_B;
  }
  int knopf_lang = 0;
  while (digitalRead(Knopf_Plus_PIN_B) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_B = soll_Temp_B + 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_B = soll_Temp_B + 1;
    }
    if (soll_Temp_B > 40)
    {
      soll_Temp_B = start_B;
    }
    lcd.setCursor(10, 1);
    if (soll_Temp_B < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_B, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  knopf_lang = 0;
  while (digitalRead(Knopf_Minus_PIN_B) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_B = soll_Temp_B - 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_B = soll_Temp_B - 1;
    }
    if (soll_Temp_B < start_B)
    {
      soll_Temp_B = 40;
    }
    lcd.setCursor(10, 1);
    if (soll_Temp_B < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_B, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  temp_B = sensors.getTempCByIndex(0);
  sensors.requestTemperatures();
}
//==============================================Schlafzimmer=================================================

void schlafzimmerSetup()
{
 if (soll_Temp_SZ == 0)
  {
    soll_Temp_SZ = start_SZ;
  }
  int knopf_lang = 0;
  while (digitalRead(Knopf_Plus_PIN_SZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_SZ = soll_Temp_SZ + 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_SZ = soll_Temp_SZ + 1;
    }
    if (soll_Temp_SZ > 40)
    {
      soll_Temp_SZ = start_SZ;
    }
    lcd.setCursor(10, 2);
    if (soll_Temp_SZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_SZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  knopf_lang = 0;
  while (digitalRead(Knopf_Minus_PIN_SZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_SZ = soll_Temp_SZ - 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_SZ = soll_Temp_SZ - 1;
    }
    if (soll_Temp_SZ < start_SZ)
    {
      soll_Temp_SZ = 40;
    }
    lcd.setCursor(10, 2);
    if (soll_Temp_SZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_SZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  temp_SZ = sensors.getTempCByIndex(0);
  sensors.requestTemperatures();
}
//==============================================Arbeitszimmer================================================

void arbeitszimmerSetup()
{
 if (soll_Temp_AZ == 0)
  {
    soll_Temp_AZ = start_AZ;
  }
  int knopf_lang = 0;
  while (digitalRead(Knopf_Plus_PIN_AZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_AZ = soll_Temp_AZ + 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_AZ = soll_Temp_AZ + 1;
    }
    if (soll_Temp_AZ > 40)
    {
      soll_Temp_AZ = start_AZ;
    }
    lcd.setCursor(10, 3);
    if (soll_Temp_AZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_AZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  knopf_lang = 0;
  while (digitalRead(Knopf_Minus_PIN_AZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_AZ = soll_Temp_AZ - 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_AZ = soll_Temp_AZ - 1;
    }
    if (soll_Temp_AZ < start_AZ)
    {
      soll_Temp_AZ = 40;
    }
    lcd.setCursor(10, 3);
    if (soll_Temp_AZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_AZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  temp_AZ = sensors.getTempCByIndex(0);
  sensors.requestTemperatures();
}
//==============================================AusgabeLCD================================================
void ausgabeLcd() {
  //Wohnzimmer
  lcd.setCursor(0, 0);
  lcd.print("Ist:");
  if (temp_WZ < 10)
  { lcd.print(' '); }
  lcd.print(temp_WZ, 1);
  lcd.print("C");
  lcd.setCursor(10, 0);
  lcd.print("Soll:");
  if (soll_Temp_WZ < 10)
  { lcd.print(' '); }
  lcd.print(soll_Temp_WZ, 1);
  lcd.print("C");
  //Bad
  lcd.setCursor(0, 1);
  lcd.print("Ist:");
  if (temp_B < 10)
  { lcd.print(' '); }
  lcd.print(temp_B, 1);
  lcd.print("C");
  lcd.setCursor(10, 1);
  lcd.print("Soll:");
  if (soll_Temp_B < 10)
  { lcd.print(' '); }
  lcd.print(soll_Temp_B, 1);
  lcd.print("C");
  //Schlafzimmer
  lcd.setCursor(0, 2);
  lcd.print("Ist:");
  if (temp_SZ < 10)
  { lcd.print(' '); }
  lcd.print(temp_SZ, 1);
  lcd.print("C");
  lcd.setCursor(10, 2);
  lcd.print("Soll:");
  if (soll_Temp_SZ < 10)
  { lcd.print(' '); }
  lcd.print(soll_Temp_SZ, 1);
  lcd.print("C");
  //Arbeitszimmer
  lcd.setCursor(0, 3);
  lcd.print("Ist:");
  if (temp_AZ < 10)
  { lcd.print(' '); }
  lcd.print(temp_AZ, 1);
  lcd.print("C");
  lcd.setCursor(10, 3);
  lcd.print("Soll:");
  if (soll_Temp_AZ < 10)
  { lcd.print(' '); }
  lcd.print(soll_Temp_AZ, 1);
  lcd.print("C");
}

ich weis nicht was man in deinem gif erkennen soll.

ändere den loop mal auf

void loop() {
 //  for (auto &i : room) i.update(); // call each object
room[0].update();

}

und schau mal was nur das WZ macht.
Poste auch den Serial Output
Beschreibe EXAKT was falsch läuft, und was statt dessen passieren soll.

das bezweifle ich. handleLCD() wird nur aufgerufen, wenn sich was ändert oder alle 10 sec wenn der Sensor gelesen wurde.

Ich habe erstmal eine Variante gefunden, die für mich erstmal funktioniert über den Urlaub. Problem ist: Arbeitszimmer lässt sich derzeit nicht seperat steuern. ich denke da läuft der kleine Nano an sein Limit. Also habe ich das Arbeitszimmer auf das Schlafzimmer gepackt. Somit läuft der Code erstmal. Ich denke mit einem Mega und natürlich die Sensoren über einen Bus zu steuern könnte ich alle 4 Räume steuern, oder jeder Raum bekommt seinen eigenen Nano, was nicht Sinn und Zweck der Sache für mich ist. Der Code ist erstmal hier:

/*Temperatursteuerung von Stellantriebe fuer Heizungen mit stromlos geschlossenen 24V Antriebe
   Version 1.0 vom 9.10.2022
 
  // https://forum.arduino.cc/t/heizungssteuerung-raumtemperaturregelung/1041610/3
  // to be deleted 2022-12
*/

#include <OneWire.h>
#include <DallasTemperature.h>


#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

//================================Wohnzimmer==Ein-/Ausg�nge================================================

const byte DS18B20_DATA_WZ = 2;
const byte Knopf_Plus_PIN_WZ = 3;
const byte Knopf_Minus_PIN_WZ = 4;
const byte Relais_PIN_AZ = A0;
const float start_WZ = 18.0;

//=======================================Bad==Ein-/Ausg�nge================================================

const byte DS18B20_DATA_B = 5;
const byte Knopf_Plus_PIN_B = 6;
const byte Knopf_Minus_PIN_B = 7;
const byte Relais_PIN_B = A1;
const float start_B = 18.0;

//===============================Schlafzimmer==Ein-/Ausg�nge================================================

const byte DS18B20_DATA_SZ = 8;
const byte Knopf_Plus_PIN_SZ = 9;
const byte Knopf_Minus_PIN_SZ = 10;
const byte Relais_PIN_WZ = A2;
const float start_SZ = 18.0;

//==============================Arbeitszimmer==Ein-/Ausg�nge================================================

const byte DS18B20_DATA_AZ = 11;
const byte Knopf_Plus_PIN_AZ = 12;
const byte Knopf_Minus_PIN_AZ = 13;
const byte Relais_PIN_SZ = A3;
const float start_AZ = 18.0;

//=========================================Code=============================================================

OneWire oneWire_WZ(DS18B20_DATA_WZ);
DallasTemperature sensors(&oneWire_WZ);
float soll_Temp_WZ;
float temp_WZ;
OneWire oneWire_B(DS18B20_DATA_B);
DallasTemperature sensors_B(&oneWire_B);
float soll_Temp_B;
float temp_B;
OneWire oneWire_SZ(DS18B20_DATA_SZ);
DallasTemperature sensors_SZ(&oneWire_SZ);
float soll_Temp_SZ;
float temp_SZ;
OneWire oneWire_AZ(DS18B20_DATA_AZ);
DallasTemperature sensors_AZ(&oneWire_AZ);
float soll_Temp_AZ;
float temp_AZ;


void setup(){
  Serial.begin(115200);
  Serial.println(F("Start..."));
  lcd.init();
  lcd.backlight();
  sensors.begin();
  pinMode(Relais_PIN_WZ, OUTPUT);
  digitalWrite(Relais_PIN_WZ,HIGH);
  pinMode(Knopf_Plus_PIN_WZ,INPUT_PULLUP);
  pinMode(Knopf_Minus_PIN_WZ,INPUT_PULLUP);
  sensors_B.begin();
  pinMode(Relais_PIN_B, OUTPUT);
  digitalWrite(Relais_PIN_B,HIGH);
  pinMode(Knopf_Plus_PIN_B,INPUT_PULLUP);
  pinMode(Knopf_Minus_PIN_B,INPUT_PULLUP);
  sensors_SZ.begin();
  pinMode(Relais_PIN_SZ, OUTPUT);
  digitalWrite(Relais_PIN_SZ,HIGH);
  pinMode(Knopf_Plus_PIN_SZ,INPUT_PULLUP);
  pinMode(Knopf_Minus_PIN_SZ,INPUT_PULLUP);
  sensors_AZ.begin();
  pinMode(Relais_PIN_AZ, OUTPUT);
  digitalWrite(Relais_PIN_AZ,HIGH);
  pinMode(Knopf_Plus_PIN_AZ,INPUT_PULLUP);
  pinMode(Knopf_Minus_PIN_AZ,INPUT_PULLUP);
}

void loop()
{
  wohnzimmerSetup();
  badSetup();
  schlafzimmerSetup();
  //arbeitszimmerSetup();
  ausgabeLcd();
  ausgabeRelais();
}
//==============================================Wohnzimmer===================================================
void wohnzimmerSetup()
{
 if (soll_Temp_WZ == 0)
  {
    soll_Temp_WZ = start_WZ;
  }
  int knopf_lang = 0;
  while (digitalRead(Knopf_Plus_PIN_WZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_WZ = soll_Temp_WZ + 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_WZ = soll_Temp_WZ + 1;
    }
    if (soll_Temp_WZ > 40)
    {
      soll_Temp_WZ = start_WZ;
    }
    lcd.setCursor(10,0);
    if (soll_Temp_WZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_WZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  knopf_lang = 0;
  while (digitalRead(Knopf_Minus_PIN_WZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_WZ = soll_Temp_WZ - 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_WZ = soll_Temp_WZ - 1;
    }
    if (soll_Temp_WZ < start_WZ)
    {
      soll_Temp_WZ = 40;
    }
    lcd.setCursor(10,0);
    if (soll_Temp_WZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_WZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  temp_WZ = sensors.getTempCByIndex(0);
  sensors.requestTemperatures();
}
//==============================================Bad==========================================================

 void badSetup()
{
 if (soll_Temp_B == 0)
  {
    soll_Temp_B = start_B;
  }
  int knopf_lang = 0;
  while (digitalRead(Knopf_Plus_PIN_B) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_B = soll_Temp_B + 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_B = soll_Temp_B + 1;
    }
    if (soll_Temp_B > 40)
    {
      soll_Temp_B = start_B;
    }
    lcd.setCursor(10,1);
    if (soll_Temp_B < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_B, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  knopf_lang = 0;
  while (digitalRead(Knopf_Minus_PIN_B) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_B = soll_Temp_B - 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_B = soll_Temp_B - 1;
    }
    if (soll_Temp_B < start_B)
    {
      soll_Temp_B = 40;
    }
    lcd.setCursor(10,1);
    if (soll_Temp_B < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_B, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  temp_B = sensors.getTempCByIndex(0);
  sensors.requestTemperatures();
}
//==============================================Schlafzimmer=================================================

void schlafzimmerSetup()
{
 if (soll_Temp_SZ == 0)
  {
    soll_Temp_SZ = start_SZ;
  }
  int knopf_lang = 0;
  while (digitalRead(Knopf_Plus_PIN_SZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_SZ = soll_Temp_SZ + 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_SZ = soll_Temp_SZ + 1;
    }
    if (soll_Temp_SZ > 40)
    {
      soll_Temp_SZ = start_SZ;
    }
    lcd.setCursor(10,2);
    if (soll_Temp_SZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_SZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  knopf_lang = 0;
  while (digitalRead(Knopf_Minus_PIN_SZ) == LOW)
  {
    if ( knopf_lang < 3)
    {
      soll_Temp_SZ = soll_Temp_SZ - 0.1;
      knopf_lang++;
    }
    else
    {
      soll_Temp_SZ = soll_Temp_SZ - 1;
    }
    if (soll_Temp_SZ < start_SZ)
    {
      soll_Temp_SZ = 40;
    }
    lcd.setCursor(10,2);
    if (soll_Temp_SZ < 10)
    { lcd.print(' '); }
    lcd.print(soll_Temp_SZ, 1);
    if (knopf_lang<3)
    delay(500);
    else
    delay(200);
  }
  temp_SZ = sensors.getTempCByIndex(0);
  sensors.requestTemperatures();
}

//==============================================AusgabeLCD================================================
void ausgabeLcd() {
  //Wohnzimmer
  lcd.setCursor(0,0);
  lcd.print("Ist:");
  if (temp_WZ < 10)
  { lcd.print(' '); }
  lcd.print(temp_WZ, 1);
  lcd.print("C");
  lcd.setCursor(10,0);
  lcd.print("Soll:");
  if (soll_Temp_WZ < 10)
  { lcd.print(' '); }
  lcd.print(soll_Temp_WZ, 1);
  lcd.print("C");
  //Bad
  lcd.setCursor(0,1);
  lcd.print("Ist:");
  if (temp_B < 10)
  { lcd.print(' '); }
  lcd.print(temp_B, 1);
  lcd.print("C");
  lcd.setCursor(10,1);
  lcd.print("Soll:");
  if (soll_Temp_B < 10)
  { lcd.print(' '); }
  lcd.print(soll_Temp_B, 1);
  lcd.print("C");
  //Schlafzimmer
  lcd.setCursor(0,2);
  lcd.print("Ist:");
  if (temp_SZ < 10)
  { lcd.print(' '); }
  lcd.print(temp_SZ, 1);
  lcd.print("C");
  lcd.setCursor(10,2);
  lcd.print("Soll:");
  if (soll_Temp_SZ < 10)
  { lcd.print(' '); }
  lcd.print(soll_Temp_SZ, 1);
  lcd.print("C");
  //Arbeitszimmer
  lcd.setCursor(0,3);
  lcd.print("AZ nicht verfuegbar");
}
//==============================================AusgabeRelais================================================
void ausgabeRelais() {
  //Wohnzimmer
  if(temp_WZ >= soll_Temp_WZ){
    digitalWrite(Relais_PIN_WZ,LOW);
   }else{
    digitalWrite(Relais_PIN_WZ,HIGH);
   }
  //Bad
  if(temp_B >= soll_Temp_B){
    digitalWrite(Relais_PIN_B,LOW);
   }else{
    digitalWrite(Relais_PIN_B,HIGH);
   }
  //Schlafzimmer
  if(temp_SZ >= soll_Temp_SZ){
    digitalWrite(Relais_PIN_SZ,LOW);
    digitalWrite(Relais_PIN_AZ,LOW);
   }else{
    digitalWrite(Relais_PIN_SZ,HIGH);
    digitalWrite(Relais_PIN_AZ,HIGH);
   }
}

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