Hallo,
gibt es die Möglichkeit den verwendeten Treiber auch im Sketch anzugeben ?
Ich verwende div. unterschiedliche TFT sowie Controller und möchte den richtigen Treiber im Sketch angeben bzw. includieren.
Bisher ist mir das noch nicht gelungen.
In der Library nutze ich beispielsweise folgende Anweisung: #include <User_Setups/Setup46a_GC9A01_ESP8266.h>
oder: //#include <User_Setups/Setup70c_ESP32_C3_ILI9341.h>
Diese stehen hier:
D:\Arduino\Projekte\Programme\libraries\TFT_eSPI\User_Setup_Select.h
und werden jeweils bei Bedarf aktiviert.
Meine Frage, wie muss ich einen Pfad im Sketch zusammenstellen, damit es auch im Sketch ohne zusätzliche Angabe in der Library funktioniert ?
Versuche ähnlich diesem: #include <D:/Arduino/Projekte/Programme/libraries/TFT_eSPI/User_Setups/Setup46a_GC9A01_ESP8266.h>
oder #include "D:/Arduino/Projekte/Programme/libraries/TFT_eSPI/User_Setups/Setup46a_GC9A01_ESP8266.h"
Ok, danke dir.
Das mit den 2 \ hatte ich tatsächlich übersehen.
Grad getestet, da kommen mehrere Fehlermeldungen, die ich jetzt mal untersuchen muss.
Werde auch testen, ob das einsetzen im Sketchordner für mich praktikabel ist.
Danke erstmal.
Gruß Dieter
Nachtrag:
Ist wohl doch nicht so trivial.
Habe jetzt bedingt durch die Fehlersuche dies hier gefunden und werde mich damit mal auseinandersetzen.
Der Sketch kompliert nach include Änderung mit Pfad unter Windows 11.
Normalerweise liegt diese Lib wie alle anderen auch im Standardpfad ... \arduino-1.8.19\portable\sketchbook\libraries\
Könnte allerdings scheitern wenn eine Lib weitere Libs verwendet die im Standardpfad der IDE liegen. Ich inkludiere allerdings assert.h in meiner Lib was keine Problem macht.
Das Sicherste ist allerdings wenn alle Libs im Sketchordner (sketchbook\libraries) liegen. Dann werden sie von der IDE auf jeden Fall gefunden.
Gedanke.
Es müsste noch eine Möglichkeit geben der IDE einen weiteren Suchpfad mitzugeben. Sodass man den ersten Teil des Pfades im include weglassen kann. Im Microchip-Studio kann man Suchpfade im Projekt anlegen. Das muss die IDE ja auch irgendwie machen. Der Sketchordner wird ja auch angegeben und darin Standardmäßig mittels < > statt " " gesucht. Man müsste sich dafür sicherlich die platform.txt anschauen.
Ich meine, wenn ich weiter darüber nachdenke, sollte das mit der Option funktionieren wie auch die avrLibStdCpp zur Verfügung gestellt wird.
Danke für deine Ausführungen.
Das "Problem" was ich sehe, ist die Verquickung der eigendlichen Library, die im Libraryordner steht und der eigentlichen Konfigurationsdatei, die je nach Hardware differiert.
Nur diese Konfigurationsdatei soll aus der IDE zugewiesen werden.
Und das klappt mit den bisher getesteten und auch vorgeschlagenen Beispielen bisher nicht.
Auch der Vorschlag im obigen Link macht lt. Autor Probleme und wird daher von mir nicht weiter verfolgt.
Also werde ich wohl weiter suchen und probieren.
kannst du nochmal anderes beschreiben was du wie machen möchtest?
Mittels der Option -isystem wird laut meines Wissens der IDE nur ein Suchpfad mitgeteilt. Das könntest du in allen platform.local.txt angeben. Was inkludiert wird entscheidet sich was im Sketch wirklich inkludiert wird.
Ok, ja meine Erklärung war sicher nicht zielführend.
Die Library "TFT_eSPI" liegt fest im Libraryordner.
Die Konfig-Datei liegt in einem Unterordner der Library: #include <User_Setups/Setup46a_GC9A01_ESP8266.h>
und muß dort includiert werden.
Nicht wie ich geschrieben habe, in der IDE. Das war blödsinn.
Da macht das ja keinen Sinn.
dann sollte es ausreichend sein wenn der Pfad zum User_Setups Ordner mittels -isystem Option angegeben wird. Danach eine Konfig-Lib der Wahl inkludieren. #include <Setup46a_GC9A01_ESP8266.h>
Ich habe das mal getestet. Leider ohne Erfolg.
Folgende Eingaben stehen in der platform.local.txt: compiler.cpp.flags= -c -g -Os -isystem "D:\Arduino\Projekte\Programme\libraries\TFT_eSPI\User_Setups"
und im Sketch steht: #include <Setup46a_GC9A01_ESP8266.h>
Es funktioniert so nicht. Ist die platform.local.txt so ok ?
Ich tippe aber eher auf einen "Gedankenfehler". Das "#include" steht ja normalerweise in einem Teil der Library und kann doch so nicht als Aufruf im Sketch erfolgen ?
Oder sehe ich das falsch ?
Hast du eine Doku zu obiger Anweisung in der platform.local.txt ?
Alles was in der platform.local.txt steht "überschreibt" das Original an Defines. Deswegen müssen die Zeilen komplett sein. Damit man nicht in der originalen platform.txt rumschreiben muss. Außer man legt sich Backups an. Die "local" kannste dir als individuelle Kopie vorstellen und diese Einträge/Zeilen werden verwendet. Alle Zeilen die nicht in der "local" stehen werden aus der "non local" verwendet.
Ich hatte das gestern ausprobiert, ich kann Libs inkludieren die im Pfad stehen.
Schau dir einmal die Zeile mit
compiler.cpp.flags=
in deiner originalen platform.txt an,
die nimmste rüber in die platform.local.txt und hängst das mit -isystem hinten ran.
paar Anmerkungen.
Erstmal sollte die Zeile bei ihm komplett sein, dann kann man andere Optionen probieren.
Ich bevorzuge systematische Fehlersuche.
Ob Backward oder Forward Slash ist unter Windows egal, kann beides, üblich ist unter Windows Backward Slash. Linux will nur Forward Slash.
Laufwerke sind egal, solange ein Buchstabe vergeben wurde, gilt auch für Netzlaufwerke.
Ich habe mich einen gewissen Teil des Abends mit dem Problem beschäftigt.
Du siehst das m.E. richtig.
Der Include des spezifischen Treibers steht in User_Setup_Select.h. Meine Versuche mit vorher geladenem User Setup à la ESP-IDF sind gescheitert.
Zusätzliche Pfade konnte ich nur in der platform.txt unterbringen (local hat bei mir zumindest beim ESP32 keine Wirkung):
Ok, so war es auch bei meinen gesamten Versuchen.
Eine Fehlermeldung deutet eindeutig darauf, dass er die Hardware-Einstellungen nicht findet. Diese stehen in der im Sketch includierten Datei und diese findet er nicht.
Aktuell werde ich nicht daran weiter machen. Da fehlt mir dann doch die Zeit.
90% ja, 10% nein.
Mit dem Zusatzpfad in platform.txt wird das gefunden - aber es ist halt nur Pest statt Cholera, weil man immer noch ändern muss und es nicht im Sketch bestimmen kann.
Generisch in User_Setup_Select.h (alle anderen auskommentiert):
#define myDriverOutside "Setup20_ILI9488.h"
// ^^^ Dieser Header steht dann auch 'outside'
Dann kann die Library unverändert bleiben und nur am Ort "outside" muss die Definition für den zu verwendenden Treiber und das Setup je nach Hardware geändert werden.