Tôi có một màn hình LCD 1602 tự hoạt động tốt. Tuy nhiên, tôi muốn giải phóng một số chân bằng cách sử dụng bộ điều khiển LCD I2C / IIC mà tôi đã mua riêng.
Trong khi bộ điều khiển dường như đang giao tiếp với Arduino UNO của tôi ở đúng địa chỉ, tôi không thể nhận được văn bản để hiển thị. Theo mặc định (không có mã) có vẻ như LCD sẽ có 1 dòng gồm 16 "hình vuông" rắn. Khi sử dụng địa chỉ 27 trong mã của tôi, màn hình LCD sẽ thay đổi thành 2 dòng 16 ô vuông (xem ảnh bên dưới). Mã cũng gọi cho đèn nền nhấp nháy 3 lần, hoạt động. Tuy nhiên tôi không thể có được gì ngoài 2 dòng hình vuông. (Mã đầy đủ nằm ở cuối câu hỏi này).
Tôi đang sử dụng thư viện LiquidCstall_I2C của F Malpartida, dường như thường được sử dụng.
Có một thư viện tốt hơn tôi nên sử dụng?
Tôi tự hỏi liệu đó chỉ là các chân sai được sử dụng trong mã. Tất cả các bản phác thảo tôi thấy trực tuyến sử dụng các chân sau:
// 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
Nhưng tất cả 1602 LCD tôi thấy trực tuyến đều có các chân giống như của tôi, như bạn có thể thấy trong ảnh của tôi dưới đây:
Các chân này có vẻ là tiêu chuẩn:
Để làm tôi bối rối hơn, các chân trên bảng LCD bắt đầu bằng 1 ở bên trái, nhưng các chân của mã mặc định dường như bắt đầu bằng 0! Vì vậy, tôi đã thử thay đổi các chân của mã thành các số trên bảng LCD. Màn hình LCD không còn thay đổi thành 2 dòng hình vuông và không còn nhấp nháy đèn nền. Sau đó, tôi đã thử trừ 1 từ mỗi pin (để bắt đầu từ 0), kết quả tương tự. Sau đó tôi đã thử sử dụng các chân mặc định trừ 1, kết quả tương tự. Do đó, các chân mặc định bằng cách nào đó đúng hơn?! Tôi đang làm gì sai?
Có ai khác nhận được một trong những bộ điều khiển I2C này để làm việc cho họ không, và nếu có thì bằng cách nào?
Mã đầy đủ:
/* 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 )-- */