Aber egal, wie "I2C_LCD_Vorhanden" gesetzt ist, die beiden Librarys werden immer mit eingebunden? Warum?
Diese Möglichkeiten sehe ich:
Sobald #define I2C_LCD_Vorhanden vorkommt, ist es definiert, auch wenn du schreibst #define I2C_LCD_Vorhanden false
Hast du ein #undef I2C_LCD_Vorhanden
oder hast du die Zeile gelöscht / auskommentiert ?
(diese Möglichkeit nur der Vollständigkeit halber )
Ein anderer Modul in dem Sketch macht auch ein #include
( Insbesondere Wire.h könnte auch anderweitig referenziert werden )
Die Ardiuino IDE will dir helfen und baut aus deiner .ino eine .cpp Datei.
Dabei macht sie manches, was jemand der eigentlich selbst die include - Abhängigkeiten im Griff haben will, eher verwirrt.
( Kann sein, dass da #ifdef ignoriert wird )
Sind sie Libraries weg, wenn du die undefinierten #ifdef - Blöcke ganz löschst ?
@Reinhard: Ich versteh das so, dass Paulinchen das grade nicht drinhaben will. So wie bei dir kann das jeder
... auskommentiert, hätte ich natürlich anmerken sollen - damit sollte das "kann jeder" geklärt sein, oder?
"Sobald #define I2C_LCD_Vorhanden vorkommt, ist es definiert" -> korrekt
Wenn ich die Zeile auskommentiere, wird die Lib definitiv nicht geladen. Ich habe versuchsweise einen Aufruf einer Funktion aus der Lib gemacht, da meckert der Compiler.
schreibt, ist es definiert (wie define schon sagt). Welchen Wert es ggfs. noch bekommt (true, false, 4711, "Ich bin ein String") spielt da keine Rolle.
#define I2C_LCD_Vorhanden false // oder alternativ #define I2C_LCD_Vorhanden true
#if I2C_LCD_vorhanden == true // #if I2C_LCD_Vorhanden reicht auch bei boolschen Werten
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#else // false
// wenn nicht true, wird nichts eingefügt; #else-Zweig kann dann natürlich weggelassen werden
#endif
Ich kanns im Augenblick nicht ausprobieren, aber so sollte es gehen.
DS1307 braucht auch Wire.h und wird wahrscheinlich im File DS1307.cpp eingebunden
Wenn ich das Wire-Library Verzeichnis umbenenne und den Sketch ohne LCD compiliere, passt die Größe und es kommt kein Fehler. Also wird doch die Wire.h außer vom LCD nicht gebraucht, oder?
Ich nutze alle Libs, welche ich eingebunden habe. Verwende ich kein LCD, kann ich die "wire-lib" im library-Verzeichnis umbenennen, ohne das beim compilieren ein Fehler auftritt. Also wird diese von den anderen Libs nicht gebraucht, oder?
Nutze ich jetzt zusätzlich das LCD, benötige ich noch die "wire.h" und die "LiquidCrystal_I2C.h".
So weit auch alles OK.
Wenn ich nun das LCD nicht einbinden will und diese beiden Libs mit der "#if"-Compilerdirektive abschalten will, wird trotzdem die "wire.h" geladen. Erst wenn ich die "#include <Wire.h>" auskommentiere, wird diese nicht mehr geladen.
Ich verstehe es einfach nicht...Gute N8, paulinchen
paulinchen, kannst du noch folgendes ausprobieren:
#if I2C_LCD_4_20 == true
#pragma message ("Wir durchlaufen den Zweig für I2C_LCD_4_20 gleich true")
// oder brutaler: #error Wir wollen den Zweig für I2C_LCD_4_20 gleich true durchlaufen
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#else
#pragma message ("Wir durchlaufen den Zweig für I2C_LCD_4_20 gleich false")
// oder brutaler: #error Wir wollen den Zweig für I2C_LCD_4_20 gleich false durchlaufen
#endif
Die Meldungen erscheinen im Compiler-Output. Wie man den in der Arduino-IDE anzeigt, weiss ich nicht genau, da ich schon seit einiger Zeit nur noch das Atmel Studio 6.0 als Entwicklungsumgebung verwende.
Damit sollten wir erkennen können, welcher Zweig ausgeführt wird und ob die #if-Direktive richtig ausgeführt wird.
Vielleicht kann man zumindest hier einen Hinweis bekommen, ob wire.h eingefügt wird oder nicht.
Weiterhin kannst du ja zur Fehlersuche temporär am Anfang der Datei wire.h (liegt im Arduino-Libraries-Verzeichnis) oder in anderen Header-Files etwas einfügen wie
#pragma message ("Wir sind jetzt in wire.h - wollen wir das?????")
um zu sehen, wo es lang geht.
Eventuell auch mal nachsehen, ob es auf deinem System mehrere Versionen von wire.h gibt und dort jeweils einen unterschiedlichen Text bei #pragma message verwenden, um zu sehen welche Version eingefügt wird.