Arduino 16×2 / 20×4 LCD Panellerde Sadece İlk Karakter Gösterme Sorunu
Bildiğiniz gibi geçtiğimiz haftalarda Arduino ekibi Arduino IDE için bir güncelleme yayınladılar ve 1.6.6 sürümü çıkardılar. Tabi ben de dahil bir çok kişi hemen güncelleme yaptık. Ancak bu yeni sürümle birlikte bazı kütüphanelerin (library) uyumsuz oldukları görüldü. Bu uyumsuzluk minör (gözardı edilebilir) seviye de olduğu kadar, direk sketch‘lerimizin artık istediğimiz gibi çalışmamasına gibi sorunlara neden oldu.
Örneğin bir çoğumuzun kullandığı 16×2 veya 20×4 tipi LCD panelleri I2C arabirimi ile beraber kullananların doğru dürüst çalışan kodları birden ekranda tek bir harf göstermeye başladı.
Örnek kod:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("Hello, world!"); //İlk satıra yazalım lcd.setCursor(0,1); lcd.print("Arduino Rocks!"); //İkinci satıra yazalım } void loop() { }
Kodu Arduino IDE 1.6.6 üzerinde çalıştırınca bir de ne görelim. İlk satırda Hello World! yazmasını beklerken sadece “H” harfi, ikinci satırda ise Arduino Rocks! yazması gerekirken sadece “A” harfi görüyoruz.
Bunun nedeni daha önce kullandığımız I2C kütüphanesinin artık Arduino IDE sürüm 1.6.6 veya üzeri sürüm ile uygun olmamasıdır.
Bu nedenle mevcut kütüphanelerden birinin 1.6.6 için düzenlenmiş halini kullanmamız gerekiyor. AVRL2C kodlarından yardım alarak oluşturulan yeni bir I2C kütüphanesi işimizi çözecektir. Bu kütüphane ile direk donanım ile iletişim kurduğumuzdan Wire.h kütüphanesine ihtiyacımız kalmayacak.
Kütüphaneyi aşağıdaki linke tıklayarak indirebilirsiniz.
İndir “Arduino Uygulamaları” ReprapLCDTest.ino – 15575 defa indirildi – 6,73 KB(Arduino IDE üzerine yeni kütüphane nasıl yüklenir öğrenmek istiyorsanız tıklayınız.)
Bu kütüphane ile örneğimizi aşağıdaki şekilde değiştiriyoruz.
#include <LiquidCrystal_I2C_AvrI2C.h> LiquidCrystal_I2C_AvrI2C lcd(0x27,16,2); // 16 karakter 2 satır için - 20x4 satır için (0x27,20,4) yazın void setup() { lcd.begin(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("Hello, world!"); //İlk satıra yazalım lcd.setCursor(0,1); lcd.print("Arduino Rocks!"); //İkinci satıra yazalım } void loop() { }
Not: LiquidCrystal_I2C_AvrI2C lcd(0x27,16,2) satırındaki 0x27 sizin I2C arabiriminizin adresi olacaktır. Genelde 0x27 olmakla beraber bazen başka adreslerde olabiliyor. 0x27 çalışmazsa 0x3f deneyin. O da olmazsa bu adresi öğrenebileceğiniz bir kod var. Buraya tıklayıp onu deneyin öncesinde.