Saya memiliki layar LCD 1602 yang berfungsi dengan baik sendiri. Namun saya ingin membebaskan beberapa pin dengan menggunakan I2C / IIC LCD controller yang saya beli secara terpisah.
Sementara controller tampaknya berkomunikasi dengan Arduino UNO saya di alamat yang benar, saya tidak bisa mendapatkan teks untuk ditampilkan. Secara default (tanpa kode) tampaknya LCD akan memiliki 1 baris 16 "kotak" padat. Saat menggunakan alamat 27 dalam kode saya, LCD akan berubah menjadi 2 baris 16 kotak (lihat foto di bawah). Kode juga meminta lampu latar untuk berkedip 3 kali, yang berfungsi. Namun saya tidak bisa mendapatkan apa pun kecuali 2 baris kotak. (Kode lengkap ada di bagian bawah pertanyaan ini).
Saya menggunakan perpustakaan LiquidCrystal_I2C oleh F Malpartida, yang sepertinya biasa digunakan.
Apakah ada perpustakaan yang lebih baik yang harus saya gunakan?
Saya bertanya-tanya apakah itu hanya pin yang salah yang digunakan dalam kode. Semua sketsa yang saya lihat online menggunakan pin berikut:
// 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
Tetapi semua 1602 LCD yang saya lihat online memiliki pin yang sama dengan milik saya, seperti yang Anda lihat di foto saya di bawah ini:
Pin ini tampaknya standar:
Untuk lebih membingungkan saya, pin pada papan LCD mulai dengan 1 di sebelah kiri, namun pin kode default tampaknya dimulai dengan 0! Jadi saya mencoba mengubah pin kode ke angka di papan LCD. LCD tidak lagi berubah menjadi 2 baris kotak dan tidak lagi mengedipkan lampu latar. Saya kemudian mencoba mengurangi 1 dari setiap pin (mulai dari 0), hasil yang sama. Saya kemudian mencoba menggunakan pin default minus 1, hasil yang sama. Jadi pin default entah bagaimana lebih benar ?! Apa yang saya lakukan salah?
Adakah orang lain yang mendapatkan salah satu pengendali I2C ini untuk bekerja untuk mereka, dan jika demikian, bagaimana?
Kode lengkap:
/* 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 )-- */