Kendi başına iyi çalışan bir 1602 LCD ekranım var. Ancak, ayrıca satın aldığım I2C / IIC LCD denetleyicisini kullanarak bazı pinleri serbest bırakmak istedim.
Denetleyici Arduino UNO ile doğru adreste iletişim kuruyor gibi görünse de, görüntülenecek metni alamıyorum. Varsayılan olarak (kod yok) LCD'de 1 satırda 16 katı "kare" olacak gibi görünüyor. Kodumda 27 adresi kullanıldığında, LCD 16 satırlık 2 satıra dönüşecektir (aşağıdaki fotoğrafa bakın). Kod ayrıca arka ışığın 3 kez yanıp sönmesini gerektirir, bu da çalışır. Ancak 2 satır kareden başka bir şey alamıyorum. (Tam kod bu sorunun altındadır).
Yaygın olarak kullanılan F Malpartida tarafından LiquidCrystal_I2C kütüphanesini kullanıyorum .
Kullanmam gereken daha iyi bir kütüphane var mı?
Kodda sadece yanlış pimlerin kullanılıp kullanılmadığını merak ediyorum. Çevrimiçi gördüğüm tüm çizimler aşağıdaki pinleri kullanır:
// 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
Ancak çevrimiçi gördüğüm 1602 LCD'nin tamamı, aşağıdaki fotoğrafımda gördüğünüz gibi benimkiyle aynı iğnelere sahip:
Bu pimler standart gibi görünüyor:
Beni daha da karıştırmak için, LCD kartındaki pimler solda 1 ile başlar, ancak varsayılan kodun pimleri 0 ile başlar! Bu yüzden kodun pinlerini LCD kartındaki numaralara değiştirmeyi denedim. LCD artık 2 satır kareye dönüşmüyor ve arka ışığı artık yanıp sönmüyor. Daha sonra her pimden 1 çıkarmayı denedim (0'dan başlamak için), aynı sonuç. Daha sonra varsayılan pimleri eksi 1, aynı sonucu kullandım. Böylece varsayılan pimler bir şekilde daha doğru mu ?! Neyi yanlış yapıyorum?
Bu I2C denetleyicilerinden biri onlar için çalışmaya başladı ve eğer öyleyse, nasıl?
Tam kod:
/* 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 )-- */