Skocz do zawartości

Moduł I2C dla wyświetlacza oraz moduł PCF8574


Pomocna odpowiedź

Napisano

Witam.

Mam problem odnośnie rozszerzenia pinów w Arduino.

Podłączyłem wyświetlacz przy pomocy modułu I2C dla wyświetlacza LCD, wykorzystując przy tym bibliotekę LiquidCrystal_I2C.h, oprócz tego chciałem dodać kilka dodatkowych pinów przy użyciu modułu PCF8574. W momencie gdy w programie dołączę bibliotekę PCF8574.h, program wyrzuca błąd, że biblioteka ta zawarta jest (niby) w bibliotece LiquidCrystal_I2C.h.

Jak rozwiązać ten problem, aby wszystko działało poprawnie i bezbłędnie?

SiaQ, które konkretnie biblioteki używasz, skąd je pobrałeś? Jak dokładnie brzmi błąd wyświetlany w Arduino?

LiquidCrystal_I2C.h - bibliotekę ściągnąłem ze strony, która podana była na Botlandzie (https://botland.com.pl/konwertery-pozostale/2352-konwerter-i2c-dla-wyswietlacza-lcd-hd44780.html)

PCF8574.h - ta biblioteka była podana na jakiejś stronie, gdzie wykorzystywany był ten moduł (https://botland.com.pl/ekspandery-wyprowadzen/4455-modul-pcf8574-ekspander-wyprowadzen-mikrokontrolera.html?search_query=pcf8574&results=16)

A błąd jaki wyskakuje to :

Archiving built core (caching) in: C:\Users\Kuba\AppData\Local\Temp\arduino_cache_77816\core\core_arduino_avr_uno_0c812875ac70eb4a9b385d8fb077f54c.a
libraries\PCF8574\PCF8574.cpp.o (symbol from plugin): In function `port_to_pcmask':

(.text+0x0): multiple definition of `__vector_3'

libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

libraries\PCF8574\PCF8574.cpp.o (symbol from plugin): In function `port_to_pcmask':

(.text+0x0): multiple definition of `__vector_4'

libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

libraries\PCF8574\PCF8574.cpp.o (symbol from plugin): In function `port_to_pcmask':

(.text+0x0): multiple definition of `__vector_5'

libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

Znaleziono wiele bibliotek w "LiquidCrystal_I2C.h"
Wykorzystane: C:\Users\Kuba\Documents\Arduino\libraries\LiquidCrystal_I2C
Niewykorzystane: C:\Users\Kuba\Documents\Arduino\libraries\jm_LiquidCrystal_I2C
exit status 1
Błąd kompilacji dla płytki Arduino/Genuino Uno.

SiaQ, w kodzie błędu jest mowa o tym, że masz wgraną dwa razy bibliotekę od wyświetlacza:

Znaleziono wiele bibliotek w "LiquidCrystal_I2C.h" 
Wykorzystane: C:\Users\Kuba\Documents\Arduino\libraries\LiquidCrystal_I2C 
Niewykorzystane: C:\Users\Kuba\Documents\Arduino\libraries\jm_LiquidCrystal_I2C 

Sprawdź najpierw ten trop i usuń zbędny katalog 😉

Po usunięciu biblioteki z folderu "libraries" wyskoczyło coś takiego :

libraries\PCF8574\PCF8574.cpp.o (symbol from plugin): In function `port_to_pcmask':

(.text+0x0): multiple definition of `__vector_3'

libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

libraries\PCF8574\PCF8574.cpp.o (symbol from plugin): In function `port_to_pcmask':

(.text+0x0): multiple definition of `__vector_4'

libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

libraries\PCF8574\PCF8574.cpp.o (symbol from plugin): In function `port_to_pcmask':

(.text+0x0): multiple definition of `__vector_5'

libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
Błąd kompilacji dla płytki Arduino/Genuino Uno.

Wykorzystywałem go do podłączenia modułu GSM, który w sumie podłączyłem przy użyciu innej biblioteki (teraz moduł działa poprawnie, wtedy szwankował), ale mimo wszystko po usunięciu biblioteki SoftwareSerial.h błąd jest nadal taki sam jak powyżej. Dziwne i zarazem bardzo irytujące. Może to wina bibloteki PCF8574.h ? Masz może jakąś sprawdzoną do modułu, do którego link wrzuciłem w 2 poście?

Do komunikacji Arduino z modułem GSM Sim800l, wykorzystuję bibliotekę ze strony producenta Sim800l.h, która wymaga również zastosowania biblioteki SoftwareSerial.h. Wszystko działa pięknie, do momentu gdy chcę wykorzystać ekspander wyprowadzeń PCF8574. Wrzucam do programu bibliotekę PCF8574.h, znalezioną gdzieś w internecie i wyrzuca błąd taki jak powyżej. Czemu coś takiego się dzieje? :/

  • 2 lat(a) później...

Wykopaliska, 

też mam zamiar użyć pcf8574, też korzystam z softwareSerial do komunikacji z sim800l... 

Ktoś miał podobne problemy jak założyciel wątku? 

Ktoś miał, opisywał to na forum ArduinoPolska, zmienił bibliotekę PCF8574 na inną i tak rozwiązał problem. Jak tylko się przymierzasz to po prostu uruchom i sprawdź czy jest konflikt, może akurat od razu trafisz na zgodne. Większą pewność działania daje UART sprzętowy, np. MEGA ma 4, LEONARDO/MICRO ma jeden, ale "dodatkowy" - nieużywany do komunikacji z PC.

Akurat obsługa PCF8574 to pięć linijek na krzyż i można się obyć bez żadnej biblioteki - zależy co się ma zamiar robić (w większości przypadków wystarczą odpowiedniki read8 i write8). No - chyba że jest konflikt z Wire...

  • Lubię! 1

Jak mówi ethanak zależy co ma się zamiar robić. Ja w jednym ze swoich projektów wykorzystałem 5 takich ekspanderów (pracujących jako wyjścia)  i nie korzystałem z biblioteki 8574.h lecz z Wire.h. W setup oczywiście Wire.begin(), a później zapis do PCF8574 realizowałem jako:

Wire.beginTransmission(adresPCF);
Wire.write(bajt_danych);
Wire.endTransmission();

i to wszystko - działa.

  • Pomogłeś! 1
(edytowany)

Odczyt jest nawet mniej skomplikowany:

Wire.requestFrom(adresPCF, (uint8_t)1);
bajt_danych = Wire.read();

Trzeba tylko pamiętać, aby wcześniej wrzucić jedynki do bitów, które się będzie czytać.

Nie mówiłem, że to 5 linijek? 🙂

Edytowano przez ethanak

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...