#include <OneWire.h>
#include <DallasTemperature.h>
//Pin für Pumpen-Relais: D8
//Pin für Ventil-Relais 'Pool': D2
//Pin für Ventil-Relais 'Solar': D3
//Pin für End-Schalter 'Pool': D5
//Pin für End-Schalter 'Solar': D6
//Pin für Sensoren: D7
// Pin-Definitionen
const byte One_Wire_Bus = 7; // Pin für die Temperatursensoren
const byte valve_drive_pool_pin = 2; // Pins für das Ventil-Relais
const byte valve_drive_solar_pin = 3; // Pins für das Ventil-Relais
const byte PumpeRelaisPin = 8; // Pin für das Pumpen-Relais
const byte ValveSwitchPoolPin = 5; // Pin für den Ventilpositionsschalter in Postion "Pool"
const byte ValveSwitchSolarPin = 6; // Pin für den Ventilpositionsschalter in Postion "Solar"
// --Betriebszustände--
// Definition der Zustände
const byte Z_Aus = 1;
const byte Z_Umwaelzen = 2;
const byte Z_Solarbetrieb = 3;
const byte Z_SolarbetriebEin = 4;
const byte Z_StelleVentilPool = 5;
const byte Z_SolarbetriebAus = 6;
const byte Z_Manuell = 7;
const byte Z_Init = 99;
const byte Z_Error = 111;
// Zustandsvaiablen
byte PumpeVentil = Z_Init; //Initialisierung von Ventilstand
byte Z_Merker = 0;
// --Variablen für die IST-Temperaturen--
float PoolIst = 0, SolarIst = 0; // Sensortemperaturen
const byte AbleseFrequenz = 3; // Intervall der Ablesung der Temperatursensoren in Sekunden
// --Variablen für die Timer--
//Abfrage und Steuerung der Timer
const byte tStart = 1, tStop = 2, tUpdate = 3, tStatquery=0;
//const byte START = 1, STOP = 2, UPDATE = 3, STATQUERY=0;
//Zustände der Timer
const byte tStopped = 0, tRunning = 1, tTimeout = 2;
//const byte STOPPED = 0, RUNNING = 1, TIMEOUT = 2;
// --Variablen für das Ventil--
// Fahrzeit des 3-Wege-Ventils
const byte VentilStellZeit = 150; // maximal Stellzeit des Ventils in Sekunden
// Steuerung des Ventils
const byte vPool=0, vSolar=1, vStop=2, vNoTrigger=99;
// Status des Ventils
byte valveStatus;
const byte vPosPool=0, vPosSolar=1, vStopped=2, vMov2Solar=3, vMov2Pool=4, vPosUndefined=5, vError=6;
// const byte Pool=0, Solar=1, Mov2Solar=3, Mov2Pool=4, Undefined=5, Error=6; //Stop=2 von Timersteuerung
bool pumpTrigger=0;
byte valveTrigger=255; //undefined
// Einige Flags/Merker
const bool ein = true, aus = false;
//bool TempAenderung = false;
bool errorlevel=0;
bool pumpStatus=aus;
bool Umwaelzen=aus; //Name noch anpassen oder von der Zeitschaltuhr übernehmen
bool Automatik=ein;
bool PoolSollOK = false;
// Erzeugen der Objekte für Temperatursensoren
OneWire oneWire(One_Wire_Bus);
DallasTemperature sensors(&oneWire);
//Struktur mit allen veränderbaren Daten als "Speicherblock"
struct SaveData {
// SOLL, SOLLMAX und SOLLMIN-Werte für die Pooltemperatur
float PoolSoll, PoolSollMax, PoolSollMin;
// Ein- bzw. Ausschalthysterese für Solarbetrieb
byte HystereseEin, HystereseEinMin, HystereseEinMax;
byte HystereseAus, HystereseAusMin, HystereseAusMax;
// Wartezeit für Ein-/Ausschalten des Solatbetriebs
byte SolarEinWartezeit, SolarAusWartezeit;
//Tauschen der Sensoren für Pool-/Solartemperatur
bool sensortausch;
bool resetAuto;
};
//Initialieren der Variablen der Stuktur
struct SaveData settings = { 29.5, 32.0, 20.0, 6, 0, 9, 2, 0, 9, 5, 5, false,false};
/*
// Prüft ob min<=wert>=max
bool imBereich(float wert, float min, float max){
if((wert-min)*(wert-max) <= 0) return true;
return false;
}
*/
void setup() {
Serial.begin(115200); //seriellen Monitor aktivieren
Serial.println(F("Start..."));
delay(100);
//Pin-Definitionen
pinMode(valve_drive_pool_pin, OUTPUT); // Pins für die Steuerrelais für die
pinMode(valve_drive_solar_pin, OUTPUT); // Pumpe und den Ventilantrieb
pinMode(PumpeRelaisPin, OUTPUT); // als Ausgänge definieren
pinMode(ValveSwitchPoolPin, INPUT); // Pins für die Endschalter der Ventil-
pinMode(ValveSwitchSolarPin, INPUT); // antriebs als Eingänge
digitalWrite(PumpeRelaisPin, LOW); // Zum Start alle Relais
digitalWrite(valve_drive_pool_pin, LOW); // ausschalten
digitalWrite(valve_drive_solar_pin, LOW);
initSensors();
PumpeVentil=Z_Init;
sensors.requestTemperatures(); //workaround für "Fehler" 85
}
void loop()
{
HoleTemperaturen();
SteuerungPumpeVentil();
UpdateTimer();
}