Выбор адреса i2c для lcd дисплея (0x27 | 0x3F) перемычкой

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

Пришли два дисплея 1602 от разных продавцов, так вот у одного стоит PCF8574 у другого PCF8574A. Понятно, что адреса разные.

Вот я подумал - А можно ли путём соединения пинов меги к + или gnd выбрать соответсвующий адрес?

Идея отличная, но у меня ничего не получилось. Объект дисплея создаётся до блока Setup, адрес передаётся в конструктор. Использовать digitalRead() до блока setup ide не даёт.

Вопрос: Как-то это можно все-таки сделать? Или «дохлый номер»?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ты че маленький?

private:
  void init_priv();
  void send(uint8_t, uint8_t);
  void write4bits(uint8_t);
  void expanderWrite(uint8_t);
  void pulseEnable(uint8_t);
  uint8_t _Addr;

вынеси в библе адрес в паблик и меняй как хошь.

или допиши функцию которая будет это делать.

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

То есть вмешаться в код библиотеки предлагаешь? Ну как вариант...

А больше вариантов нет?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

я не помню пусть меня поправят

унаследуй свой класс от библиотечного, и вот тут я не помню, приваты будут доступны или нет... 

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

На сколько я знаю - не должны.

Ладно, не принципиально - перепишу библиотеку - добавлю метод.

А с чем связано, что ide не даёт вне блоков setup и loop использовать digitalRead, if и т.д.? Религия?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

BOOM пишет:

А с чем связано, что ide не даёт вне блоков setup и loop использовать digitalRead, if и т.д.? Религия?

С тем, что то, что "вне блоков setup и loop" из main не вызывается.

b707
Offline
Зарегистрирован: 26.05.2017

BOOM пишет:

А с чем связано, что ide не даёт вне блоков setup и loop использовать digitalRead, if и т.д.? Религия?


у меня дает

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

b707 пишет:
BOOM пишет:

А с чем связано, что ide не даёт вне блоков setup и loop использовать digitalRead, if и т.д.? Религия?

у меня дает

Каким образом?

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

andriano пишет:

BOOM пишет:

А с чем связано, что ide не даёт вне блоков setup и loop использовать digitalRead, if и т.д.? Религия?

С тем, что то, что "вне блоков setup и loop" из main не вызывается.

Но глобальные переменные создаются. Была мысль на main переделать, но уже все решил. Три строчки кода в библиотеке (новая функция setAddr(uint8_t addr) ).

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

На МК все происходит немного по-другому, чем на ПК.

Если на ПК сначала происходит инициализация железа и загрузка драйверов, и только потом запуск прикладной программы, работа которой начинается с инициализации глобальных переменных и только потом идет первый исполняемый оператор [прикладной программы], то на МК инициализация переменных происходит также до первого исполняем ого оператора, но дело в том, что инициализацию железа также выполняют исполняемые операторы, т.е. конструкторы отрабатывают раньше инициализации железа и об этом надо помнить при написании конструкторов. Недаром кроме конструктора основную роль в настройке зачастую играют методы, называемые setup или init. Вот они уже явно вызываются из программы после того, как железо самого МК уже инициализировано.