LCD 1604 и LiquidCrystal_I2C
- Войдите на сайт для отправки комментариев
Пт, 16/03/2018 - 12:34
Может пригодится кому...
Купил у китайцев пару дисплеев 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])); }
Спасибо! Постоянно пользуюсь этими индикаторами - приходится колдовать.