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"
[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 )-- */
Jawaban:
Pertama-tama, sepertinya kabel ini tidak terhubung dengan benar:
Saya belum pernah membongkar jumper wanita sebelumnya, jadi itu mungkin bukan masalahnya. Namun, sepertinya ini bisa menjadi penyebab.
Juga, Anda perlu menyesuaikan kontras dengan memutar pemangkas itu (benda biru yang terlihat seperti memiliki sekrup di dalamnya). LCD akan menampilkan apa-apa, versi teks yang sudah dicuci, atau kotak biru jika kontras tidak diatur dengan benar. Ini mungkin penyebabnya.
sumber
Saya membeli SainSmart 20x04 dan saya juga harus mengubah alamatnya
0x3F
. Jumper lampu latar saya tidak ada, tajuk kecil di sebelah kanan papan I2C menyediakan daya lampu latar. Beberapa kode yang saya temukan termasuk ini:sumber
Saya memiliki masalah yang sama dan saya memperbaikinya hanya dengan mengubah alamat untuk LCD 1602A, yang ada di tutorial 0x27 tetapi di perangkat saya 0x3F.
Semoga berhasil!
sumber
LiquidCrystal_I2C lcd(0x3F,16,2);
. Terima kasih banyak!Sejauh yang saya tahu, resistor pull-up harus terintegrasi dengan layar.
Apakah Anda mencoba alamat yang berbeda? Saya memiliki yang serupa, yang berfungsi pada alamat 0x3F. Mungkin ini bisa membantu.
sumber
Ubah kode ini:
Untuk ini:
(Argumen sebelum "POSITIF" diubah dari 3 ke 8)
sumber
Saya yakin tautan ini akan sangat membantu Anda, saya memiliki lcd yang sama dan saya dapat menggunakannya dengan I2C mengikuti langkah-langkah di tautan ini http://forum.arduino.cc/index.php?topic=128635.0
sumber
Modul I2C D6-> P5 adalah D5-> P6 (terbalik).
sumber
Ctrl+K
agar browser Anda melakukan ini untuk Anda. Jawaban Anda akan lebih membantu jika Anda menjelaskan lebih detail.