terog

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

Автоматический выбор адреса 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
Отличная работа, все прочитано!