Zeit parallel im LCD Display ?

Hallo,

ich mache gerade ein Projekt, in dem ich verschiedene Schrittmotoren
ansteuere und deren Status in einem LCD Display ausgebe.
Jetzt möchte ich nur gleichzeitig noch die Sekunden mit im Display anzeigen.
dh wie lange ein Schrittmotor schon läuft.

Allerdings habe ich das zZ mit einem ... HIGH dann ein delay und denn ein LOW
an einem Digitalen Port gelöst.

Jetzt meine Frage, kann ich im Hintergrund einen Thread laufen lassen, welcher mir
Sekündlich im Display die Laufzeit aktualisiert ?

Gruß Goofy

Ich denke da eher an einen Entfall der delay-Aufrufe. Schau dir dazu mal den Beispielsketch BlinkWithoutDelay an.

Das ging ja schnell :wink:

Ja ok, dass wäre natürlich auch ne Möglichkeit - werde mal schauen wie ich
meinen Code umstelle, dass ich es mit dieser Methode funktioniert.

DANKE mal für den Tipp !

Gruß Goofy

Da stellt sich zunächst eine grundsätzlich Frage:
hast du ein Uhrmodul wo du die Sekunden abgreifen willst oder aber möchtest du
anhand der Funktion millis() die Zeiten ausgeben.
gruß

Was wäre den besser ?
Also zZ habe ich noch kein Uhrmodul - ich habe aber schon mit
dem Gedanken gespielt.

Gruß Goofy

geht beides, ich würde es erst einmal mit millis() versuchen, das delay würde ich auf jeden Fall raus nehmen,
denn da hälst du ja nur den Programmablauf an.
Willst du die Laufzeiten der einzelnen Motoren addieren und anzeigen (für jeden Motor) oder was genau soll
angezeigt werden?

Also ich seh' schon ... ich muss das ein wenig näher erklären :slight_smile:

Das Projekt handelt sich um eine "Delux Duschsteuerung" - diese beinhaltet
zwei gesteuerte 2-Wege Zonenventile, einmal für Kaltwasser und einmal fürs
Warmwasser, und noch ein 2-wege Absperventil und 4 DS18B20.

Zu den Sensoren, einmal fürs kommende Wasser (kalt|warm) einmal unten
direkt nach dem Warmwasserspeicher und einmal vor dem Duschbrausenaustritt.

Zur Logik : Die Umwälzpumpe soll so lange laufen bis ich an der Dusche nahezu
die Temp vom Speicher hat, dann wird über das Mischkreuz berechnet wie ich meine
2 Zonenventile stellen muss dass die gewünschte Temp aus dem Hahn kommt.
Und wenn dann grob alles passt, wir das Absperventil geöffnet.

und als Addon, kann man dann pro Benutzer spezifische Werte hinterlegen, also Temp, Länge
und stärke des Wassers.

Und für die Länge, möchte ich halt im Display anzeigen, wie lange man schon duscht :slight_smile:

PS: hier mal ein Link von der ersten Steuerung

Gruß Goofy

ich glaube bei der Steuerung ist die Anzeige der Duschlänge noch das kleinste Problem.
Sobald das Absperrventil öffnet setzt du halt über millis() einen Startwert.
Bei jedem Durchlauf des Programms kannst du dann die verstrichene Zeit berechnen
zeit=(millis()-startwert)/1000 und du erhälst Sekunden, die du im Display ausgeben kannst.
Soweit der Grundgedanke, wenn noch was unklar ist frag.
gruß

Ja soweit ist mir das klar - nur es kann ja dann sein, dass es nachjustiert
und dass dann mit nem delay - und in der Zeit sehe ich ja dann nicht die Zeit ?

ich habe ne Funktion geschrieben

....
//Mischer zu bis auf in msek
int tmischer=14000;
....

///////////////////
// Auf / Zu //
///////////////////
int mischer(float warm_stellung, float kalt_stellung){
int twarm;
float prozent, warm_stellung_neu, temp_warm_stellung;

warm_stellung_neu = warm_stellung - warm_stellung_aktuell;
temp_warm_stellung = warm_stellung_neu;

#ifdef DEBUG
Serial.print("\n");
Serial.print(warm_stellung);
Serial.print(" aktuell - ");
Serial.print(temp_warm_stellung);
#endif

if (warm_stellung == 0){
twarm = 0 - tmischer;
}
else{
prozent = temp_warm_stellung / 100;
twarm = tmischer * prozent;
}

#ifdef DEBUG
Serial.print(" Differenz - twarm: ");
Serial.print(twarm);
Serial.print("ms\n");
#endif

if(twarm>=0){
//wenn twarm positiv, oeffne mischer
digitalWrite(8, HIGH);
delay(twarm);
digitalWrite(8, LOW);
}
else{
//wenn twarm negativ, schliesse mischer
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
delay(twarm*(-1));
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
warm_stellung_aktuell = warm_stellung;
}

Diese Funktioniert soweit richtig gut - allerdings halt mit Delay :frowning:
habe es gerade mal versucht umzustellen - oh man, dass läuft mal gar nicht so wie es soll.

Vor allem, weil sie die Werte für warm_stellung & kalt_stellung dauernd ändern können.

PS habe bis jetzt mal nur den Schrittmotor für das Warmwasser dran.

Gruß Goofy

Hallo Goofy,
ich weiß nicht ob ich das jetzt richtig verstehe, aber warum schreibst du nicht anstelle von

if(twarm>=0){
//wenn twarm positiv, oeffne mischer
digitalWrite(8, HIGH);
delay(twarm);
digitalWrite(8, LOW);
}

if(twarm>=0) //wenn twarm positiv, oeffne mischer
digitalWrite(8, HIGH);
else
digitalWrite(8, LOW);