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"
terry@yourduino.com */
/*-----( 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 )-- */