terog

Пикабушник
поставил 43248 плюсов и 1158 минусов
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
5 лет на Пикабу
5030 рейтинг 0 подписчиков 12 подписок 5 постов 1 в горячем

А что если...

А что если...

Свят свят свят

Свят свят свят

Не смешные аналогии [ФЕЙК]

Вакцины это очень хорошо, но будет обидно если всё делается только ради прибыли.

Не смешные аналогии [ФЕЙК] Cyberpunk 2077, Вакцина

Это свершилось

Ну наконец-то дождались третьей части терминатора.

Мы все-таки дожили)

Автоматический выбор адреса i2c дисплея LCD1602

Поделюсь небольшой хитростью.


У  экранов i2c LCD1602 есть 2 основных адреса 0x27 и 0x3f, и нужный адрес надо указывать  в коде. И тут появляется проблема, если потом на готовом устройстве заменить экран на экран с другим адресом то он показывать не будет.

В общем понадобилось мне эту проблему решить, и вот что у меня вышло:

1)  в файле библиотеки LiquidCrystal_I2C.h надо вынести строку

uint8_t _Addr; 

из секции привата в паблик.

вот так будет выглядеть

Автоматический выбор адреса i2c дисплея LCD1602 Arduino, Дисплей

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();



Не скажу что это супер полезная  фича, но в определенных случаях ею можно сэкономить кучу времени.

Показать полностью 1
Отличная работа, все прочитано!