ich habe es natürlich an zwei verschiedenen adaptern (0x27 und 0x3F) und das nacheinander bzw. getrennt getestet
eine idee zu "0x"?
gruß inka
das hättest du aber schreiben müssen!ich habe es natürlich an zwei verschiedenen adaptern (0x27 und 0x3F) und das nacheinander bzw. getrennt getestet
wieso? du hast es doch oben schon selber so gemacht - nimm einfach die richtige:eine idee zu "0x"?
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Hex-und Dezimal-Schreibweise (0x3F oder 63) sind aber nur formatierte Textstring-Schreibweisen ein-und derselben Zahl, du kannst sie schreiben wie du willst, dem Programm ist es egal.
Damit er weiß, wenn du eine Hex-Schreibweise verwendest, musst du eben 0x davor schreiben, machst du es nicht, weiß er dass eine Dezimalschreibweise gemeint ist. Die Zahl an sich wäre in einer Variablen aber immer identisch (binär) kodiert.
Eine Variable kannst du in der globalen Instantiierung allerdings nicht einsetzen, daher musst du immer beide LCD-Instanzen definieren und alle lcd-print etc. doppelt schreiben (wobei dann ein LCD von beiden unbenutzt ist und dessen Lese/Schreibvorgänge jeweils im Nirwana enden)
LiquidCrystal_I2C lcd1(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
LiquidCrystal_I2C lcd2(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Geändert von HaWe (14.03.2018 um 16:52 Uhr)
Das nützt mir aber kaum etwas, ich muss dann trotzdem immer wieder schreibzugriffe auf beide lcd's (lcd1 und lcd2) angeben...
Eigentlich dachte ich durch die Suche der jeweils verbauten I2C adresse dass ich die teile einfach beliebig einsetzen kann ohne mich groß um die tatsächliche adresse kümmern zu müssen...
gibt es evtl. noch andere möglichkeiten? Z.b. wie hier von RoboHolIC ausgeführt:
#ifndef ist eine Anweisung an den Preprozessor. Damit kannst du bei der Compilierung steuern, ob die Variante ... lcd(0x27... oder ...lcd(0x3F... in das Programmfile eingebaut wird. Dann hast du eben immer genau die eine ODER die andere Display-Adresse im Code.
gruß inka
per #ifdef legst du es VOR der Kompilierung fest, NACH der Kompilierung ist es wieder nur eine unveränderliche Konstante, so, als ob du sie von vornherein als diese Konstante reingeschrieben hättest.
Da deine globale Instantiierung aber auch zwingend eine Konstante benötigt für die Adresse, und keine Variable, sehe ich mit dieser Lib keine andere Möglichkeit, ohne die komplette Lib umzuschreiben.
ok, danke, verstanden...
![]()
gruß inka
Falls deine lcd Lib aber grundsätzlich eine Variable als i2c-Adresse für die Instantiierung erlaubt und nicht immer zwingend eine Konstante fordert, dann ginge es allerdings lokal:
- eine globale Adressen-Variable lcdaddr definieren und mit 0x27 oder 0x3F vor-initialisieren
- in setup() die korrekte lcdaddr Adresse suchen und global in lcdaddr speichern (überschreiben)
- in loop() im Kopf eine Instanz mit lcdaddr erzeugen
Lesezeichen