Go Down

Topic: Mehrere Dateien in einem Projekt (Read 757 times) previous topic - next topic

BPlagens

Hallo zusammen.
Ich bin eigentlich SPS-Programmierer und Anfänger was Arduino angeht.
Mein aktuelles Problem ist, das mein Projekt so groß geworden ist, dass ich es in mehrere Dateien aufteilen möchte.
Ich habe mich durch alle Foren-Beiträge gelesen und auch http://arduinodilettante.wordpress.com/2011/03/10/multiple-file-sketches/ befolgt. Jedoch gelingt es mir nicht, auch nur ein Projekt fehlerfrei zu kompilieren wenn es aufgeteilt ist.

Ich habe zum Testen einfach mal das "Blink" Beispiel genommen.
Dann habe ich einen zweiten Tab ("Pins" genannt) erstellt. Dann habe ich die Pin Zuweisung ("int led = 13;") in den neuen Tab verschoben.
Wenn ich dann das ganze speichere (untern neuen Namen da ja schreibgeschützt) erhalte ich als Fehler immer "'led' was not declared in this scope" -> aber im Tab "Pins" ist es doch declariert!?

Nachdem ich gelesen habe, das die IDE das ganze wohl auch noch alphabetisch macht habe ich den Tab mal nach "aaa" umbenannt - gleiche Fehlermeldung.

Getestet habe ich das ganze mal Ver 1.0.4 und 1.5.2 immer gleicher Fehler.

Was muss ich tun, um ein Projekt in mehrere Dateien aufzuteilen?

Vielen Dank

uwefed

Soweit ich ich erinnere müssen Variablendefinitionen, include, setup und loop in einem Programmteil sein und die verschiedenen Funktionen können in anderen sein.
Grüße Uwe

mde110

Du kannst/solltest die Variable led prinzipiell nur in dem Tab verwenden, in dem sie deklariert wurde.
Praktisch kannst du sie in allen Tabs verwenden, die in der IDE rechts vom deklarierenden Tab sind ;)

Sauber ist das Vorgehen zwar nicht, aber ich machs genau so. Man muss halt nur aufpassen was man macht...

P.S.: Structs müssen immer in eine .h wenn du sie auch Tab übergreifend in Funktionsaufrufen verwenden willst.

BPlagens

Vielen Dank für eure Antworten.

In der Zwischenzeit habe ich weitere Experimente gemacht.
Ich habe jetzt meine "aaa.ino" in "aaa.h" umbenannt und nutze jetzt #include "aaa.h".

Wenn ich jetzt Funktionen auf einen anderen Tab "auslagere" muss allerdings der Name stimmen (im Alphabet vor dem "Main-Tab").

Schade das es nicht so wirklich klar aus der Doku hervorgeht was wann wie wo eingebunden wird.

Danke!

mde110

Das Verhalten mit den Funktionen kann ich nicht bestätigen. Ich nutzte Funktionen aus anderen Tabs im Main-Tab.
Kannst ja mal ein minal Beispiel zippen und uppen. Dann schaus ich mir an...

MaFu


Das Verhalten mit den Funktionen kann ich nicht bestätigen. Ich nutzte Funktionen aus anderen Tabs im Main-Tab.
Kannst ja mal ein minal Beispiel zippen und uppen. Dann schaus ich mir an...

Es geht ja nicht um Funktionen, sondern um Variablendefinitionen.
_______
Manfred

guntherb

die Arduino IDE "liest" die Tabs von links nach rechts, die Tabs wiederum sind alphabetisch geordnet, bis auf den ganz links, der hat den gleichen Namen wie das Projekt.
Wenn also im Verzeichnis [Mond] die Dateien  a_Mond.ino und b_mond.ino und  Mond.ino liegen, dann werden sie in genau dieser Reihenfolge auf den Tabs erscheinen:
/Mond\   /a_mond\   /b_Mond\

Wenn Variablen in einem Tab deklariert sind, dann sind sie in allen Tabs rechts davon bekannt.
Wo Funktionen stehen ist egal.
ich habe gerade eine Aufteilung wie die in meinem Projekt:
Tab1: Globale Variablen und defines
Tab2: Setup und Loop
Tab3, 4, 5: Funktionen.
Grüße
Gunther

michael_x

#7
Apr 29, 2013, 10:07 am Last Edit: Apr 29, 2013, 10:13 am by michael_x Reason: 1
In "richtigen" C Projekten ( wo einem nicht die Arduino IDE helfen will ) gibt es dafür include Dateien und das extern Schlüsselwort.

Wenn du eine globale Variable, die in einer anderen Datei definiert ist, benutzen willst, schreibst du

Code: [Select]
extern int fremdeVariable;  

Eine Funktionsdeklaration

Code: [Select]
int meineFunktion (int parameter); // Funktiondeklaration : mit Semikolon , ohne geschweifte Klammer

kann auch in jeder Datei stehen, die meineFunktion verwenden will.
Muss sogar ... In "richtigen" C Projekten ( wo einem nicht die Arduino IDE helfen will ) ...

mde110



Das Verhalten mit den Funktionen kann ich nicht bestätigen. Ich nutzte Funktionen aus anderen Tabs im Main-Tab.
Kannst ja mal ein minal Beispiel zippen und uppen. Dann schaus ich mir an...

Es geht ja nicht um Funktionen, sondern um Variablendefinitionen.

Vielen Dank für den Hinweis. Da hat er aber nach Funktionen gefragt:

...
Wenn ich jetzt Funktionen auf einen anderen Tab "auslagere" muss allerdings der Name stimmen (im Alphabet vor dem "Main-Tab").
...

Go Up