Всем привет! не могу найти рабочую библиотеку для LCD. проблема следующая если использовать библиотеку для 1602 или 2004 происходит сдвиг в третьей и четвертой строчке на 4 символа. к примеру lcd.setCursor (0, 3); lcd.print (tmax); то он выведет переменную на экране в четвертой строке с пятого символа а если написать так lcd.setCursor (16, 2); lcd.print (tmax); то вывод будет как и положено в четвертой строке с первого символа! как будто он определяет что у меня стоит экран 2004 если кто встречался с такой проблемой поделитесь ее решением чтобы не было сдвигов! не хотелось бы колхозить в коде!!!
как в анекдоте "если третий муж бьет по морде, значит дело не в муже" отлаживайте код - в нем проблема
ВОзможно у вас проблемы с кодом, которого тут никто не увидел. Я пробовал оба дисплея на одной и той же библиотеке и все нормально работает.
)))) самое интересное что эту библиотеку я и ставил!! а еще ради интереса провел сегодня эксперемент утром который показал что дело точно не в коде! если подключить дисплей обычным способом, то есть не по I2C естественно используется другая библиотека то все нормально и корректно работает!!!))) код остался тем же изменилась только библиотека и инициализация дисплея.
Так и не увидел никто не библиотеки,ни схемы подключения, фото, кода. Вообщем вам виднее. А мысли мы читать не умеем. ps\ Раз уверен что дело не в LCD, а в драйвере I2C для него , то его и поменяй.
добрый день сделал все как и просили!! итак полная информация! использую обычный ардуино нано (леонардо), i2c LCD (заказывал в китаии), LCD winstar 1604 программа Arduino IDE 1.6.5, и библиотека была взята из описания выше, оттуда же я взял кусок кода виде примера. Итак я подключаю библиотеку набираю код и заливаю // Arduino IDE 1.6.5 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f,16,4); /* Задаем адрес и размерность дисплея. При использовании LCD I2C модуля с дисплеем 16х4 ничего в коде изменять не требуется, cледует только заменить цифру отвечающую за количество сторок */ void setup() { lcd.init(); // Инициализация LCD lcd.clear (); delay (500); lcd.backlight(); // Включаем подсветку lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки lcd.print("Z-LCD I2C 2004"); // Выводим текст lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("module"); // Выводим текст lcd.setCursor(0, 2); // Устанавливаем курсор в начало 3 строки lcd.print("12345678"); // Выводим текст lcd.setCursor(0, 3); // Устанавливаем курсор в начало 4 строки lcd.print("zelectro.cc"); // Выводим текст } void loop() { } в результате получаю следующий картинку на экране. затем делаю простое подключение дисплея не через I2C LCD, делаю правки в коде // Arduino IDE 1.6.5 //#include <Wire.h> //#include <LiquidCrystal_I2C.h> #include <LiquidCrystal.h> // Лобавляем необходимую библиотеку LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) //LiquidCrystal_I2C lcd(0x3f,16,4); /* Задаем адрес и размерность дисплея. При использовании LCD I2C модуля с дисплеем 16х4 ничего в коде изменять не требуется, cледует только заменить цифру отвечающую за количество сторок */ void setup() { lcd.begin(16, 4); // Задаем размерность экрана //lcd.init(); // Инициализация LCD lcd.clear (); delay (500); //lcd.backlight(); // Включаем подсветку lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки lcd.print("Z-LCD I2C 2004"); // Выводим текст lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("module"); // Выводим текст lcd.setCursor(0, 2); // Устанавливаем курсор в начало 3 строки lcd.print("12345678"); // Выводим текст lcd.setCursor(0, 3); // Устанавливаем курсор в начало 4 строки lcd.print("zelectro.cc"); // Выводим текст } void loop() { } и в результате получаю нормальную картинку на LCD
Взято как я понял отсюда?Что в первом скетче означает LiquidCrystal_I2C lcd(0x3f,16,4);?Меня интересует именно 0x3f
Эт понятно.Куда он у Вас подключается и как Вы этот адрес "вычислили"?Со скетчем вроде всё в порядке жаль нет такого индикатора а то проверил бы.ИМХО с адресом какая то шняга.С адресом "автора" пробовали?
Возможно все дело в вашем "неправильном" дисплее. Обычно дисплеи идут 16х2 и 20х4. Есть подозрение, что при выводе последних двух строк дисплей работает в режиме 20х4 Поэтому и сдвигает именно на 4 (!) позиции. Например у чела такая же проблема: http://geekelectronics.org/arduino/podklyuchenie-ekrana-k-arduino.html В общем проблема или в библиотеке или в модуле i2c. Несовместимые они с 16х4.
на самом деле после недели экспериментов к такому выводу я и пришел!)))) просто заказал новый дисплей и новый модуль i2c когда придет буду пробовать снова!))))
та же проблема была со сдвигом на 4 символа. заморачиваться не стал, просто для строк 2 и ниже отпозиционировал курсор на -4 позицию. такой вот армейский способ: float levelV2 = (25 - levelH2)*0.4; lcd.setCursor(-4, 2); lcd.print("E2(MCAA) ="); lcd.print(levelV2); lcd.print("L"); и стало мне хорошо)
Всем привет) Возможно не вовремя, но хочу поделится ещё одним решением, если кому-нибудь не хочется заморачиваться с отрицательными числами. Необходимо в файле LiquidCrystal_I2C.cpp в методе send перед строкой uint8_t highnib=value&0xf0; добавить строку if ((value>=0x94) && (value<=0xa3) || (value>=0xd4) && (value<=0xe3)) {value-=0x04;}