Wcale nie tak prosto znaleźć działającą bibliotekę, dodatkowym problemem jest nakładanie się przestrzeni nazw C++.
Jedna z bibliotek uruchamiała tylko podświetlanie, inna LiquidCrystal_PCF8574.h działała, ale między poprawnymi znakami wyświetlała błędne (w połowie odczytane kody ASCII)- po zmianie szybkości I2C na 100kHz albo 400kHz zaczynała działać, ale połowa funkcji (typu czyszczenie) nie działała.
UWAGA! Jest ona skonfliktowana z bilioteką New-LiquidCrystal-master, którą należy usunąć z katalogu documents\Arduino\libraries. Inaczej funkcje się pokryją
Hardware
Podłączamy LCD przez konwerter I2C do pinów B6 i B7 (zegar i dane wg pinout), zasilanie VCC do 5V, a GND do uziemienia. To wszystko. PINY PB6 i 7 (I2C1) są odporne na 5v (tolerant), więc nie musicie się martwić. Co prawda to wyświetlacz i głównie do niego wysyłamy, ale może on zrobić pull-up (tak wynika z dokumentacji) 5v też. Nie tylko odbiera więc na RPi bym z tym uważał bardziej.
ADRES I2C u mnie to 0x27, może się różnić (są skanery I2C). 16×2 to rozmiar wyświetlacza. Po kompilacji jest ostrzeżenie, że ta biblioteka użyta nie jest przeznaczona do architektury STM32F1 ale działa bez zarzutu.
Działający przykład kodu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16, 2); //TU ADRES I2C 0x27 void setup() { lcd.init(); lcd.backlight(); lcd.clear(); } void loop() { lcd.setCursor(0, 0); lcd.print(" Hello World:)"); lcd.setCursor(2, 1); lcd.print(" Hd44780 i2c"); delay(1000); lcd.setCursor(2, 2); lcd.print("16x2 and 20x4 "); delay(1000); lcd.setCursor(1, 3); lcd.print(" ForbiddenBit.com "); delay(1000); } |