我有一个1602液晶显示屏,它可以正常工作。但是,我想通过使用我单独购买的I2C / IIC LCD控制器来释放一些引脚。
虽然控制器似乎在正确的地址上与我的Arduino UNO通信,但我无法显示文本。默认情况下(无代码),LCD似乎有1行,每行16个实心“正方形”。在我的代码中使用地址27时,LCD将变为2行,每行16平方(见下图)。该代码还要求背光灯闪烁3次,这是可行的。但是我只能得到2行正方形。(完整代码位于此问题的底部)。
我正在使用F Malpartida 的LiquidCrystal_I2C库,该库似乎很常用。
我应该使用更好的库吗?
我想知道代码中是否使用了错误的引脚。我在网上看到的所有草图都使用以下引脚:
// 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的引脚都与我的引脚相同,如下图所示:
这些引脚似乎是标准的:
让我更加困惑的是,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 )-- */