ฉันมีหน้าจอ LCD 1602 ที่ทำงานได้ดีในตัวของมันเอง อย่างไรก็ตามฉันต้องการทำให้บางพินฟรีโดยใช้คอนโทรลเลอร์ I2C / IIC LCD ที่ฉันซื้อแยกต่างหาก
ในขณะที่คอนโทรลเลอร์ดูเหมือนว่าจะสื่อสารกับ Arduino UNO ของฉันตามที่อยู่ที่ถูกต้อง แต่ฉันไม่สามารถรับข้อความที่จะแสดง ตามค่าเริ่มต้น (ไม่มีรหัส) ดูเหมือนว่า LCD จะมี 1 เส้น 16 "สี่เหลี่ยม" ทึบ เมื่อใช้ที่อยู่ 27 ในรหัสของฉันจอ LCD จะเปลี่ยนเป็น 16 บรรทัด 2 เส้น (ดูรูปด้านล่าง) รหัสยังต้องการให้ไฟแบ็คไลท์กะพริบ 3 ครั้งซึ่งใช้งานได้ อย่างไรก็ตามฉันไม่สามารถรับอะไรได้นอกจากสี่เหลี่ยมสองเส้น (รหัสเต็มอยู่ที่ด้านล่างของคำถามนี้)
ฉันใช้ไลบรารี่ LiquidCrystal_I2Cโดย F Malpartida ซึ่งดูเหมือนจะใช้กันทั่วไป
มีห้องสมุดที่ดีกว่าที่ฉันควรใช้?
ฉันสงสัยว่ามันเป็นเพียงพินผิดที่ใช้ในรหัส ภาพร่างทั้งหมดที่ฉันเห็นทางออนไลน์ให้ใช้หมุดต่อไปนี้:
// 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
แต่แอลซีดี 1602 ทั้งหมดที่ฉันเห็นทางออนไลน์มีพินเดียวกับของฉันอย่างที่คุณเห็นในรูปภาพด้านล่าง:
หมุดเหล่านี้ดูเหมือนจะเป็นมาตรฐาน:
เพื่อสร้างความสับสนให้ฉันมากขึ้นหมุดบนแผง LCD เริ่มต้นด้วย 1 ทางซ้าย แต่หมุดของรหัสเริ่มต้นดูเหมือนจะเริ่มต้นด้วย 0! ดังนั้นฉันจึงลองเปลี่ยนพินของรหัสเป็นตัวเลขบนกระดาน LCD จอ LCD จะไม่เปลี่ยนเป็นสี่เหลี่ยมสองเส้นและไม่กะพริบแสงไฟอีกต่อไป จากนั้นฉันลองลบ 1 จากแต่ละขา (เริ่มจาก 0) ผลลัพธ์เดียวกัน ฉันลองใช้หมุดเริ่มต้นลบ 1 ด้วยผลลัพธ์เดียวกัน ดังนั้นหมุดเริ่มต้นจะถูกต้องกว่านี้อีกไหม! ผมทำอะไรผิดหรือเปล่า?
มีใครบ้างที่ได้รับหนึ่งในคอนโทรลเลอร์ I2C เหล่านี้เพื่อทำงานให้กับพวกเขาและถ้าเป็นเช่นนั้นได้อย่างไร
รหัสเต็ม:
/* 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 )-- */