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?
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.
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
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