Aufruf mit DrawPowerGraph(&oled1)
Also, dass eine Grafikfunktion auf zwei Displays angewendet werden kann.
Ständig haut der Compiler mit das raus. Was stimmt denn da nicht. Das
ist doch bloss Übergabe eines C++ Objektes per Zeiger an eine Funktion
dessen Methoden ich dann benutze. Wenn man das void durch int ersetzt
kommt neuer Murks.
E:\Embedded\ESP32\USB_Power_Meter\grafik.ino:107:21: error: variable or
field 'DrawPowerGraph' declared void
void DrawPowerGraph(Adafruit_SSD1306* oled) {
^~~~~~~~~~~~~~~~
E:\Embedded\ESP32\USB_Power_Meter\grafik.ino:107:21: error:
'Adafruit_SSD1306' was not declared in this scope
E:\Embedded\ESP32\USB_Power_Meter\grafik.ino:107:21: note: suggested
alternative: 'Adafruit_SPIDevice_h'
void DrawPowerGraph(Adafruit_SSD1306* oled) {
^~~~~~~~~~~~~~~~
Adafruit_SPIDevice_h
E:\Embedded\ESP32\USB_Power_Meter\grafik.ino:107:39: error: 'oled' was
not declared in this scope
void DrawPowerGraph(Adafruit_SSD1306* oled) {
^~~~
Hallo Throsten,
ich habe keine Ahnung von Arduino, aber vermutlich hast Du einen Header
vergessen einzubinden.
Der Compiler schlägt vor: 'Adafruit_SPIDevice_h'
Evtl. sind dort die fehlenden Typen deklariert.
ciao
Marci
Marci W. schrieb:> ich habe keine Ahnung von Arduino, aber vermutlich hast Du einen Header> vergessen einzubinden.
Header ist mit drin vorne im Namensgebenden Modul des Sketches.. Habe
den auch nochmal verdoppelt für das Modul . Ändert nichts. Lief ja alles
vorher auch. Nur eben mit oled1 und oled2. Nur neben ohne Übergabe.
Thorsten M. schrieb:> Ständig haut der Compiler mit das raus. Was stimmt denn da nicht.
Zeig den kompletten Quelltext, keine Schnipsel. Als Dateianhang, nicht
im Beitragstext.
Marci W. schrieb:> vllt. hab ich ja grad was auf den Augen, aber wo ist das include?
Steht doch da .... bei Arduino muss man das ja nur einmal machen, der
verwurstet das für alle Module dann.
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Ich glaube ich habe es. Es ist leider nicht egal wo die Funktion steht.
Kopiere ich sie in das Hauptmodul, also wo auch der Include steht läuft
das einwandfrei durch.
Das Problem dürfte also tief im Bauch der Arduino IDE liegen. das ist
bei defines genauso, die im Hauptmodul sind überall bekannt. Die aus den
anderen Modulen nur im Modul slebst.
Da lobe ich mir doch bare metal Programmierung der Cortexe, mit Headern,
make Datei usw. Da weiss man genau was abgeht.
https://arduino.github.io/arduino-cli/0.20/sketch-build-process/
Eine Forward Deklaration für die Funktion im Hauptsketch könnte helfen.
Ich mag solche Automatismen auch nicht, PlatformIO ist da schon besser
und bietet mehr Möglichkeiten und vor allem auch eine Benennung der
verwendeten Referenzen.
J. S. schrieb:> Eine Forward Deklaration für die Funktion im Hauptsketch könnte helfen.
Tut sie leider nicht. Diese Arduino IDE erzeugt header, protoypen,
externals usw scheinbar automatisch.
Lassen wir es dabei, mir fällt schon was ein und wenn ich die Funktionen
verdoppelt, Platz genug hat der esp32 ja.
Thorsten M. schrieb:> Das Problem dürfte also tief im Bauch der Arduino IDE liegen
unter anderem ist das der Grund, warum ich nichts mit der Arduino IDE
mache.
Obwohl, wenn man ein Projekt mit ESPIDF baut, weiß man auch nicht so
genau, was da alles im Hintergrund passiert. Jedenfalls ist das ne ganze
Menge.
Aber wenigstens kann ich mich drauf verlassen, dass alles C/C++ konform
läuft. ;-)
J. S. schrieb:> Ich mag solche Automatismen auch nicht, PlatformIO ist da schon besser> und bietet mehr Möglichkeiten
Ich glaub es wird Zeit, dass ich mir das auch mal anschaue!
ciao
Marci
Marci W. schrieb:> unter anderem ist das der Grund, warum ich nichts mit der Arduino IDE> mache.
Strukturiertes Programmieren wird damit jedenfalls zum Abenteuer, wenn
es mehr als 2-3 Module sind.