Added Cool.ino
This commit is contained in:
parent
7e3158de44
commit
b82ff138c2
203
Cool.ino
Normal file
203
Cool.ino
Normal file
|
@ -0,0 +1,203 @@
|
|||
/********************************************************************/
|
||||
// First we include the libraries
|
||||
#include <OneWire.h>
|
||||
#include <DallasTemperature.h>
|
||||
#include <Controllino.h>
|
||||
#include <SPI.h>
|
||||
#include <Ethernet.h>
|
||||
/********************************************************************/
|
||||
// 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("<!DOCTYPE HTML>");
|
||||
client.println("<html>");
|
||||
client.println("<head><title>CONTROLLINO Analog Input</title></head>");
|
||||
client.println("<body><h3>CONTROLLINO</h3>");
|
||||
|
||||
client.println("<p>");
|
||||
client.print("Aktuelle Temperatur: ");
|
||||
client.println(temperatureA);
|
||||
client.println("</p>");
|
||||
client.println("<p>");
|
||||
client.print("Sollwert Temperatur: ");
|
||||
client.println(temperatureSP);
|
||||
client.println("</p>");
|
||||
client.println("<p>");
|
||||
client.print("Delta Temperatur: ");
|
||||
client.println(DeltaT);
|
||||
client.println("</p>");
|
||||
client.write("<form method=GET>T: <input type=text name=t>");
|
||||
client.write("R: <input type=text name=r><input type=submit></form>");
|
||||
client.println(r,t);
|
||||
client.println("</body></html>");
|
||||
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("");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in a new issue