Pages: [1]   Go Down
Author Topic: Mehrere Dateien in einem Projekt  (Read 723 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 270
Posts: 21853
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany, BW
Offline Offline
Sr. Member
****
Karma: 7
Posts: 311
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Germany, BW
Offline Offline
Sr. Member
****
Karma: 7
Posts: 311
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

_______
Manfred

Offline Offline
Edison Member
*
Karma: 39
Posts: 1174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Grüße
Gunther

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
extern int fremdeVariable;  

Eine Funktionsdeklaration

Code:
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 ) ...
« Last Edit: April 29, 2013, 03:13:45 am by michael_x » Logged

Germany, BW
Offline Offline
Sr. Member
****
Karma: 7
Posts: 311
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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").
...
Logged

Pages: [1]   Go Up
Jump to: