LCD 1604 и LiquidCrystal_I2C

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Может пригодится кому...
Купил у китайцев пару дисплеев 1604, присобачил всем известную плату-переходник на I2C и получил некорректный вывод текста по позиции, указанной с помощью lcd.setCursor. При выводе одинакового текста в каждую строку, с нулевой позиции - в два верхних ряда выводится правильно, а в два нижних - со сдвигом в 4 символа. Для устранения можно lcd.setCursor заменить на такой "костыль" -

void setCursor(int col, int row) {
  (row < 2) ? (lcd.setCursor(col, row)) : (lcd.setCursor(col - 4, row));
}

можно залезть в библиотеку и в файле LiquidCrystal_I2C.cpp найти lcd.setCursor и немного подправить -

void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){
  int row_offsets[] = { 0x00, 0x40, 0x10, 0x50 };
  if(_cols == 20) {
     row_offsets[2] = 0x14;
     row_offsets[3] = 0x54;
    }
  if(row > _rows) {
     row = _rows-1;    // we count rows starting w/0
  }
  command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}
borisych
Offline
Зарегистрирован: 21.02.2018

Спасибо! Постоянно пользуюсь этими индикаторами - приходится колдовать.