Hallo zusammen,
ich bin neu, was die programmierung mit dem Arduino betrifft.
Ich bearbeite ein Projekt zur Wasseraufbereitung für meine Bachelorarbeit und möchte den Reaktor gerne automatisieren.
Grundsätzlich funktioniert das bereits. (s. sketch_ZULU10.ino) (ich hoffe das mit den Anhängen klappt hier)
const int Taster = 2;
int Zulaufpumpe = 3;
int Umlaufpumpe = 4;
const int LED = 13;
int TasterStatus = 0;
int w = 60; // Dauer Zulauf 60 sec
int z = 60; // Dauer Umlauf 60 sec
int g = 28236; // Dauer Stop 480 min 28800sek.
int p = 28236; // Dauer bis Umlauf Stop 480 min
int h = 101.857143; // Intervall Zulauf 1,7min (102,86sek)
int o = 101.857143; // Invervall Umlauf 1,7min (102,86sek)
int n = 0; // Variable
int LEDState = 0;
//benutzte Variablen: b,f,g,h,i,m,n,o,p,x,w
void setup()
{
Serial.begin(9600);
pinMode(Taster, INPUT);
pinMode(Zulaufpumpe, OUTPUT);
pinMode(Umlaufpumpe, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite (Zulaufpumpe, LOW);
digitalWrite (Umlaufpumpe, LOW);
digitalWrite (LED, LOW);
}
void loop() {
TasterStatus = digitalRead(Taster);
if (TasterStatus == HIGH)
{
n=0;
for (int f=0; f<=p; f++) // Umlauf für 60 sek
{
if (f==n*o) // Intervall Umlauf 1,7 min
{
n++;
for (int m=0; m<=z; m++) // für m=0, <=600min
{
digitalWrite (Umlaufpumpe, HIGH);
LEDState = digitalRead(LED);
if(LEDState == HIGH){
digitalWrite(LED, LOW);
}
else{
digitalWrite(LED, HIGH);
}
delay (1000);
}
f=f+z-1; //
}
digitalWrite (Umlaufpumpe, LOW);
digitalWrite (LED, LOW);
delay (1000);
}
n=0;
for (int i=0; i<g; i++) // Zulauf für 480 min
// (= Zuweisung) (++ Inkrementierung,
// Zählt zu der Variable 1 dazu)
{
if (i==n*h) // Intervall Zulauf 1,7 min
// (== prüft auf Gleichheit)
{
n++;
for (int x=0; x<w; x++) // für x=0, <=60 sek
{
digitalWrite (Zulaufpumpe, HIGH);
LEDState = digitalRead(LED);
if(LEDState == HIGH){
digitalWrite(LED, LOW);
}
else{
digitalWrite(LED, HIGH);
}
delay (1000); // +1sek "pause"
}
i=i+w-1;
}
digitalWrite (Zulaufpumpe, LOW);
digitalWrite (LED, LOW);
delay (1000); // Pause 1 sek
}
}
}
Nun zum Problem:
meine Steuerung soll:
für 8h die Umlaufpumpe ein und wieder ausschalten.
diese soll für 60 sekunden, alle 102 sekunden eingeschaltet werden.
im anschluss soll die Zulaufpumpe genauso schalten.
leider passen die Zeiten nie. Ich vermute das es unter anderem am Delay liegt. Daher wollte ich das gerne durch die Verwendung der Funktion millis() ersetzen.
Jedoch gestaltet sich diese schleife in einer Schleife Programmierung für mich doch sehr schwer.
Ich habe damit angefangen. Komme aber leider nicht weiter und habe schon viel zu viele Stunden dafür verwendet. Wenn mir jemand helfen könnte, wäre ich wirklich sehr dankbar.
Der neue Sketch: ZuluMillis.ino
Ich habe mich bereits durch viele Foren und Hilfestellungen gelesen. Leider konnte ich keine Anwendung finden die ich auf mein Problem anpassen kann.
Wichtig ist, dass der Arduino für ein paar Tage nahezu die 8h/8h halten kann. Aktuell läuft er entweder zu schnell oder zu langsam.
Vielen Dank für eure Hilfe!
Gruß
Felix
ZuluMillis.ino (5.56 KB)
sketch_ZULU10.ino (3.02 KB)