/********************************************************************/ // First we include the libraries #include #include #include #include #include /********************************************************************/ // Data wire is plugged into pin 2 on the Arduino #define ONE_WIRE_BUS 20 /********************************************************************/ // Setup a oneWire instance to communicate with any OneWire devices // (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); /********************************************************************/ // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); /********************************************************************/ byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x09, 0x70 }; IPAddress ip(192,168,178,57); EthernetServer server(80); float r,t; const int vent = 22; const int compressor = 23; const long interval = 5000; // interval for measurement (milliseconds) unsigned long previousMillis = 0; const long agitPrerun = 60000; unsigned long previousMillisagitPrerun = 0; const long maxCool = 1800000; unsigned long previousMillismaxCool = 0; const long agitPostrun = 180000; unsigned long previousMillisagitPostrun = 0; float temperatureA; // temperature in Celsius float DeltaT = 1.5; float temperatureSP = 10.0; int stepAct = 0; int stepActLC = 0; int tempReached = 0; void setup(void) { pinMode(vent, OUTPUT); pinMode(compressor, OUTPUT); // start serial port Serial.begin(9600); Serial.println("Dallas Temperature IC Control Library Demo"); // Start up the library sensors.begin(); Ethernet.begin(mac, ip); server.begin(); Serial.print("Server gestartet. IP: "); // IP des Arduino-Servers ausgeben Serial.println(Ethernet.localIP()); } void loop(void) { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you blinked the LED previousMillis = currentMillis; // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus /********************************************************************/ Serial.print(" Requesting temperatures..."); sensors.requestTemperatures(); // Send the command to get temperature readings Serial.println("DONE"); /********************************************************************/ temperatureA = sensors.getTempCByIndex(0); Serial.print("Temperature is: "); Serial.println(temperatureA); Serial.print("StepAct: "); Serial.println(stepAct); Serial.println((currentMillis - previousMillismaxCool)/1000); } if (stepAct <= 0 || stepAct > 4){ stepAct = 1; } else if (stepAct == 1){ // Waiting if (temperatureA > (temperatureSP + DeltaT)){ stepAct++; } digitalWrite(vent, LOW); digitalWrite(compressor, LOW); } else if (stepAct == 2){ // Pre run agitators for 1min. if (stepAct != stepActLC){ previousMillisagitPrerun = currentMillis; stepActLC = stepAct; } if (currentMillis - previousMillisagitPrerun >= agitPrerun) { previousMillisagitPrerun = currentMillis; stepAct++; } digitalWrite(vent, HIGH); digitalWrite(compressor, LOW); } else if (stepAct == 3){ // Cooling until temperature reached, or max time if (stepAct != stepActLC){ previousMillismaxCool = currentMillis; stepActLC = stepAct; } if (currentMillis - previousMillismaxCool >= maxCool || temperatureA < temperatureSP) { previousMillismaxCool = currentMillis; stepAct++; } if (temperatureA < temperatureSP){ tempReached = 1; } else { tempReached = 0; } digitalWrite(vent, HIGH); digitalWrite(compressor, HIGH); } else if (stepAct == 4){ // Postrun if (stepAct != stepActLC){ previousMillisagitPostrun = currentMillis; stepActLC = stepAct; } if (currentMillis - previousMillisagitPostrun >= agitPostrun) { previousMillisagitPostrun = currentMillis; if (tempReached == 1){ stepAct = 1; } else{ stepAct--; } } digitalWrite(vent, HIGH); digitalWrite(compressor, LOW); } // ETHERNET EthernetClient client = server.available(); // Wenn es einen Client gibt, dann... if (client) { Serial.println("Neuer Client"); // Jetzt solange Zeichen lesen, bis eine leere Zeile empfangen wurde // HTTP Requests enden immer mit einer leeren Zeile boolean currentLineIsBlank = true; // Solange Client verbunden while (client.connected()) { // client.available() gibt die Anzahl der Zeichen zurück, die zum Lesen // verfügbar sind if (client.available()) { // Ein Zeichen lesen und am seriellen Monitor ausgeben char c = client.read(); Serial.write(c); // In currentLineIsBlank merken wir uns, ob diese Zeile bisher leer war. // Wenn die Zeile leer ist und ein Zeilenwechsel (das \n) kommt, // dann ist die Anfrage zu Ende und wir können antworten if (c == '\n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // Verbindung wird nach Antwort beendet client.println("Refresh: 30"); // Seite alle 25 Sekunden neu abfragen client.println(); // Ab hier berginnt der HTML-Code, der an den Browser geschickt wird client.println(""); client.println(""); client.println("CONTROLLINO Analog Input"); client.println("

CONTROLLINO

"); client.println("

"); client.print("Aktuelle Temperatur: "); client.println(temperatureA); client.println("

"); client.println("

"); client.print("Sollwert Temperatur: "); client.println(temperatureSP); client.println("

"); client.println("

"); client.print("Delta Temperatur: "); client.println(DeltaT); client.println("

"); client.write("
T: "); client.write("R:
"); client.println(r,t); client.println(""); break; } if (c == '\n') { // Zeilenwechsel, also currentLineIsBlack erstmal auf True setzen currentLineIsBlank = true; } else if (c != '\r') { // Zeile enthält Zeichen, also currentLineIsBlack auf False setzen currentLineIsBlank = false; } } } // Kleine Pause delay(1); // Verbindung schliessen client.stop(); Serial.println("Verbindung mit Client beendet."); Serial.println(""); } }