pinMode & digitalWrite außerhalb von Setup und Loop verwenden

Hallo miteinander,

so langsam komme ich mit meinen Motoren etwas zurecht, und mein Programm wird etwas unübersichtlich aus diesem Grund würde ich gerne etwas aufräumen, und habe mir ein neues Tab “Motor_Install.h” erstellt.

Das neue Tab rufe ich nicht im void Setup sonder wie eine LIB darüber auf.

Da ich jedoch auch die PIN Belegung dort mit hinein gepackt habe bekomme ich eine Fehlermeldung.

Motor_install.h:11: error: expected constructor, destructor, or type conversion before ‘(’ token
pinMode(ENA_A, OUTPUT); // setzt den Pin als Output (kommunikation zum Motor)

ich dachte das ich dort auch den Befehl pinMode wie auch digitalWrite verwenden kann.

Oder bedeutet der Fehler etwas anderes?

Hauptprogramm:

int  Baudrate = 9600;      // Geschwindigkeit, Serielle Schnittstelle
// int Steps     = 400*20;    // 400 Schritte entsprechen einer Umdrehung  
// int RPM       = 100;       // Drehzahl die gefahren werden soll. 

  #include <AccelStepper.h>   // Installieren der AccelStepper LIB 
  #include "Motor_install.h"  // Installieren der Motor Treibern & Pin's 
  #include "Befehle.h"        // Installieren der Befehle 
  #include "Funktion.h"       // Installieren der Funktionen
 
void setup()
{.....

TAB: Motor_install.h

...
   int   PUL_A   = 42;                    // PIN für Tackt am Motor 
   int   DIR_A   = 43;                    // HIGH = Im Uhrzeigersinn          // LOW = Gegen den Uhrzeigersinn
   int   ENA_A   = 44;                    // LOW = Motor ON, MIT Haltemoment  // HIGH = Motor OFF, KEIN Haltemoment
   long STEP_A   =  0;                    // Schritte die der Motor machen soll
   int   RPM_A   =  0;                    // RPM für den Motor  
   int   RPM_A_F = 6.7;                   // Faktor um Schritte pro Sekunde in RPM umzurechnen
   AccelStepper Achse_A(1, PUL_A, DIR_A); // (1, PUL, DIR)     Motoren Installiren 
   pinMode(ENA_A, OUTPUT);                // setzt den Pin als Output (kommunikation zum Motor)
   digitalWrite(ENA_A, LOW);              // Freigabe setzen -> Der motor hat ein Haltemoment!   
....

kann ich den Pin dort nicht definieren? oder muss ich denn auf eine andere Art uns weise Definieren?

Gruß Mücke

Grundsätzlich:
In *.h Dateien sollten sich keine Definitionen befinden.
Sondern nur Deklarationen.
Die Definitionen gehören in *.cpp Dateien.

Falls dir der Unterschied nicht klar ist, wäre es mal Zeit dass du dir ein C/C++ Buch unter das Kopfkissen legst.

Alternativ: (denn keine Regel, ohne eine mögliche Ausnahme)
~~ int PUL_A = 42;~~
static const byte PUL_A = 42;

Es macht übrigens überhaupt keinen Sinn, in eine *.h Datei sowas zu schreiben:

AccelStepper Achse_A(1, PUL_A, DIR_A); 

pinMode(ENA_A, OUTPUT);

Begründung:
pinMode() ist an anderer Stelle schon extern deklariert.
Da muss man sich nicht kümmern.

In der *.h die Deklaration

extern AccelStepper Achse_A;

In der zugehörigen *.cpp die Definition

AccelStepper Achse_A(1, PUL_A, DIR_A);

Das neue Tab rufe ich nicht im void Setup sonder wie eine LIB darüber auf

Ob du etwas in unterschiedlichen Tabs siehst oder nicht, ist erstmal egal. Da hilft dir übrigens auch kein "C für Dummies" - Buch unter dem Kopfkissen.

Du musst aber zwischen ausführbaren Anweisungen , die nur innerhalb von Funktionen vorkommen und Definitionen und Deklarationen unterscheiden.

Wobei die Arduino IDE manche Deklarationen für dich macht, damit du die Bücher nicht so leicht verstehst, es aber -- hoffentlich -- einfacher hast.

#include "irgendwas.h"  // erklärt nur, was Irgendwas genau ist. Zur besseren Übersicht und Wiederverwendbarkeit  in einer eigenen Datei.

Irgendwas meinObjekt; // Ein globales Objekt vom Typ Irgendwas wird hier definiert.

void setup() { 
  // hier stehen ausführbare Anweisungen 
  int i;  // eine lokale Variablendefinition
  i = 0; // eine ausführbare Anweisung (Wertzuweisung)
  pinMode(13, OUTPUT); // eine ausführbare Anweisung ( Aufruf einer Funktion )
  meinObjekt.init(i);  // eine ausführbare Anweisung ( Aufruf einer Methode eines Irgendwas-Objekts )
}

void loop() { 
   // hier stehen ausführbare Anweisungen

   meinObjekt.move(0);  

}

"C für Dummies" - Buch

Dann doch eher: Leseprobe

Muecke:
Das Forum Lebt von Rückmeldungen, wir helfen ALLE gerne wenn wir ein entsprechendes Feedback bekommen.

? ?

combie:
? ?

Ja ist ja gut, auch ich gebe ein Feedback, jedoch hast du auch viel Lesestoff mit rein gepackt.

Noch bin ich nicht durch, wobei ich da viel Bahnhof verstehe.

für mich ist in erster Linie ein Neues TAB eine andere Datei in die ich CODE hinein packen kann.

Das mit dem Deklarieren etc. und den verschiedenen Datei Endungen habe ich schon mal gelesen, wobei das schon lange her ist, und ich das nie angewendet habe ;-(

ich wollte einfach ein bissen Platz schaffen im Hauptprogramm, und ein Paar Sachen zusammen führen, die in meinem Fall zusammen gehören.
z.B. alle Pinbelegung von einem Motor + die Installierung des Motors, die muss ja nur ein mal vorgenommen werden für das gesamte Hauptprogramm.

Das ich wenn ich das aus den LOOP / SETUP jedoch raus nehme anders machen muss, war mich vorher nicht klar, und da muss ich mich jetzt einlesen ;.( auch wenn das der teil ist der so gar keinen Spaß macht.

Jedoch will ich jetzt auch nicht mit Fragen kommen die dank des Lesestoffes auch für mich sofort beantwortet sind, denn dann bekomme ich irgend wann keine Hilfe mehr, und das will ich vermeiden, daher sorry das es so lange dauert bis ich Feedback gebe.

Gruß Mücke

ps. ich hoffe das ich niemanden gekränkt habe im anderen Thema, den das war nicht meine Absicht!

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

Du musst aufhören jede Anweisung einfach nur als "Befehl" zu sehen der irgendwo stehen kann. So funktioniert C/C++ nicht. Es gibt auch Dinge die ähnlich aussehen aber was ganz anderes sind und daher anderen Regeln folgen

combie:
Grundsätzlich:
In *.h Dateien sollten sich keine Definitionen befinden.
Sondern nur Deklarationen.

Die Definitionen gehören in *.cpp Dateien.

OK das ist mir soweit klar.
Jedoch muss ich ehrlich gestehen das ich mich um die Deklarationen bisher nicht gekümmert habe, das hat ja alles die IDE für mich beim Koppeliren übernommen. * ich Schäme mich in der ecke, alleine dafür*

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?

Was ich dann auch gar nicht verstehe ist die aussage von @combie

combie:
Es macht übrigens überhaupt keinen Sinn, in eine *.h Datei sowas zu schreiben:

AccelStepper Achse_A(1, PUL_A, DIR_A);
pinMode(ENA_A, OUTPUT);

Begründung:
pinMode() ist an anderer Stelle schon extern deklariert.
Da muss man sich nicht kümmern.

Ich wollte das nicht Deklarieren, sondern den Ausgang des Pins ENA_A auf OUTPUT stellen.
Ich bekomme da im Übrigen auch in der CPP Datei die selbe Fehlermeldung ;-(.

Gruß Mücke

Serenifly:

Du musst aufhören jede Anweisung einfach nur als “Befehl” zu sehen der irgendwo stehen kann. So funktioniert C/C++ nicht. Es gibt auch Dinge die ähnlich aussehen aber was ganz anderes sind und daher anderen Regeln folgen

Da komme ich gerade nicht ganz mit ;-(.

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 :-).

Das die Befehle die ich nutze irgend wo wider eine Kleine Funktion oder auch eine Größere Funktion sind das ist mir bekannt.

Ich kenne jedoch nicht alle regeln der einzelnen Befehle, und wie die regeln sich verändern wenn man sie Kombiniert.

Ich wollte das nicht Deklarieren, sondern den Ausgang des Pins ENA_A auf OUTPUT stellen.
Ich bekomme da im Übrigen auch in der CPP Datei die selbe Fehlermeldung ;-(.

Wenn das deine Absicht war, den Pin zu setzen, dann hast du dir dafür den falschen Ort gesucht.

Beweis, ein solchen Pogramm kompiliert auch nicht:

pinMode(42, OUTPUT);

void setup()
{
  
}

void loop()
{
  
}

Gundregel:
Funktionen werden in Funktionen aufgerufen.
Ausnahme:

  1. main()
  2. ISR
  3. Konstruktoren und Destruktoren

Da ist was mit deinem Zitat schief gegangen, :wink:

genau das war mein Problem, daher habe ich auch den Titel

Re: pinMode & digitalWrite außerhalb von Setup und Loop verwenden

verendet.

Ich habe alle Pins und die Motoren (die über eine LIB) installiert.
Die Pins für die Motortreiber jedoch werden nicht von der LIB unterstützt und muss ich separat setzen (IN / OUT) und auch den Zustand muss ich selber setzen.

Da die LIB auch Pins für die Motoren setzt dachte ich mir das ich auch die Motortreiber Freigabe (ENA_..) mit an die Stelle setzen kann, doch Befehl (Objekt oder was das auch immer ist) pinMode funktioniert nur im setup/loop wenn ich denn auserhalb davon stehen habe bekomme ich immer ein Fehlermeldung.

Daher die Frage:

kann ich den Pin dort nicht definieren? oder muss ich denn auf eine andere Art uns weise Definieren?

Wie ich gemerkt habe geht das nicht außerhalb, ich verstehe nur nicht warum.

Bei Variablen
int A = 10;

habe ich das so verstanden wenn ich das in einer von mir geschriebenen Funktion Deklariere (int A = 10;) dann ist diese auch nur in der von mir geschriebenen Funktion vorhanden, außerhalb kennt das Programm die Variable nicht, wenn ich das im LOOP mache dann können alle die im Loop stehen darauf zugreifen.

Wenn ich das außerhalb vom Loop mache dann können alle teile meines Codes darauf zugreifen.

Ich habe gehofft das ich auch pinMode und digitalWrite außerhalb aufrufen kann, was nicht der Fall ist.
Da ich dazu nichts im Netz gefunden habe, dachte ich frage ob man das nicht auch anders machen kann, Vielleicht gibt es einen anderen Befehl mit den man das machen kann.

Doch dann Kamm das ich die Falsche Änderung von Dateien verwenden würde, und ich wollte das nicht unbeachtet lassen, vielleicht hat es ja was damit zu tun.

Sonst nenne ich die ab sofort *.Muecke wenn man DIE IDE so viel zeichne zulässt :wink: Spaß

Gruß Mücke

Muecke:
Das ich hier in Objekten denken muss das wies ich

Objekte sind nur ein kleiner Aspekt davon. Das kannst du auch erst mal ignorieren.
Der Unterschied zwischen Deklaration und Definition ist erst mal ganz grundlegend. Aber es gibt z.B. auch Unterschiede zwischen Schlüsselwörtern, Operanden und Funktionen

für mich ist ein Objekt z.B. ein Kaffeebecher oder ein Haus :-).

Auch in der Programmierung können das Objekte sein :slight_smile:

Ich kenne jedoch nicht alle regeln der einzelnen Befehle, und wie die regeln sich verändern wenn man sie Kombiniert.

Mein Punkt ist dass verschiedene Dinge jeweils anderen Regeln folgen. z.B. für eine Variable gelten andere Regeln als für einen Operanden und andere Regeln aus für eine Funktion. Wenn du das alles als "Befehl" vereinheitlichst geht das verloren.
Ich habe hier auch schon Leute gesehen die einen Datentyp als Befehl bezeichnet haben. Es mag kleinlich erscheinen hier auf korrekten Bezeichnungen zu beharren, aber es spielt eine wichtige Rolle für das Verständnis der Sprache

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)

Kannst es auch so sehen, @Mücke: alles was du machst sind Deklarationen und Definitionen.

Die Arduino-IDE definiert das drumherum so, dass es erforderlich ist, mindestens die zwei Funktionen void setup() und void loop() zu definieren.

Ausserhalb dieser Funktionen kannst du andere Sachen definieren und deklarieren:
Konstante, Datentypen, Variable und andere Funktionen.

Ausführbare Anweisungen wie z.B. Aufrufe von Funktionen haben ausserhalb von Funktionen nichts zu suchen und machen dort auch keinen Sinn.

pinMode(42,OUTPUT); ist ein Funktionsaufruf, der üblicherweise innerhalb von setup() ausgeführt wird.

OK, dann habe ich das verstanden pinMode() ist kein Befehl sondern eine Funktion, damit eine Funktion aufrufbar ist muss ich im LOOP() oder SERTU() mich befinden.

Auch auf die Gefahr hin das ich das gleich nicht verstehen werde, wie kann eine LIB einen PIN Definieren als Ausgang oder Eingang wenn diese vor LOOP und SETUP aufgerufen wird?

Was ich jetzt aus dieser Diskussion mit genommen habe ist das ich lernen muss wie ich richtig Deklariere denn dann kann ich auch Dinge auslagern.

Gruß Mücke

ist kein Befehl sondern eine Funktion,

Was ist ist ein Befehl?
Das hast du dir doch nur ausgedacht.

, damit eine Funktion aufrufbar ist muss ich im LOOP() oder SERTU() mich befinden.

Du kannst dich also in Funktionen aufhalten?
:o :o :o :o :o
lopp() und setup() gibts übrigens nicht in jedem C++ Programm.

Auch auf die Gefahr hin das ich das gleich nicht verstehen werde, wie kann eine LIB einen PIN Definieren als Ausgang oder Eingang wenn diese vor LOOP und SETUP aufgerufen wird?

Gar nicht.
Auf AVRs mag das noch im Konstruktor gehen.
Aber bei andere Architekturen ist dann noch nicht Gewährleistet, dass die Bedeutung der Pins schon konfiguriert wurde, bzw, die Peripherie noch gar nicht bereit ist konfiguriert zu werden.
Also sollte man sich das tunlichst einsparen.

Und wie man Libs aufrufen kann, sollte auch mal geklärt werden.
Denn mir ist das nicht klar.

Was ich jetzt aus dieser Diskussion mit genommen habe ist das ich lernen muss wie ich richtig Deklariere denn dann kann ich auch Dinge auslagern.

Ja, du solltest die Sprache lernen, welche du verwendest.
Ja, DAS solltest du tun.
Ja, das ist eine gute Idee!

combie:
Was ist ist ein Befehl?
Das hast du dir doch nur ausgedacht.

Öm, ne, nicht wirklich.

Zitat: wikipedia.de: Anweisung (Programmierung)

In der maschinennahen Programmierung werden Anweisungen häufig auch als Befehl,[2] Instruktion (aus englisch instruction)[3] oder Kommando (aus englisch command)[4] bezeichnet.

Ich habe als Kind, QBasic Programmiert, und ich bin mir sicher das man dort von Befehlen gesprochen hat.

combie:
Du kannst dich also in Funktionen aufhalten?
:o :o :o :o :o
lopp() und setup() gibts übrigens nicht in jedem C++ Programm.

Wie du nicht? leben wir nicht alle in einer Rissen Matrix ;-). Spaß
ich meinte damit im Code, sprich wenn die die ziele abgearbeitet wird, sollte diese sich in einer Funktion befinden :wink:
Da ich kein C kann, wies ich das nicht, aber gut zu wissen das es da kein lopp() und setup() gibt.
ich wüsste noch noichzt mal ohne nachzuschauen wie ich am PC ein C Programm Programmiren könnte. (müssen wir aber auch nicht Diskutieren ;-))

combie:

Auch auf die Gefahr hin das ich das gleich nicht verstehen werde, wie kann eine LIB einen PIN Definieren als Ausgang oder Eingang wenn diese vor LOOP und SETUP aufgerufen wird?

Gar nicht.
Auf AVRs mag das noch im Konstruktor gehen.
Aber bei andere Architekturen ist dann noch nicht Gewährleistet, dass die Bedeutung der Pins schon konfiguriert wurde, bzw, die Peripherie noch gar nicht bereit ist konfiguriert zu werden.
Also sollte man sich das tunlichst einsparen.

Das verstehe ich jetzt nicht.
Normalwegweise geht das nicht?
auf dem AVR Sprich Arduino jedoch schon? (ausnahmsweise) ?

Beispiel:

#include <AccelStepper.h>    // Installiren der AccelStepper LIB 

int   PUL_Z            = 45;           // PIN für Tackt am Motor 
int   DIR_Z            = 46;           // HIGH = Im Uhrzeigersinn          // LOW = Gegen den Uhrzeigersinn
AccelStepper Achse_Z(1, PUL_Z, DIR_Z); // (1, PUL, DIR)     Motoren Installiren 
void setup()
{
...

Wie hier zusehen ist, wird über die LIB mit dem Befehl AccelStepper der Name des Motors “Achse_Z” übergeben und die dazu gehörigen Pins, die dann auch als Ausgang definiert werden.
Ich gehe davon aus das das keine Funktion ist, denn die Könnte ich ja außerhalb vom setup und Loop nicht aufrufen!

Irgend wie schafft es die LIB die Pins doch zu definieren, Ohne das sie im Setup von mir aufgerufen wird.

combie:
Und wie man Libs aufrufen kann, sollte auch mal geklärt werden.
Denn mir ist das nicht klar.

Indem ich ganz oben im Programm schreibe:
#include

So wird eine LIB aus dem LIB Ordner eingebunden.

#include <“Name der LIB”>

mit " ist die LIB im Skech Ordner vorhanden und nicht in Arduino LIB Ordner !

combie:

Was ich jetzt aus dieser Diskussion mit genommen habe ist das ich lernen muss wie ich richtig Deklariere denn dann kann ich auch Dinge auslagern.

Ja, du solltest die Sprache lernen, welche du verwendest.
Ja, DAS solltest du tun.
Ja, das ist eine gute Idee!

Juhu, ich lag nicht daneben :wink:

Gruß Mücke

Muecke:
Ich habe als Kind, QBasic Programmiert, und ich bin mir sicher das man dort von Befehlen gesprochen hat.

Basic, ja. Oder auch Assembler wenn du von maschinennaher Programmierung redest. Das ist das korrekt. Aber C/C++ ist da wesentlich komplizierter

auf dem AVR Sprich Arduino jedoch schon? (ausnahmsweise) ?

An der Stelle ist noch nicht garantiert was mit anderen Ressourcen los ist. Unter anderem deshalb gibt es oft Methoden wie begin() oder init() damit genauere zeitliche Kontrolle über die Initialisierung hat

Wie hier zusehen ist, wird über die LIB mit dem Befehl AccelStepper der Name des Motors "Achse_Z" übergeben und die dazu gehörigen Pins, die dann auch als Ausgang definiert werden.

Und schon wieder ein Befehl. Hier wird ein Objekt erstellt und dabei automatisch der Konstruktor der Klasse aufgerufen. Der Konstruktor ist eine spezielle Methode ohne Rückgabewert und mit dem gleichen Namen wie die Klasse. Er wird aufgerufen noch bevor die Variablen des Objekts initialisiert wurden. Dadurch kann man sogar Konstanten über ihn initialisieren wenn man es richtig macht. Oder z.B. andere Klassen die in der Klasse verwendet werden

Wie gesagt, bei Arduinos geht das i.d.R. Vor allem, wenn man nur Pins verwendet. Die funktionieren auch immer.
Combie hat das hier komplizierter gemacht als nötig und dich nur weiter verwirrt :slight_smile:

in der maschinennahen Programmierung werden Anweisungen häufig auch als Befehl,[2] Instruktion (aus englisch instruction)[3] oder Kommando (aus englisch command)[4] bezeichnet.

Aha, ja…

Hmm…

Wikipedia nennt aber den richtigen deutschen Bezeichner: Anweisung.
Ich würde dich bitten die richtigen Begriffe zu verwenden.

Denn es gibt einige Anweisungen, welche man nicht als Befehl erkennen würde.
Zumindest würde ich die Verbundanweisung nicht als Befehl ansehen.

Ich gehe davon aus das das keine Funktion ist, denn die Könnte ich ja außerhalb vom setup und Loop nicht aufrufen!

Auch hier verwendest du den Begriff Funktion nicht richtig.

Es wird der Konstuktor aufgerufen.
Ja, dieser ist eine Funktion (aber auch nur in einem sehr weit gefasstem Rahmen).
Da sie aber nur im Kontext einer Klasse/Objekt existiert, ist der richtige Bezeichner: Methode
Etwas weniger verbreitet ist der Begriff: Anweisung, oder Operation (nicht Operator)

Indem ich ganz oben im Programm schreibe:
#include

So wird eine LIB aus dem LIB Ordner eingebunden.

Richtig!
“Eingebunden” ist das richtige Wort.
Nicht “aufgerufen”!
So verstehe ich dich auch.

Wie hier zusehen ist, wird über die LIB mit dem Befehl AccelStepper der Name des Motors “Achse_Z” übergeben und die dazu gehörigen Pins, die dann auch als Ausgang definiert werden.

Ja, die Parameter werden übergeben.
Aber das heißt nicht, dass gleichzeitig die Pins auch als Ausgang definiert werden.

Irgend wie schafft es die LIB die Pins doch zu definieren, Ohne das sie im Setup von mir aufgerufen wird.

Ja, das tut sie allerdings wirklich!
Im Konstruktor wird die Methode enableOutputs() aufgerufen.
Und diese macht pinMode().
Unglücklich gelöst!!
Führt auf anderen µC u.U. zu Problemen.
Sollte man so nicht tun.

Besser ist es, so wie es Wire macht.
Denn da gibts ein Wire.begin(); im Setup
Auch serial tut es so.

Andere Klassen möchten gerne ein NameDerKlasse.init() in setup().

Da ich kein C kann, wies ich das nicht, aber gut zu wissen das es da kein lopp() und setup() gibt.

loop() und setup() gibt es nur in der Arduino Welt.
Nicht in der üblichen C++ Welt.
Selbst in deinen Arduino Programmen kannst du auf loop() und setup() vollständig verzichten.

Oh man, wie ich schon gesagt habe, mit der Gefahr hin das ich das nicht ganz verstehen werde.

Ich muss ehrlich gestehen das ich gerade nicht so richtig wies wo Oben und unten ist.

! Was sich mir gemerkt habe, ist, es gibt keinen Befehl nur Funktionen. !
! Funktionen können nur in Funktionen aufgerufen werden, mit einer Ausnahme wenn es Loop oder Setup ist. !
was mit C / C++ ist, bin ich ganz ehrlich ist mir egal, das programmiere ich nicht am PC, ich habe hier ein Arduino und nicht einen Vollständigen PC vor mir, ich will keine Neuen Sprachen Lernen nur des Lernwillens, denn sonst würde ich Mandarin Lernen.

Ich bitte Entschuldigung wenn ich immer wider die Falschen begreife verwende, ich mache das rein Hobby massig, und habe im Berufsleben damit 0,00% Berührungspunkte.

Was ich auch noch mit genommen habe, es gibt wohl Ableger von Funktionen Methode, Konstruktor und sondergleichen damit kann man auch einiges machen, unter anderem einen Pin als Ausgang oder Eingang Definieren, ich wies nicht wie, und lasse daher die Finger davon.

Gruß Mücke