Forum: Mikrocontroller und Digitale Elektronik Arduino Projekt mit Headern? Geht das überhaupt?


von Christian J. (Gast)


Angehängte Dateien:

Lesenswert?

Moin,

ich möchte den Seeeduino XIAO verwenden, der einen SAMD21G18A in sich 
trägt und von der Ardu IDE unterstützt wird. Stromzufuhr und Debug Port 
laufen über den USB Stecker, der ohne FTDI auskommt und kein virtueller 
COM Port ist.
SWD ist leider nicht rausgeführt, sonst könnte ich zb Embitz verwenden. 
Aber J-Link steht auch nicht als Debugger drin im Manual, Atmel hat da 
wohl was anderes als ST.

Problem: Die Arduino "Projektverwaltung" ist nicht so meines. Ich muss 
aber die IDE verwenden, da sie halt das Framework für diese CDU bildet. 
Und da sind halt nur .ino Dateien drin im Verzeichnis. Die vielen 
Features die dieser Chip hat sind sowieso nicht erreichbar über 
"Arduino". Nicht mal der Clock lässt sich variieren.

Ein gescheites Programm mit 5-6 Files besteht aber aus Headern und Code 
Dateien, weil zwischen den Modulen ja Daten ausgetauscht werden müssen.

Kriegt man das irgendwie hin? Erzeuge ich eine main.h und versuche die 
einzubinden, egal ob mit "" oder mit den eckigen Klammern wird die nicht 
gefunden.^

Gilt übrigens alles auch für den ESP8266. Wen es möglich wäre den ganzen 
WLAN Kram da raus zu halten, der jedes Projekt mit 350kb aufbläst würde 
ich den 8266 öfter verwenden. Aber Arduino will das so...

von Stefan F. (Gast)


Lesenswert?

Du kannst in Arduino Projekten (*.ino) ganz normal header und weitere 
*.cpp Dateien einfügen und benutzen.

Aber die "main" Datei wird vom Framework erzeugt, da solltest du die 
Finger von lassen.

Da hast du ein kleines Beispielprojekt: 
http://stefanfrings.de/arduino_oled/index.html

von Christian J. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Aber die "main" Datei wird vom Framework erzeugt, da solltest du die
> Finger von lassen.

Oha... und da wundert man sich :-(

"Textausgabe mit 6x8 Pixel Zeichensatz, incl. deutscher Umlaute"

Das klingt ja prima.... gucken ob ich das in Embitz portiert kriege 
(Code sieht sehr gut aufgeräumt aus). Der Flaschenhals ist ja I2C bei 
den Dingern. Mit 400khz laufen die bei mir nicht richtig, hängen sich 
oft auf.

von Stefan F. (Gast)


Lesenswert?

Christian J. schrieb:
> Mit 400khz laufen die bei mir
> nicht richtig, hängen sich oft auf.

Ich habe ca. 500kHz als Maximum herausgefunden, aber ohne 
Langzeit-Erfahrung. Angeblich gibt es diese Display von 
unterschiedlichen Herstellern mit unterschiedlichen Eigenschaften.

von Christian J. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich habe ca. 500kHz als Maximum herausgefunden, aber ohne
> Langzeit-Erfahrung.

Die habe ich... LED Wetterstation mit ESP8266 und OLED1306... alle 1-2 
Tage stand es. Aktuell auf 100khz läuft es seit gut 6 Monaten ohne ein 
einziges Mal zu hängen.

Zu den Headern: Du kannst also zu jeder ino Datei (außer main) einen 
Header erzeugen? Und den einbinden in andere .ino 's.

von Chris J. (Gast)


Lesenswert?

PS: Kann man den wlan Overhead vom 8266 oder esp32 irgendwie 
ausklammern? Ich moechte nur die CPU verwenden ohne den wlan Klamauk.

von Bernhard (Gast)


Lesenswert?

Als Alternative zur Arduino IDE kann ich 
https://github.com/arduino/arduino-cli empfehlen. Zusammen mit einem 
kleinen Makefile ist das mMn wesentlich komfortabler als die Arduino IDE 
(die einige Limitierungen und Einschränkungen hat, da deren Zielgruppe 
halt hauptsächlich Einsteiger/Neulinge sind).

von Christian J. (Gast)


Lesenswert?

Bernhard schrieb:
> Als Alternative zur Arduino IDE kann ich
> https://github.com/arduino/arduino-cli empfehlen.

Läuft nur unter Linux. Und das habe ich vor 1/2 Jahr runter geworfen 
(Slackware), da viel zu wenig verwendet. Schade....

von jemand (Gast)


Lesenswert?

Christian J. schrieb:
> Bernhard schrieb:
>
>> Als Alternative zur Arduino IDE kann ich
>> https://github.com/arduino/arduino-cli empfehlen.
>
> Läuft nur unter Linux. Und das habe ich vor 1/2 Jahr runter geworfen
> (Slackware), da viel zu wenig verwendet. Schade....

Anscheinend nein.
https://arduino.github.io/arduino-cli/latest/installation/#latest-packages

von jemand (Gast)


Lesenswert?

Christian J. schrieb:
> SWD ist leider nicht rausgeführt,

Anscheinend doch, nur als Pads auf der Unterseite.
https://wiki.seeedstudio.com/Seeeduino-XIAO/#hardware-overview

von Bernhard (Gast)


Lesenswert?

jemand schrieb:
> Christian J. schrieb:
>> Bernhard schrieb:
>>
>>> Als Alternative zur Arduino IDE kann ich
>>> https://github.com/arduino/arduino-cli empfehlen.
>>
>> Läuft nur unter Linux. Und das habe ich vor 1/2 Jahr runter geworfen
>> (Slackware), da viel zu wenig verwendet. Schade....
>
> Anscheinend nein.
> https://arduino.github.io/arduino-cli/latest/installation/#latest-packages

Jep, das sollte eigentlich auch unter Windows laufen. Siehe auch: 
https://www.youtube.com/watch?v=1jMWsFER-Bc (das Video ist aber echt 
nicht sehr spannend, da die Installation eigentlich ziemlich straight 
forward ist).

