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