Verständnisfrage zum Thema *.pde / *.cpp / *.h

Hallo zusammen,

ich frage hier einfach mal mit der Bitte um einen freundlichen Verweis auf eine Quelle.

Mir ist zur Zeit der Zusammenhang der Dateien mit den o.g. Dateiendungen überhaupt nicht klar.

Am Beispiel des "Hello.World" Beispiels ist mir dies bewußt geworden.
Ich hatte die LiquidCrystal-Library aufgrund eines Fehlers geändert.
(ein Fehler, der in meinem Versuchsaufbau mit einem TC1604A-01 LCD-Modul beim Anssprechen der 3. und 4. Reihe sichtbar wurde, nicht zwangsläufig ein grundsätzlicher Fehler!).

Diese besagte originale Library (LiquidCrystal.cpp) liegt bei meinem Linux unter /usr/share/Arduino/libraries/LiquidCrystal.

Für meine Zwecke habe ich eine Kopie dieser Datei und auch die zugehörige Header-Datei in einen Ordner in meinem Sketchkook kopiert, in dem auch mein eigenes Beispiel-Sketch "HalloWelt" liegt.
In meinem "HalloWelt" beschreibe ich die 3. und 4. Zeile meines 16x4 Displays und dafür habe ich die "LiquidCrystal.cpp" in der entscheidenden Routine (setCursor) im Offset geändert und sicherheitshalber umbenannt.

Ergebnis:
massenhaft Compiler-Fehlermeldungen, die ich dahin deute, dass der Compiler meine umbenannte *.cpp Datei nicht findet, demzufolge zahlreiche Bezüge fehlen.

Versuchsweise habe ich, entgegen meiner Überzeugung, die originale "LiquidCrystall.cpp" an den entscheidenden Stellen geändert... und prompt läuft es wie erwünscht!

Daraus muß ich schließen, dass die IDE auch bei einem Sketch aus dem Sketchbook grundsätzlich die Libs aus dem originalen Verzeichnis holt... !?

Dennoch bleibt eine weitere Frage:

mein Sketch "Hallo Welt" / das originale Beispiel "HelloWorld" binden beim Kompilieren per $include die Datei "LiquidCrystal.h" ein,
die "LiquidCrystal.cpp" original oder modifiziert rufen ebenfalls per $include diese Header-Datei auf...
wo, wann wird eigentlich die "LiquidCrystal.cpp" mit den Low- und High-Level-Routinen für das LCD aufgerufen???

Gruß
Manfred

.pde sind die Quellcode C-Files Die Du im Editor des IDE schreibst. Dazu kannst Du auch andere Editoren nehmen.
[EDIT]
Nachtrag: 2.8.2023
Ab IDE Version 1.x haben die Sktch Files statt ".pde" die Endung ".ino"
[/EDIT]
.ccp und .h sind Files der Bibliothek, wobei der Namen der Bibliothek dem in Include des .pde Files entsprechen muß.
Im Headerfile (.h) Dort sind Definitionen der Funktionen aufgelistet.
Das Sourcer-File hat die Endung .ccp Darin sind die Funktionen geschrieben und es enthält ein Include auf das Headerfile. Dises file muß den richtigen Namen haben (der Bibliothek im include), da ansonsten Dein Sketch die Bibiothek nicht finden kann.
http://arduino.cc/en/Hacking/LibraryTutorial beschreibt wie man eine Library schreibt.
Grüße Uwe

1 Like

Wenn Du eine eigene Library (.h und .c) im Sketch-Verzeichnis liegen hast musst Du sie mit

#include "myLib.h"

einbinden. Dann erwartet der Linker sie im selben Verzeichnis.

#include <myLib.h>

sucht die Datei im Lib-Ordner.

Danke für die beiden hilfreichen Tips / Hinweise!

Manfred