Setup in einer Methode (cpp mit h - Datei)

Hallo Zusammen,

kann man einen Setup in einer extra angelegte cpp datei anlegen?
Ich möchte gerne bspw. die Blink Funktion auslegen. Dabei sollen die Pin (wenn es der gleiche ist) nicht jedes mal erneut initiiert werden um Ressourcen zu sparen.

Viele Grüße
stylophonics

Nunja, da bietet sich an, deine Klasse mit einer init() oder begin() Methode zu versehen, und diese in der richtigen setup() aufzurufen.

Alternativ, kannst du deine Pin definition/deklaration in einer *.h Datei machen.

pardon.
Ich weiß ich habe als Topic "Methode" geschrieben.
Ich habe keine Klassen in der cpp bzw h Datei - habe lediglich Funktionen drin stehen.

Macht nichts.
Du kannst in setup() beliebige Funktionen aufrufen, wenn deren Deklaration in einer includierten .h Datei ist.

Du könntest wohl auchvoid setup() {} in eine .cpp Datei schreiben statt in eine .ino, wenn man deine Frage missverstehen möchte.

Ich hätte eben mehrere setups.
Zum einen im "hauptprogramm" und dann eben noch die anderen in der cpp datei.
Müsste ich die cpp-setup dann im hauptprogramm expliziet nochmal aufrufen?

Grüße

Wenn man möchte, dass Funktionen/Methoden aufgerufen werden, dann muss man dafür Sorge tragen, dass sie auch aufgerufen werden.

Vorschlag:
Du könntest alle deine Klassen von einer gemeinsamen Basisklasse erben lassen. Alle Kinder können sich dann verketten. Dann reicht ein einziger Aufruf der Setup Methode, der Basisklasse, um alle Setups der Kinder aufzurufen.

Hier ein Dimmer, welcher ein vergleichbares Verfahren nutzt

Wenn du mehrere Funktionen haben möchtest, die alle setup heissen sollen, gibt es mehrere Möglichkeiten:

  • Klassen
  • Namespace
  • Umbenennen

Da du offensichtlich nicht gerne die Arduino-übliche Möglichkeit "Klassen" verwendest, nenne die unterschiedlichen setups doch passend.

xdevice.h

void setup_x(); // Deklaration

xdevice.cpp

#include "xdevice.h"
void setup_x() {
// ....
}

MyTest.ino

#include "xdevice.h"
void setup() {
  Serial.begin(9600);
  setup_x();
}
void loop() {}