millis in mehreren void-Funktionen ausführen

Hallo,
ja mein erstes lebenszeichen hier im Forum, bitte daher um etwas Nachsicht.
Meine erste Frage:
Können millis Zeitfunktionen gleichzeitig in unterschiedlichen void-Funktionen
ausgeführt werden?, in der Loop ist das kein Problem, aber in den void´s scheint
es nicht zu fuktionieren.

Hatt das schon mal einer probiert?

Danke tilltec

Ja, geht.

Gruß Tommy

void-Funktionen

Gibt's nicht, es gibt nur Funktionen. Void ist der Rückgabetyp.

in den void´s scheint es nicht zu fuktionieren

Doch, tut es. Zeige Deine "voids" :wink:

Ich hab die Frage auch noch nicht verstanden.
Es gibt ja nicht mehrere millis() sondern quasi nur eine globale Zeit die läuft.
Und damit musst du dann was machen.

Da du uns deinen Sketch noch nicht gezeigt hast wissenw ir also nicht was du genau willst und können dir folglich auch nicht weiter helfen.

Poste doch mal deinne Sketch in CODETAGs!

Lieben Gruß,
Chris

tilltec:
.....
aber in den void´s scheint
es nicht zu fuktionieren.

Dann machst du etwas falsch.
Leider zeigst du nichts, so können wir nicht helfen.

Leider hat mir Uwe keine Glaskugel zugestanden, aber möglicherweise hilft es Dir, lokale Variablen static festzulegen.

agmue:
Leider hat mir Uwe keine Glaskugel zugestanden, aber möglicherweise hilft es Dir, lokale Variablen static festzulegen.

Naja.....das muss ja nicht unbedingt eine "Arduino-Glaskugel" sein, da tut es auch eine Clone-Kugel.

Hallo Leute,
etwas Geduld bitte, bin nicht immer vor dem Rechner.

Bevor ich ich euch meinen Code zumute wollte ich in Erfahrung bringen, ob das überhaupt läuft.

Kurzer Ablauf:

Logik in der Loop ruft R1Auf() auf, in void R1Auf() wird mit millis eine eingestellte Zeit überwacht und ein Relais geschaltet,

in dieser Zeit ruft die Loop R2Auf(), auch in der void R2Auf() wird mit millis eine Zeit überwacht und ein Relais geschaltet usw.

Ich hoffe das ich das so beschrieben habe, das ich ein: ja,ja oder ein nein,nein bekomme bitte kein ja,nein.

Wenn die erfahrenden Coder mir ein "ja" geben kann man auch über mein Code sprechen.

Danke tilltec

Ja, ja, das wird schon irgendwie gehen :slight_smile:

Während R1Auf() läuft, kann nicht R2Auf() aufgerufen werden.

Gruß Tommy

Wenn die erfahrenden Coder mir ein "ja" geben kann man auch über mein Code sprechen.

Die erfahrenen Coder haben keinen Bock, zu solchen Fragen verbindliche Antworten zu geben. Und warum nicht? Weil man mit den Brocken die Du hier reinwirfst nix anfangen kann.

Also gibt Dir einen Ruck und uns eine lauffähige Version Deiner Versuche - DANN kann Dir geholfen werden.

na gut, aber ich habe euch gewarnt, werde den Code mal versuchen zu beschreiben.

Es sollen Rollos und Fenster gesteuert werden, derzeitig im Code ist nur die manuelle

Steuerung vorhanden, ich kann uber ein taster die entspechenden Rollos und Fenster

auswählen und dann mit zwei weiteren tasten “auf” und “zu” fahren, dan gibt es noch

ein taster um die Rollos punktuell zu fahen.

In einem ersten Versuch nur mit einem Rollo (R1) konnte ich zwar auf und zu fahren,

aber ich mußte die gleiche Zeit die ich zum fahren eingestellt habe, jeweils wieder warten

bis ein neuer Befehl möglich war.

Jetzt habe ein weiteres Rollo (R2) hinzu gefügt, kann beide mit “auf” Befehle steuern, aber

die Relais werden nicht mehr nach Ablauf der Zeit abgeschaltet.

An bei Vom fertigen Testaufbau (kann also Änderungen schnell testen)

DS1307_mit_LCD.ino (15.3 KB)

kann scheinbar nicht direkt de Code posten, ist irgendwie limitiert.

tilltec

DS1307 ist eine schlechte Wahl, da ungenau. DS3231 wäre besser, weil temperaturkompensiert. Auf das Programm hat das aber eher keinen Einfluß.

//*********** rollo 1 zeit für zufahrbefehl ***************************
void R1Zu() {

  if (k2Zu) {
    if (millis() - startzeitR1 >= laufzeitR1) {
      k2State = !k2State;
      startzeitR1 = millis();
    }
  } else {
    k2State = false;
  }
  mcp2.digitalWrite(k2, k2State);

  if (k2State == false)
    r1ZuState_1 = 0;
}

mir ist aufgefallen, dass z.B. k2State umgeschaltet oder ausgeschaltet wird....
Ist das so gewollt?

Hallo hajos118,
ja, das war die einzige Möglichkeit für mich das sich nach ablauf der Zeit wieder der Status ändert,
also k2 wieder abfällt.
Ich denke mal das ich mich da in etwas verrannt habe, ich wollt einfach nur in die R1Zu() springen
k2 einschalten und nach vorgegebener Zeit mit Hilfe von "millis" k2 wieder abschalten

gruß tilltec

Hallo,

das ist relativ einfach. :slight_smile:

Das was du suchst bzw. das was du programmieren musst ist in der digitalen Welt ein Monoflop.
Dir fehlt noch ein Übergabeparameter zum steuern der Funktion.
Das ist bei mir eine Funktion mit switch case und enums. Also ein kleiner Zustandsautomat.

Also. Du schaltest das Relais ein und merkst dir die Zeit. Die Zeit deiner Armbanduhr namens millis.
Wenn geschalten und Zeit gemerkt gehts zum Zustand warten über. Hier wird abgefragt ob die Wartezeit vorbei ist. Wenn ja wird das Relais ausgeschalten und der Zustand wieder in Idle gesetzt. Wenn nicht, wird nichts gemacht und bei erneuten Aufruf der Funktion nur wieder kurz geschaut ob die Wartezeit schon vorbei ist.

Du kannst dich über Zustandsautomaten schlau machen.

Doc_Arduino:
Dir fehlt noch ein Übergabeparameter zum steuern der Funktion.

Der Satz könnte vielleicht Irreführend sein. Die eigentliche Frage sollte lauten.
Womit wird das Relais einschalten ausgelöst?

Hallo Doc_Arduino,
ich denke sowas änliches habe ich mir schon durch die ganzen Flag´s gebastelt.

Das einschalten des Relais wird dezeit so angedacht, die Logik in der loop entscheidet das zu R1Auf()
gespungen wird, dort soll das Relais eingeschaltet werden und nach Ablauf der Zeit wieder ausgeschaltet
werden.
Oder das Relais wird bereits durch die Logik mit eingeschaltet und dann nur in der R1Auf() ausgeschaltet.

Wie auch immer, das mit den millis ist ein erheblichen Aufwand und mag bei einem "blinki" noch angehen
aber bei 12 Relais !!!!

Ich binn nicht auf millis festgelegt, also wenn da jemand da eine Idee hat dann bitte mal melden.

gruß tilltec

Wie auch immer, das mit den millis ist ein erheblichen Aufwand und mag bei einem "blinki" noch angehen
aber bei 12 Relais !!!!

Dich scheint ein Entsetzen zu plagen...

Mich, das verwundert.