Zusammenfügen von Sketch

Wenn ich zwei oder mehrere Sketches zusammenfügen möchte, muss ich immer die setup () Funktion zusammen fügen, und dann die loop() Funktion zusammenfügen. Gibt’s da eine Möglichkeit dem Compiler-Linker-Locater (oder wer auch immer dafür zuständig ist) mitzuteilen, dass er die setups zusamenhängt und dann auch die loops zusammenhängt? Oder muss ich da immer eine Library erstellen wenn ich schon funktionierende Teile in verschiedenen Programmen zusammen hängen möchte?

Tab1Programm1
BereichSetup
void setup(){
#Initialisierung von Programm 1
}
BereichLoop
void loop(){
#Anweisungen von Programm 1
}
############################
Tab2Programm2
#BereichSetup
void setup(){
#Initialisierung von Programm 2
}
BereichLoop
void loop(){
#Anweisungen von Programm 2
}

Ich wünsche mir, dass die Bereiche mit gleichem Namen zusammengeführt werden. Geht das?

Du kannst den Code doch auch in eine loop() Funktion schreiben

Oder du machst zwei normale Funktionen draus die in loop() aufgerufen werden

setup und loop sind zwei Funktionsnamen, die du je einmal definiert haben musst. Die Arduino IDE fügt dazu eine Funktion, die vereinfacht so aussieht

int main()    {
   setup();
   while (1) { loop(); }
   return 0;  // kommt nie hierher
}

Du kannst natürlich deine zwei setup - Funktionen in setup1 und setup2 umbenennen und eine dritte hinzufügen:

void setup() {
   setup1();
   setup2();
}

Das wird nur nicht richtig sein, wenn z.B. in beiden ein
Serial.begin()
vorkommt. Das brauchst du nur einmal , und kann auch nur für beide Teile die gleiche Geschwindigkeit vorgeben.

Ein bisschen überlegen musst du also in jedem Fall, aber wenn dein Sketch aus unabhängigen Teilen besteht, spricht nichts dagegen, das Generelle in setup() zu packen und die spezifischen Teile in eigene Funktionen, evtl. gar in eigene Tabs, auszulagern, die dann in setup() nur aufgerufen werden.

loop kannst du natürlich genauso behandeln.

Danke für den Ansatz mit
void setup(){
setupProgramm1(); //aus Programm1
setupProgramm2(); //aus Programm2
setupProgramm3(); //aus Programm2
. . .
}

das hilft schon sehr, und benötigt weniger umschreiben. Freilich, wie du sagst dürfen sich in allen Programmen sich nicht widersprechende Anweisungen stehen, wie z.B. Busgeschwindigkeiten oder Verwendung von IO-Ports.
Muss ich nur einmal dieses generelle Programm schreiben und alle anderen darin einhängen.

Das derartige einfach Zusammenkopieren von Sketchen funktioniert aber nur, wenn die von Anfang an darauf ausgelegt wurden - z.B. blockadefrei programmiert sind.
Ganz allgemein geht das nicht so ohne weiteres - zumindest funktioniert der kombinierte Sketch am Ende evtl. nicht, auch wenn es keine Fehlermeldungen vom Compiler gibt.

1 Like

Hallo,
zudem wird es in vielen Fällen zu Konflikten mit gleichen Variabelnamen geben. Zumindest mit denen die im globalen Teil definiert werden und das sind ja oft nicht wenig.
Heinz

Auch ich sehe das einfache “zusammenkopieren” von Sketchen als oft nicht machbar an, da verschiedenen Sketche oft gleiche Resourcen brauchen.
Der Sketch muß durchdacht sein und darum wahrscheinlich anders funktionieren wie die 2 einzelnen Teilsketche. Es verbietet keiner Teile eines Sketches in einen anderen zu kopieren bzw Teile des einen mit Teile des anderen zusammenzukopieren. Eine sinnvolle und funktionale Sache wird daraus erst wenn man das vorher plant. Außerdem sollte man bestimmte Aktionen als Funktion programmieren und so kann man die Funktion einfach übernehmen. Die Aufrufe müssen dann je nach Funktionalität dann anders erfolgen damit der resultierende Sketch all das macht was er soll.

Grüße Uwe

1 Like

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.