setup() erneut ausführen

Hallo,
ich habe ein Programm das unter einer bestimmten Bedingung einen Abgleich durchführt.
Nachdem dieser Abgleich ausgeführt wurde möchte ich gerne zu dem Punkt void setup() zurück und das setup() neu ausführen.

Wie kann ich das setup erneut aufrufen?
Dies muss doch irgendwie gehen?

Danke im Vorraus für die Hilfe
Gruß

Mach aus dem Code von setup(), den Du nochmals ausführen willst, eine eigene Subroutine und rufe sie von setup() aus auf. So kannst Du den gleichen Code beliebig oft später wieder aufrufen. Das geht, wenn nötig, auch mit der gesamten setup()-Routine.

danke, das wäre ein Weg. Aber gibt es wirklich keine Möglichkeit das Setup einfach nur neu auszuführen?

Es steht Dir frei, setup() einfach in loop() aufzurufen, aber dann solltest Du sehr vorsichtig sein, was Du da genau machst.

Danke , so wie wenn ich eine Subrouitine aufrufe?
Also:
setup ();

Jepp, genau so.

Moin,

ich hatte vor ein paar Tagen ein ähnliches Gespräch aber mehr in Richtung SPS. Dort wurde das Regeln eines Wertes besprochen. Der Kollege hat, abhängig von der Situation des Reglers eine Wert festgestzt. Wenn z.B. die Stellgröße von 100% für N Zyklen angestanden hat, dann hat er auf einen anderen Zweig im Programm zugegriffen um z.B. einen PID Parameter zu ändern oder eine Selbstoptimierung auszulösen.

Also

Wenn Bedingung a= n mal
Dann setzte Merkerwerrt auf X

Wenn x <= NN dann regeln
Wenn x = NN dann loop
Wenn x>= NN dann selbstoptimierung

Nur mal so als Anregung..

Greetz, Linpo

pylon:
Es steht Dir frei, setup() einfach in loop() aufzurufen, aber dann solltest Du sehr vorsichtig sein, was Du da genau machst.

Am besten garnicht erst daran denken, die setup erneut aufzurufen! Wie du bereits auch erwähntest, man sollte damit vorsichtig sein.

Von anderen IDE's kennt man das so, dass jedes Programm aus einem init (einmalig ausführen), einem main und einem exit bestehen kann.

Ein init wird erst wieder ausgeführt, wenn das Programm vollständig abgearbeitet ist, dabei ist nicht nur ein Durchlauf mit gemeint. Mit einem return oder ähnliches kann das Programm verlassen werden und danach erfolgt entsprechend eine exit Anweisung, falls erforderlich.

Wenn du wirklich etwas zurücksetzen willst, bastel dir kleine Routinen die du aufrust, diese kannst du auch in die setup mit reinschreiben in Form von

void setup() {

// was wirklich nur einmal ausgeführt werden sollte

...

void setCouter(); // Setzt einen entsprechenden Counter zB. zurück (reines Beispiel)

}

Davon abgesehen, daß ich es für schlechten Programmierstil halte setup() nochmal aufzurufen sehe ich kein technisches Hindernis warum das nicht funktionieren sollte.

Auch sehe ich keinen Grund wieso setup() nochmal aufgerufen werden muß.
setup() ist eine Funktion wie jede andere und hat keine Besonderheiten, Sonderechte oder "Bonusfunktionen" wieso eine gewisser Programmteil nicht in loop() bedingt ausgeführt oder eine Funktion mit diesem Programmteil nicht bedingt aufgerufen werden kann,soll, darf, muß.
Grüße Uwe

Wenn man denkt, dass man durch erneutes Aufrufen von setup() sowas wie ein Soft-Reset hinkriegt, liegt man total daneben.

In der Regel wird setup einfach so geschrieben, dass man es nur einmal aufrufen * von main aufgerufen werden * sollte:
z.B:

void setup() {
   Serial.begin(115200); // geht davon aus, dass Serial vorher noch nie verwendet wurde
}

Ansonsten haben natürlich alle anderen auch Recht:

  • kann man machen
  • soll man nicht machen
  • schlechter Stil