Ich habe einen 1602 LCD-Bildschirm, der alleine gut funktioniert. Ich wollte jedoch einige Pins mit einem I2C / IIC-LCD-Controller freigeben, den ich separat gekauft habe.
Während der Controller mit meinem Arduino UNO unter der richtigen Adresse zu kommunizieren scheint, kann kein Text angezeigt werden. Standardmäßig (kein Code) scheint das LCD 1 Zeile mit 16 durchgezogenen "Quadraten" zu haben. Wenn Sie die Adresse 27 in meinem Code verwenden, ändert sich das LCD in 2 Zeilen mit 16 Quadraten (siehe Foto unten). Der Code fordert auch, dass die Hintergrundbeleuchtung dreimal blinkt, was funktioniert. Ich kann jedoch nur 2 Quadrate bekommen. (Der vollständige Code befindet sich am Ende dieser Frage.)
Ich verwende die LiquidCrystal_I2C-Bibliothek von F Malpartida, die anscheinend häufig verwendet wird.
Gibt es eine bessere Bibliothek, die ich verwenden sollte?
Ich frage mich, ob es nur die falschen Pins sind, die im Code verwendet werden. Alle Skizzen, die ich online sehe, verwenden die folgenden Stifte:
// 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
Aber alle 1602 LCDs, die ich online sehe, haben die gleichen Stifte wie meine, wie Sie auf meinem Foto unten sehen können:
Diese Stifte scheinen Standard zu sein:
Um mich weiter zu verwirren, beginnen die Pins auf der LCD-Platine links mit 1, aber die Pins des Standardcodes scheinen mit 0 zu beginnen! Also habe ich versucht, die Pins des Codes in die Zahlen auf der LCD-Platine zu ändern. Das LCD ändert sich nicht mehr in 2 Quadratzinien und die Hintergrundbeleuchtung blinkt nicht mehr. Ich habe dann versucht, 1 von jedem Pin zu subtrahieren (um bei 0 zu beginnen), das gleiche Ergebnis. Ich habe dann versucht, die Standard-Pins minus 1 zu verwenden, das gleiche Ergebnis. Somit sind die Standardstifte irgendwie korrekter?! Was mache ich falsch?
Hat jemand einen dieser I2C-Controller dazu gebracht, für sie zu arbeiten, und wenn ja, wie?
Vollständiger Code:
/* 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 )-- */