pinMode & digitalWrite außerhalb von Setup und Loop verwenden

Ja, dass die IDE einem allerhand abnimmt und viele Deklarationen automatisch erzeugt ist zwar praktisch, macht das Verständnis, wie es in C/C++ 'eigentlich' funktioniert aber nicht einfacher.

Serenifly:
Jedes Tab ist eine .ino Datei. Die werden vor dem Compilieren lediglich in alphabetischer Reihenfolge in eine .cpp Datei kopiert und diese wird compiliert. Damit gelten die gleichen Einschränkungen wie für normale .cpp Dateien

Das ist so nicht ganz richtig. Jede Datei im Sketch-Verzeichnis ist ein Tab. Was es für eine Datei ist, bestimmt immer noch die Dateiendung. Gibt es mehrere .ino-Dateien, dann werden die in der Tat vor dem Kompilieren zusammengehängt und dann als Ganzes bearbeitet. Die Einschränkungen einer .cpp-Datei gelten da aber nicht komplett, da die IDE noch #includes einfügt und gegebenenfalls Deklarationen erzeugt (s.o.)
Jede .h, .c oder .cpp-Datei im Sketchverzeichnis (oder einem Unterverzeichnis) wird dann aber wirklich wie eine 'standard' .h oder C/C++ Datei behandelt - mit allen Konsequenzen. Da ändert die IDE nichts dran.

Muecke:
Das ich hier in Objekten denken muss das wies ich, auch wenn ich mit dem Wort Objekt nicht so viel anfangen kann, für mich ist ein Objekt z.B. ein Kaffeebecher oder ein Haus :-).

Objekte gibt es auch nur in C++. Standard C kennt keine Objekte. Allerdings sind die Grenzen fliessend, da C++ alles von standard C auch beinhaltet.
Solange Du dich noch nicht wirklich weist, was ein 'Objekt' in C++ ist, kannst Du auch noch nicht in Objekten denken :wink:

Muecke:
Das mit dem richtigen Deklarationen, muss ich dann noch etwas lernen.
Frage? wenn ich eine CPP Datei habe muss ich dann die Sachen Deklarationen oder würde das die IDE in den Fall zu Not auch noch für mich übernehmen?

Wenn ich das jedoch richtig verstanden habe durch das Deklarieren von z.B. einer Funktion kann ich die Funktion auch nach dem Aufruf der Funktion stehen habe, da die IDE wies das es die Funktion gibt, und somit damit arbeiten kann?

Wie oben geschrieben, macht die IDE in reinen .c oder .cpp Dateien gar nichts, da musst Du dich selbst drum kümmern. Im Prinzip hast Du das schon richtig verstanden: Eine Deklaration ist ein Hinweis an den Compiler. Ihm wird damit bekannt gemacht, wie eine Name, den Du einführst zukünftig genutzt werden soll. Ob das z.B. eine byte oder int Variable sein soll. Oder eben auch eine Funktion. Und bei einer Funktion muss der Compiler auch wissen, wie die aufgerufen werden muss, wenn sie im Code dann zum ersten Mal auftaucht. Z.B. ob sie einen Wert zurückgibt, und welche Parameter übergeben werden müssen.
Bei einer reinen Deklaration entsteht weder Code, noch wird im Speicher Platz reserviert - es ist nur Information für den Compiler.

Erst bei einer Definition passiert wirklich etwas: Es wird Code generiert oder Speicherplatz reserviert.
Eine Definition kann auch implizit als Deklaration dienen: Wenn Du eine Funktion vor dem ersten Aufruf in der Datei definierst, ist das für den Compiler natürlich auch eine Deklaration, denn dann weis er wie sie aufzurufen ist. Das gleiche gilt, wenn Du am Anfang der Datei Variablen definierst - die sind dann damit auch deklariert.
Befehle, die Code generieren dürfen nur innerhalb von Funktionen verwendet werden.

Ist zwar jetzt etwas knapp und nicht in allen Details erklärt, aber vielleicht hilft es ein wenig 8)