von Veit D. (devil-elec)


Lesenswert?

Hallo Christian,

vielleicht zum besseren Verständnis. Deine .ino Datei mit Projektnamen 
kannste dir vorstellen als wenn das deine übliche main.c / main.cpp 
Datei ist. Das wird alles versteckt in 
https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/main.cpp

Du siehst in der .ino statt das Übliche
1
#include ...
2
3
int main(void)
4
{    
5
    while(1)
6
    {
7
    }
8
}

eben
1
#include ...
2
3
void setup()   // entspricht main(void)
4
{  
5
}
6
7
void loop()   // entspricht while(1)
8
{
9
}

Womit im Hintergrund Standard Libs wie Serial automatisch eingebunden 
werden mittels Arduino.h was allgegenwärtig ist. Du kannst deine 
weiteren/eigenen Libs ganz normal im Schema .h/.cpp schreiben und ganz 
normal in der Projekt .ino inkludieren. Außer man legt in der IDE 
weitere Tabs an die weitere .ino Dateien erstellen womit man Code 
auslagern kann. Würde ich dir aber nicht empfehlen. Die Üblichen .h/.cpp 
ist der sauberste Weg von allen.

Nochwas. Du kannst natürlich in der Projekt .ino die setup und loop 
Funktion komplett löschen und das Übliche schreiben.
1
#include ...
2
3
int main(void)
4
{    
5
    while(1)
6
    {
7
    }
8
}

Dann hat man in der Arduino IDE nichts mehr von Arduino. Je nachdem was 
man möchte.

: Bearbeitet durch User
von Michael D. (nospam2000)


Lesenswert?

Christian J. schrieb:

Die Arduino IDE kann auch mit *.cpp und *.h Dateien im Projekt arbeiten, 
einfach eine neue Datei anlegen. Du musst nur all Header welche du in 
diesen Extra cpp Dateien verwendest explizit mit #include <header.h> 
referenzieren (z.B. die "Arduino.h").

> Problem: Die Arduino "Projektverwaltung" ist nicht so meines. Ich muss
> aber die IDE verwenden, da sie halt das Framework für diese CDU bildet.

Das stimmt nicht! Sieh dir mal Visual Studio Code zusammen mit 
PlatformIO an. Damit kannst du dieselben Libraries verwenden und wenn du 
möchtest kann du deinen Haupt-Sourcefile weiterhin "*.ino" nennen um es 
weiterhin in der Arduino IDE bearbeiten zu können, ich würde aber 
empfehlen alles in "*.cpp" Dateien zu verwenden, damit die anderen 
Plugins die Datei als cpp Datei erkennen.

