terog
Не смешные аналогии [ФЕЙК]
Вакцины это очень хорошо, но будет обидно если всё делается только ради прибыли.
Это свершилось
Ну наконец-то дождались третьей части терминатора.
Мы все-таки дожили)
Автоматический выбор адреса i2c дисплея LCD1602
Поделюсь небольшой хитростью.
У экранов i2c LCD1602 есть 2 основных адреса 0x27 и 0x3f, и нужный адрес надо указывать в коде. И тут появляется проблема, если потом на готовом устройстве заменить экран на экран с другим адресом то он показывать не будет.
В общем понадобилось мне эту проблему решить, и вот что у меня вышло:
1) в файле библиотеки LiquidCrystal_I2C.h надо вынести строку
uint8_t _Addr;
из секции привата в паблик.
вот так будет выглядеть
2) а в setup() самого скетча, перед инициализацией экрана, прописать кусок кода который будет автоматом определять нужный адрес и использовать его.
Вот так примерно должно получиться
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup()
{
//*******************автовыбор адреса дисплея между 0x27 и 0x3f
//*******************надо в библиотеке экрана поле _Addr вынести с привата в паблик
Wire.begin();
byte error, address;
address=0x3f;
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)lcd._Addr = address;
else{
address=0x27;
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)lcd._Addr = address;
}
//*******************************************
lcd.init();
lcd.backlight();
lcd.clear();
Не скажу что это супер полезная фича, но в определенных случаях ею можно сэкономить кучу времени.