Привет, друзья, я что-то делаю не так или у меня правда битый экран?
Выражается проблема в том, что если я что-то пытаюсь что-то выдать (или туда просто что-то попадает) в 16-ую ячейку первой или второй строки, то весь экран начинает отображать так, как будто по нему стукнули чем-то (т. е. точки в случайном порядке местами начинают иметь случайную яркость).
1 | for ( int i = 0; i < 15; i++) { |
Всё идеально заполняется. Но, если поменять в цикле i<16, то при заполнении 16-ого символа начинается глюк.
Аналогично, если просто выдать
такая же хрень с "битыми" пикселяеми.
На фото: 15 символов с обычной яркостью, 15 символов с выкрученной яркостью, 16 символов с обычной яркостью и с выкрученной (в 1 и 3 случае яркость одна и та же).
Что не так? :з

Предлагаю пересчитать по пальцам с нуля до шестнадцати. Если просветления не наступит - можно выложить то же обувью в коридоре...
2 Andrey_Y_Ostan
Пытался по-разному - вот босоножки, вот сапоги жены, вот мои сапоги... Получается, что у автора запроса с арифметикой все в порядке, чего не сказать о
2 noname1234
Ситуация необычная (для меня) и объяснения не имеет. Как "святую воду" посоветовал бы разобраться с питанием LCD.
Привет, друзья, я что-то делаю не так или у меня правда битый экран?
Выражается проблема в том, что если я что-то пытаюсь что-то выдать (или туда просто что-то попадает) в 16-ую ячейку первой или второй строки, то весь экран начинает отображать так, как будто по нему стукнули чем-то (т. е. точки в случайном порядке местами начинают иметь случайную яркость).
1
for
(
int
i = 0; i < 15; i++) {
2
lcd.setCursor(i, 0);
3
lcd.print(
"1"
);
4
lcd.setCursor(i, 1);
5
lcd.print(
"1"
);
6
delay(200);}
Всё идеально заполняется. Но, если поменять в цикле i<16, то при заполнении 16-ого символа начинается глюк.
Поскольку нумерация знакомест начтнается с 0, то знакоместо с номером 16 будет 17-м по счету, т.е. выходящем за пределы экрана. Такого варианта контроллер дисплея себе представить не может и его начинает глючить.
Вообще-то вполне может. На каждую строку у него выделяется буфер в примерно 40 символов, в том числе и для операций сдвига. И даже больше, если тупо писать за 40-й символ первой строки инфа появляется на второй строке сначалу.
Скорее всего какой-то глюк библиотеки или аппаратный косяк. Больше склонен к первому, потому как ковырял LiquidCrystal_I2C детально. Убожество, хотя сама поделка написана относительно грамотно.
Тут ещё есть момент: код и фото - не соответствуют друг другу. В коде выводится только символ "1", а на экране видим нечто иное .. но, если судить по описанию дефекта во второй части (строка с пробелами), то косяк явно аппаратный.
Предлагаю дождаться сообщения, где автор приведет его куски в однозначное соответствие.
а если просто проверить, без указания места для каждого символа, использовать перенос
1
lcd.setCursor(0, 0);
2
lcd.print(
"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"
);
3
delay(2000);}
Собрал все ботинки в доме, выложил в ряд сорок ботинок. Обошёл соседские дома, под недоумлённые взгляды соседей одолжил ещё сорок ботинок. Выложил всё в коридоре в два ряда и начал считать. Пинаю один ряд — всё чётко сдвигается. Пинаю второй ряд — всё чётко сдвигается. setShoe(16, 1) чётко располагает мой сланец в 16-ой позиции. Вовремя остановился, т. к. при сдвиге ботинок безвозвратно терялся, теперь придётся объяснять соседям, почему я возращаю только один ботинок из пары. Пытался сделать всё тоже самое с дисплеем — при выкладке шестнадцатого ботинка остальные начинали вонять и выглядили очень поношенными.
Друзья, спасибо всем за советы, всё оказалось банально — видать, матрица экрана просто отходила от контактов. Придавливал я её сначала просто так в сборе пальчиками, но не помогало. В итоге от безысходности отжал шесть фиксаторов, снял матрицу, полюбовался на отпечатки пальцев китайцев с другой стороны экрана, поставил обратно — всё чётко заработало. Такие дела.
Верно, на фото выводилось "1234567890123456". О " 1" я написал просто как о демонстрации того, что глюк проявлялся только при занятии 16-го знакоместа.