Mam ekran LCD 1602, który sam działa dobrze. Chciałem jednak uwolnić niektóre piny za pomocą kontrolera LCD I2C / IIC, który kupiłem osobno.
Podczas gdy sterownik wydaje się komunikować z moim Arduino UNO pod właściwym adresem, nie mogę wyświetlić tekstu do wyświetlenia. Domyślnie (bez kodu) wydaje się, że LCD będzie miał 1 linię 16 pełnych „kwadratów”. Gdy użyję adresu 27 w moim kodzie, wyświetlacz LCD zmieni się na 2 wiersze po 16 kwadratów (patrz zdjęcie poniżej). Kod wzywa również, aby podświetlenie migało 3 razy, co działa. Nie mogę jednak dostać nic oprócz 2 linii kwadratów. (Pełny kod znajduje się na dole tego pytania).
Używam biblioteki LiquidCrystal_I2C przez F Malpartida, który wydaje się być powszechnie stosowane.
Czy jest lepsza biblioteka, której powinienem używać?
Zastanawiam się, czy w kodzie są użyte niewłaściwe piny. Wszystkie szkice, które widzę online, używają następujących szpilek:
// addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Set the LCD I2C address
Ale wszystkie 1602 wyświetlacze LCD, które widzę online, mają takie same styki jak moje, jak widać na moim zdjęciu poniżej:
Te szpilki wydają się być standardowe:
Aby jeszcze bardziej pomylić, piny na płycie LCD zaczynają się od 1 po lewej, ale piny kodu domyślnego zaczynają się od 0! Próbowałem więc zmienić piny kodu na liczby na płycie LCD. Wyświetlacz LCD nie zmienia się już w 2 linie kwadratów i nie miga już podświetlenie. Następnie próbowałem odjąć 1 od każdego pinu (aby zacząć od 0), ten sam wynik. Następnie spróbowałem użyć domyślnych pinów minus 1, ten sam wynik. Zatem domyślne szpilki są jakoś bardziej poprawne ?! Co ja robię źle?
Czy ktoś jeszcze zatrudnił jeden z tych kontrolerów I2C, a jeśli tak, to w jaki sposób?
Pełny kod:
/* YourDuino.com Example Software Sketch
16 character 2 line I2C Display
Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
[email protected] */
/*-----( Import needed libraries )-----*/
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600); // Used to type in characters
lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight
// ------- Quick 3 blinks of backlight -------------
for(int i = 0; i< 3; i++) {
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on
//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0
lcd.setCursor(0,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(0,1);
lcd.print("HI!YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.clear();
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("Use Serial Mon");
lcd.setCursor(0,1);
lcd.print("Type to display");
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
}/* --(end main loop )-- */
Odpowiedzi:
Przede wszystkim wygląda na to, że te przewody nie są prawidłowo podłączone:
Nie zdemontowałem wcześniej skoczka, więc może to nie być problem. Wydaje się jednak prawdopodobne, że może to być przyczyna.
Ponadto musisz wyregulować kontrast, obracając trymer (niebieska rzecz, która wygląda trochę tak, jakby miała śrubę). Wyświetlacze LCD albo nie wyświetlają niczego, wypranej wersji tekstu, ani niebieskich pól, jeśli kontrast nie jest ustawiony prawidłowo. To prawdopodobnie przyczyna.
źródło
Kupiłem SainSmart 20x04 i musiałem również zmienić adres na
0x3F
. Brakowało zworki mojego podświetlenia, ten mały nagłówek po prawej stronie płyty I2C zapewnia moc podświetlenia. Znalazłem trochę kodu:źródło
Mam ten sam problem i naprawiam go, zmieniając adres LCD 1602A, który znajduje się w tutorialach 0x27, ale w moim urządzeniu jest 0x3F.
Powodzenia!
źródło
LiquidCrystal_I2C lcd(0x3F,16,2);
. Wielkie dzięki!O ile mi wiadomo, rezystory podciągające powinny być zintegrowane z wyświetlaczem.
Próbowałeś różnych adresów? Mam podobny, który działa pod adresem 0x3F. Może to pomaga.
źródło
Zmień ten kod:
Do tego:
(Argument przed „POZYTYWNY” zmienia się z 3 na 8)
źródło
jestem pewien, że ten link będzie dla ciebie pomocny, mam ten sam wyświetlacz LCD i mam go współpracować z I2C, wykonując czynności opisane w tym linku http://forum.arduino.cc/index.php?topic=128635.0
źródło
Moduł I2C D6-> P5 to D5-> P6 (odwrócony).
źródło
Ctrl+K
aby Twoja przeglądarka zrobiła to za Ciebie. Twoja odpowiedź byłaby bardziej pomocna, gdybyś podał więcej szczegółów.