Langfristig hast du da viel mehr Spass damit und mit Intellisense und 
direkter git Anbindung und tausenden von Plugins ist Visual Studio Code 
der Arduino IDE haushoch überlegen.

  Michael

von Christian J. (Gast)


Lesenswert?

Michael D. schrieb:
> Das stimmt nicht! Sieh dir mal Visual Studio Code zusammen mit
> PlatformIO an.

Läuft unter Windows 7 leider nicht :-((((( Python ist nicht 
installierbar. Und für W10 fehlt mir absolut der Nerv meine gefühlt 1000 
Einstellungen neu zu machen.

VSC erzeugt auch mal eben 89.000 Dateien im User Verzeichnis, die nicht 
mit deinstalliert werden....

von c-hater (Gast)


Lesenswert?

Christian J. schrieb:

> Läuft unter Windows 7 leider nicht :-((((( Python ist nicht
> installierbar.

Unsinn. Natürlich kann man Python auch auf Windows7 installieren.

> VSC erzeugt auch mal eben 89.000 Dateien im User Verzeichnis, die nicht
> mit deinstalliert werden....

So what? Man will es ja nicht deinstallieren. Und wenn doch, löscht man 
die entsprechenden Verzeichnisse halt manuell. Sind ja nur zwei.

von Michael D. (nospam2000)


Lesenswert?

Christian J. schrieb:
> Läuft unter Windows 7 leider nicht :-((((( Python ist nicht
> installierbar. Und für W10 fehlt mir absolut der Nerv meine gefühlt 1000
> Einstellungen neu zu machen.

Einstellungen sind bei Visual Studio Code in Dateien abgelegt und 
entweder Bestandteil des Projektes oder und global. Einfacher konnte man 
Einstellungen noch nie auf einen anderen Rechner übertragen.

> VSC erzeugt auch mal eben 89.000 Dateien im User Verzeichnis, die nicht
> mit deinstalliert werden....

Nimm die Arduino IDE und werde damit glücklich. Genau für solche Leute 
wie dich wurde sie gemacht. Aber hör dann bitte auf zu jammern.

  Michael

von Stefan F. (Gast)


Lesenswert?

Christian J. schrieb:
> Du kannst also zu jeder ino Datei (außer main) einen
> Header erzeugen?

Ich habe sie *.cpp und *.h genannt. Das war für mich naheliegend, und 
weil das direkt klappte, habe ich da nicht weiter nach geforscht.

Chris J. schrieb:
> Kann man den wlan Overhead vom 8266 oder esp32 irgendwie
> ausklammern?

Du kannst die WLAN Schnittstelle abschalten, aber die 250kB Code 
schleppst du immer mit, weil darin da ganze Betriebssystem des Chips 
steckt. Bare-Metal Programmierung ist vermutlich nicht mit Arduino 
möglich.

Ich würde empfehlen, hier nicht parallel über die IDE zu diskutieren. 
Die Frage des TO dreht sich primär um das Arduino Framework. Die 
"Problematik" betrifft jede IDE, deswegen ist ein Wechsel der IDE jetzt 
gerade kontraproduktiv, wenngleich ich das langfristig auch empfehlen 
würde. Du hast das auf meiner Homepage vermutlich schon gesehen.

von Christian J. (Gast)


Lesenswert?

Bernhard schrieb:
> Jep, das sollte eigentlich auch unter Windows laufen. Siehe auch:
> https://www.youtube.com/watch?v=1jMWsFER-Bc (das Video ist aber echt
> nicht sehr spannend, da die Installation eigentlich ziemlich straight
> forward ist).

Hab es drauf, klappt prima. mehr als das Kompilieren und der Upload 
müssen ja nicht funktionieren. Für alles andere gibt es bessere 
Alternativen. Ich entwickle grad Arduino auf Embitz 1.1 Projektmanager 
bzw. Editor, da das Parsen des Projektes immer funktioniert, egal welche 
CPU dahinter steckt. Im cmd Fenster nur compile eintippen bzw Pfeil-Oben 
und fertig. Und da Embitz mein absoluter Liebling ist bleibt das auch 
erstmal so.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.