ЖК-дисплей 20x4 будет писать, но не будет обновляться

Я управляю солнечным трекером, и его нужно перезагружать каждые 10 минут, иначе он потеряет рассудок. Моя программа работает нормально, управляя силовыми реле, поэтому я добавил I2C&Power, чтобы иметь возможность удаленно видеть состояние. На данный момент он установлен на верстаке с помощью довольно коротких кабелей. У меня также есть RTC, и i2cscanner находит их все.

Код инициализации ЖК-дисплея довольно прост:

// ЖК-дисплей 20 x 4
#include LiquidCrystal_I2C.h
// устанавливаем адрес ЖК-дисплея на 0x3F для 20-символьного 4-строчного дисплея\/ Устанавливаем контакты на чипе I2C, используемом для подключения ЖК-дисплея:
// адрес, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 

тогда

lcd.begin(20,4);  
lcd.clear();
lcd.setCursor(2,0);
lcd.print("PV Control 3.9");

Мой ЖК-дисплей (20x4) сначала работает нормально, пишет в верхней строке название программы, затем в нижней строке показания температуры, затем каждые 10 минут мне нужна вторая строка, чтобы показывать, когда питание отключено на 10 секунд. Он отлично показывает «выключение», но после задержки (10000) предполагается перезаписать эту строку на «включение», но ничего не меняется...

Serial.println("POWER OFF");
lcd.setCursor(4,1);
lcd.print("-Power Off- ");
digitalWrite(power1,HIGH);  // Выключение питания DC HOUSE
digitalWrite(power2,HIGH);  // Выключение питания DC HOUSE
delay(10000);   
Serial.println("POWER ON");
lcd.setCursor(4,1);
lcd.print("-Power On-  ");
digitalWrite(power1,LOW);  // Включение питания DC HOUSE
digitalWrite(power2,LOW);  // Включение питания DC HOUSE

Проблема в том, что он продолжает говорить «выключить питание» и не перезаписывает его.

С помощью последовательного монитора я вижу, что программа работает нормально, но ЖК-дисплей не меняется после первого набора lcd.prints в этих позициях символов.

Я не слышал ни о ком, сталкивавшемся с такой проблемой, но, возможно, кто-то знает об этом. Любые предложения будут очень приветствоваться.

Вопрос: как мне обновить строки ЖК-дисплея, которые были записаны изначально?


ОБНОВЛЕНИЕ: Проблема решена простой очисткой и перезаписью дисплея, когда что-то меняется. Я не могу отлаживать библиотеки, но, по крайней мере, сейчас они работают.

, 👍0

Обсуждение

его нужно перезагружать каждые 10 минут, иначе он сойдет с ума - я не знаком с электронными устройствами, теряющими рассудок, так сказать. Можете ли вы уточнить? Что касается других ваших проблем, невозможно ответить, не видя вашего кода., @Nick Gammon

Пожалуйста, опубликуйте код, который не работает, иначе на ваш вопрос невозможно ответить. Также было бы полезно узнать точный номер вашего ЖК-дисплея (они не все одинаковые). Наконец, схема подключения также может оказаться полезной., @jfpoilpret

Пытались ли вы изолировать проблему, то есть удалить все остальные датчики и оставить только код, который обрабатывает обновления дисплея в определенное время?, @jfpoilpret

Ха. Потеря рассудка означает, что он становится невосприимчивым – в коме. Полагаю, меня можно критиковать за антропоморфизацию компьютерного оборудования. :, @SDsolar

Если вы посмотрите выше, вы увидите, что исходный код довольно прост. И проблема решилась простой очисткой дисплея и его перезаписью., @SDsolar

Я согласен с SDsolar. Я прочитал вопрос, прочитал решение и доволен ответом SDsolar. Больше ничего не нужно, @Bob Found


1 ответ


Лучший ответ:

-1

Ага. Я решил это с помощью lcd.clear() и просто перерисовкой всего дисплея при каждом изменении. У меня есть гораздо более простые программы для ЖК-дисплеев, которые не требуют этого, но в данном случае это сработало.

Тот же код, что и выше, но с этим перед каждым уведомлением о питании:

lcd.clear();
lcd.setCursor(2,0);
lcd.print("PV Control 3.9");

и т.д...


ОБНОВЛЕНИЕ: Теперь, когда у меня есть два ЖК-экрана 20x4, на которых отображаются показания с двух отдельных Arduino (управление фотоэлектрическими модулями и метеостанция), я обнаружил, что очень важно свести запись на экран к минимуму. Например, никаких задержек между записью частей экрана (например, когда у меня были операторы Serial.print для отладки), выполнение всех показаний и вычислений перед записью на экран, а также нечастое обновление экрана, например, порядка 65 секунд для погоды и 10 минут для фотоэлектрических модулей. I2C не имеет функции обнаружения столкновений, поэтому важно попытаться предотвратить одновременное обновление двух экранов. Схема I2C&Power работает отлично. Для активации всей сети достаточно одного источника питания.

,

Ни вопрос, ни этот ответ не добавляют особой ценности сайту. У вас есть неуказанный ЖК-дисплей с неуказанной библиотекой, вызываемый кодом, который вы не опубликовали. Ваше решение не проясняет, почему это необходимо в этом случае, а не в других случаях., @Nick Gammon

@Gammon, вы, должно быть, не прочитали вопрос.. Предлагаю вам прокрутить назад и посмотреть. Между тем, проблема решается очисткой и перезаписью дисплея. У меня нет опыта отладки библиотек, но, по крайней мере, теперь это работает., @SDsolar

Я вижу, что проезжающий мимо проголосовал против этого ответа. Я этого не понимаю. Суть в том, что этот ответ решил проблему. Дети некоторых людей....., @SDsolar

@Gammon, по поводу добавления ценности сайту: Для меня это добавило много ценности. Я могу быть не таким, как вы, поэтому мы можем прийти к разным выводам. Ваш комментарий о том, что это не добавляет большой ценности, по крайней мере достаточно проанализирован, чтобы не быть абсолютным, но есть много разных уровней людей, использующих эту информацию. Почему бы не записать наш опыт?, @SDsolar