Обойти инициализацию дисплея 1602

Meteoros
Offline
Зарегистрирован: 01.06.2018

Всем привет, нужна помощь как сделать чтобы обойти инициализацию дисплея lcd.init(), задача в след есть некое устройство и дисплей для информации ему не всегда нужен и питание отключено от Дисплея механически, но иногда его включаю и смотрю инфорцию, устройство работает не постоянно,
его запускает др. Устройство. Получается что когда дисплей отключен, при включении код стопорится на lcd.init, как убрать эту проблему чтобы без доп кнопок можно было пропустить данную функцию, тк с кнопкой понятно, ставим условие и готово. Можно как то исправить в библиотеке, чтобы ардуино один раз проверила наличие дисплея, если его нет, пошла дальше по коду

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

если дисплей по i2c подключен, проверяй, что если его адрес по шине не отвечает, значит дисплея нет. 

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

pinMode(PIN,INPUT_PULLUP);

//...

if(!digitalRead(PIN)) lcd.init();

else { /*do nothing*/ }

Провод PIN - коллектор NPN или nFET транзистора, затвор/база которого воткнута в тот провод от которого питается экран. Эмиттер/исток общий (минус).

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Voodoo Doll пишет:

pinMode(PIN,INPUT_PULLUP);

//...

if(!digitalRead(PIN)) lcd.init();

else { /*do nothing*/ }

Провод PIN - коллектор NPN или nFET транзистора, затвор/база которого воткнута в тот провод от которого питается экран. Эмиттер/исток общий (минус).

Если я все верно понял, то получается - пока дисплей включён постоянно его инициализируем. Зачем? Как минимум флаг что уже проинициализирован надо. И использовать его везде, где надо выводить на дисплей. 


pinMode(PIN, INPUT_PULLUP);
bool is_init = false;
//...

void loop() {
  //...
  if (!digitalRead(PIN) && !is_init) {
    lcd.init();
    // lcd.begin(16, 2); // или так, я точно не знаю
    is_init = !is_init;
  } 
  if (digitalRead(PIN) && is_init) { // как эту конструкцию общую с певым if короче записать?
    is_init = !is_init;
  }
  //...
  if (is_init) {
    lcd.setCursor(0, 0);
    lcd.print(peremennaya); // выводим на дисплей что нужно
  }
  //...
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

BOOM, скорее надо переписывать библиотеку.И при каждом обращении к дисплею определять наличие. Если появился то инициализировать, если нет то забивать на выполнение. Но надо ли это ТС. ТС просто от лени большой создал тему и свалил.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Включение дисплея отдельно как предложил Voodoo Doll  тоже вроде подходит. Так сказать аппаратный опрос дисплея, без переписывания библиотеки. )

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

BOOM пишет:

Включение дисплея отдельно как предложил Voodoo Doll  тоже вроде подходит. Так сказать аппаратный опрос дисплея, без переписывания библиотеки. )

Но пользовательский код переписывается. А так подправил библиотеку а код остался старый.

https://www.youtube.com/watch?v=CsSQckMQxrc

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Так то да, это если дисплей по iic подключён, как я понимаю? Или и напрямую по 4х проводной линии его как то можно мониторить?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

BOOM пишет:

Так то да, это если дисплей по iic подключён, как я понимаю? Или и напрямую по 4х проводной линии его как то можно мониторить?

http://adatum.ru/skaner-shiny-i2c-dlya-arduino.html

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Квон, внимательность не твой конёк в этом часе))) Я ж спросил не про i2c, а про 4х (8ми) проводное подключение напрямую. Без i2c. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

BOOM пишет:

Квон, внимательность не твой конёк в этом часе))) Я ж спросил не про i2c, а про 4х (8ми) проводное подключение напрямую. Без i2c. 

Ну да. Я такие термины не понимаю. Сказали прямое подключение. Так прямо и читали бы регистры из микросхемы. Если FF то экран "украли"