Liquid crystal i2c


Добрый день.
Активно пользуюсь вашей библиотекой для UNO/Nano, сейчас есть проект на ESP32. Но запустить не получается. При попытке компиляции множество ошибок. Подскажите, это как то возможно поправить или лучше поискать другую библиотеку? По факту, для ЕСП32 не так то просто оказалось найти работающую.
C:UsersUserDocumentsArduinolibrariesLiquidCrystal_I2C_Menu-masterLiquidCrystal_I2C_Menu.cpp: In member function 'void LiquidCrystal_I2C_Menu::printMultiline(const char*)':

C:UsersUserDocumentsArduinolibrariesLiquidCrystal_I2C_Menu-masterLiquidCrystal_I2C_Menu.cpp:345:85: error: no matching function for call to 'min(uint8_t&, size_t)'

for (uint8_t i = 0; i < min(_rows, (strlen(str) + lineLength — 1) / lineLength); i++) {

^

In file included from c:usersuserappdatalocalarduino15packagesesp32toolsxtensa-esp32-elf-gcc1.22.0-80-g6c4433a-5.2.0xtensa-esp32-elfincludec++5.2.0algorithm:62:0,

from C:UsersUserAppDataLocalArduino15packagesesp32hardwareesp321.0.4coresesp32/Arduino.h:142,


from C:UsersUserDocumentsArduinolibrariesLiquidCrystal_I2C_Menu-masterLiquidCrystal_I2C_Menu.cpp:3:

c:usersuserappdatalocalarduino15packagesesp32toolsxtensa-esp32-elf-gcc1.22.0-80-g6c4433a-5.2.0xtensa-esp32-elfincludec++5.2.0bitsstl_algo.h:3451:5: note: candidate: template _Tp std::min(std::initializer_list<_Tp>, _Compare)

min(initializer_list<_Tp> __l, _Compare __comp)

^

c:usersuserappdatalocalarduino15packagesesp32toolsxtensa-esp32-elf-gcc1.22.0-80-g6c4433a-5.2.0xtensa-esp32-elfincludec++5.2.0bitsstl_algo.h:3451:5: note: template argument deduction/substitution failed:

C:UsersUserDocumentsArduinolibrariesLiquidCrystal_I2C_Menu-masterLiquidCrystal_I2C_Menu.cpp:345:85: note: mismatched types 'std::initializer_list<_Tp>' and 'unsigned char'

for (uint8_t i = 0; i < min(_rows, (strlen(str) + lineLength — 1) / lineLength); i++) {

^

In file included from c:usersuserappdatalocalarduino15packagesesp32toolsxtensa-esp32-elf-gcc1.22.0-80-g6c4433a-5.2.0xtensa-esp32-elfincludec++5.2.0algorithm:62:0,

from C:UsersUserAppDataLocalArduino15packagesesp32hardwareesp321.0.4coresesp32/Arduino.h:142,

from C:UsersUserDocumentsArduinolibrariesLiquidCrystal_I2C_Menu-masterLiquidCrystal_I2C_Menu.cpp:3:

c:usersuserappdatalocalarduino15packagesesp32toolsxtensa-esp32-elf-gcc1.22.0-80-g6c4433a-5.2.0xtensa-esp32-elfincludec++5.2.0bitsstl_algo.h:3445:5: note: candidate: template _Tp std::min(std::initializer_list<_Tp>)


min(initializer_list<_Tp> __l)

^

c:usersuserappdatalocalarduino15packagesesp32toolsxtensa-esp32-elf-gcc1.22.0-80-g6c4433a-5.2.0xtensa-esp32-elfincludec++5.2.0bitsstl_algo.h:3445:5: note: template argument deduction/substitution failed:

C:UsersUserDocumentsArduinolibrariesLiquidCrystal_I2C_Menu-masterLiquidCrystal_I2C_Menu.cpp:345:85: note: mismatched types 'std::initializer_list<_Tp>' and 'unsigned char'

for (uint8_t i = 0; i < min(_rows, (strlen(str) + lineLength — 1) / lineLength); i++) {

ОтветитьУдалить

Источник: tsibrov.blogspot.com

Для строчных дисплеев Winstar очень соблазнительно сократить число управляющих соединений, которых даже при четырехпроводном включении получается не меньше шести (R/W можно не подключать, см. вот эту публикацию автора). Говорят (в том числе и сами винстары, см. оф. сайт), что контроллер WS0010 может управляться по SPI (а некоторые даже и по I2C!), но инструкций в документации на эту тему упорно не помещают, и как с этим управляться — непонятно. К тому же SPI помогает не сильно — вместо шести соединений получаем четыре привязанных к дисплею, потому что еще для каких-то целей SPI в любительской практике употребляют нечасто. Потому самое удобное решение в плане сокращения числа соединений для стандартных плат Arduino — использовать так называемый расширитель (экспандер) портов на основе шины I2C под названием PCF8574. Это позволяет сократить число необходимых соединений до двух (не считая питания), причем на основе выводов стандартного порта TWI, что не мешает подключать к нему же различные датчики, часы и т.п.


Вообще-то микросхема PCF8574 может быть приспособлена к большому количеству самых разных применений (считывание кнопок, засвечивание светодиодов и т. п.). В режиме записи микросхема при этом напрямую транслирует значение битов в переданном по шине I2C байте в состояние восьми выходов (при чтении, наоборот, состояние восьми линий передается в передаваемый байт). I2C-адрес в PCF8574 может меняться установкой уровня на трех входах задания адреса, так что с помощью одной шины по двум проводам можно устанавливать или читать состояние до 64 линий. В этом деле имеются некоторые особенности из-за несимметрии состояний «0» и «1» выводов параллельного порта PCF8574, причем как при работе на вход, так и на выход (см. здесь), но нашей задаче управления ЖК- или OLED-дисплеями по шине I2C они не помешают.

Нет даже необходимости разводить переходную плату для дисплеев самостоятельно. Специально для управления HD44780-совместимыми дисплеями выпускаются многочисленные разновидности модулей-переходников (см. фото). По одному краю у них установлен игольчатый однорядный разъем типа PLS, разводка которого позволяет напрямую стыковать такой модуль с ЖК- или OLED-дисплеем.


Если при этом ориентировать модуль так, чтобы вывод модуля номер 1 (отсчет ведется от входного разъема, см. фото выше) совпадал с выводом 1 дисплея, то плату-переходник можно установить прямо на плату дисплея так, как показано на фото ниже (фото с сайта 9zip.ru). При этом, конечно, должен совпадать и шаг выводов и сам тип разъема. Поэтому среди распространенных строчных OLED-дисплеев Winstar так, как на картинке, подключить можно только типы WEH1602A и 2004A, для типа 1602B модуль придется поворчивать на 180, а для любимых народом 2002A/B и 1202/1204 изготавливать переходные кабелЯ.

Разводка выводов для случая OLED-дисплея показана в таблице. Если вы хотите вместо готового модуля самостоятельно подключить микросхему (что позволит уменьшить габариты), но собираетесь использовать описанную далее библиотеку, то по этой таблице можно также определить правильное подключение «голой» микросхемы. Отметим, что фактически здесь используется четырехпроводная схема подключения дисплея и биты DB0-DB3 не подключены никуда, поэтому в таблице обозначены серым цветом.

Разводка выводов при подключении PCF8574 и модуля на ее основе к OLED-дисплею

Синенький подстроечный резистор, а также перемычка на торце платы, которые видны на фото, предназначены для управления подсветкой в ЖК-дисплеях (выводы 15 и 16) и в нашем случае не задействуется. (Кстати, то же самое относится к биту Р3 выходного порта PCF8574, который в нашем случае не используется.) Поэтому при подключении напрямую OLED-дисплея 1602B, у которого выводы 15 и 16 находятся перед выводом 1, их можно просто не подключать (а у модуля при этом 15 и 16 выводы придется удалить, чтобы не мешались).


Под этим резистором на плате имеются контакты A0, A1 и A2 для задания младших битов I2C-адреса. По умолчанию они подключены к высокому уровню, поэтому адрес имеет наибольшее возможное значение из заданного диапазона. Микросхемы PCF8574 выпускаются в нескольких модификациях, отличающихся этим диапазоном. Для PCF8574 без буквенного индекса (или у PCF8574Т) адрес по умолчанию будет равен 0x27, и может меняться в меньшую сторону до 0x20. У PCF8574A адрес по умолчанию равен 0x3F и меняется до 0x38.

Для работы с дисплеем, подключенным через PCF8574 по I2C-интерфейсу, имеется рекомендованная библиотека под названием LiquidCrystal_I2C (см. официальный сайт arduino.cc). Разумеется, как и оригинальная LiquidCrystal, она работает только с английским языком. Русскоязычных версий ее не имеется (по крайней мере, таких, которые бы уверенно работали в современных версиях Arduino IDE), и вариант для работы с OLED-дисплеем тоже отсутствует. Поэтому автор взял на себя труд доработки, приняв за исходный самый простой из вариантов LiquidCrystal_I2C.

Очевидным методом русификации было бы объединить LiquidCrystal_I2C и LiquidCrystalRus, доработав последнюю в части инициализации OLED-дисплеев. Но лобовое решение здесь не прокатывает — в I2C-режиме LiquidCrystalRus выводит только первую букву посланной через функцию print() строки. С чем это связано, я разбираться не стал, попросту дополнив библиотеку LiquidCrystal_I2C своей функцией вывода outStr(), которая отбрасывает старший байт кодировки UTF-8, а младший перекодирует в символ из внутренней таблицы ENGLISH_RUSSIAN (0x02) контроллера WS0010.


Исправленную и дополненную версию под названием LiquidCrystal_I2C_OLED можно скачать отсюда. Если строка не содержит русских букв, то ее следует выводить обычной функцией print(), которая работает быстрее. Значок градуса, а также буквы «ё» и «Ё» выводить можно только прямым указанием восьмеричных кодов (например, «всё» — «вс265», «22,5°» — «22,5337», см. таблицу далее). Примеры вывода имеются в папке examples (не забудьте сменить адрес микросхемы PCF8574, если у вас версия, отличная от PCF8574A или адрес изменен переключением бит модификации). Пример вывода русского алфавита на дисплей конфигурации 1602 (микросхема PCF8574A, адрес по умолчанию 0x3F):

#include <Wire.h>  #include <LiquidCrystal_I2C_OLED.h> LiquidCrystal_I2C OLED1(0x3F,16,2); // Устанавливаем дисплей void setup() {   OLED1.init();   OLED1.clear();  OLED1.print("Proba"); //вывод английского  OLED1.setCursor(7, 0); //середина верхней строки  OLED1.outStr("Проба"); //вывод русского  OLED1.setCursor(7, 1);//середина нижней строки  OLED1.print("-22,3337C"); //"-22,3°C"  delay(1000); } void loop() {//для дисплея 16х2 или 20х2!!!!  OLED1.setCursor(0, 0); //начало верхней строки  OLED1.outStr("АБВГДЕЖЗИЙКЛМНОП");  OLED1.setCursor(0, 1);//начало нижней строки  OLED1.outStr("абвгдежзийклмноп");  delay(2000);  OLED1.setCursor(0, 0); //начало верхней строки  OLED1.outStr("РСТУФХЦЧШЩЪЫЬЭЮЯ");  OLED1.setCursor(0, 1);//начало нижней строки  OLED1.outStr("рстуфхцчшщъыьэюя");  delay(3000); }   

Корректный результат вывода первой половины алфавита показан на фото:

результат вывода алфавита

Подчеркнем, что такая русифицированная библиотека (как и LiquidCrystalRus, кстати) предназначена для работы в современных версиях Arduino IDE (начиная примерно с 1.6.1 и далее) в среде Windows 7/8/10. В среде Arduino IDE 1.0, а также в других редакторах и ОС, работающих в однобайтовой кодировке win1251 (ANSI, cp1251), эти библиотеки прямой русский текст в строке не воспринимают. В этом случае следует пользоваться функцией print() с указанием восьмеричных кодов русских букв, согласно таблице ниже, только библиотеку все равно придется использовать эту (либо доработать LiquidCrystal_I2C для переключения в таблицу ENGLISH_RUSSIAN при инициализации, см. здесь). В контроллере WS0010 применен экономичный метод кодирования — вводятся только русские буквы, не совпадающие с английскими по начертанию. Например, «суббота» будет выглядеть, как «cy262262o277a».

Коды кириллических символов и значка градуса для контроллера WS0010 (таблица ENGLISH_RUSSIAN, код 0x02)


Коды кириллических символов для контроллера WS0010

Признаком того, что ваша среда/редактор выдает вместо UTF-8 однобайтную кодировку win1251 будет вывод вместо «А» — «ч», вместо «а» — «Д» и т. п. (фото прислал Tomasina):

Результаты вывода текста в кодировке cp1251

Если не справитесь с выяснением причин, откуда в современных средах под Windows берется однобайтовая кодировка, то остается только либо воспользоваться прямым выводом кодов, как указано выше, либо просто изменить в моей функции outStr() по очереди все коды младшего байта UTF-8 на код из таблицы win1251. Например, оператор case 0x90 (заглавная «А») заменяем на case 0xC0 и так далее, при этом строки, фильтрующие старший байт (case 0xd0: break; и case 0xd1: break;) необходимо удалить.

Источник: habr.com

В ардуино не силен, поэтому не судите строго. Вопрос такой:
подключаю к arduino pro micro LCD 1602  через модуль I2C. Модуль хорошо работает только с библиотекой Arduino-LiquidCrystal-I2C-library-master.

Есть такой проект http://arduino.ru/forum/proekty/lcd-smartie-arduino-problema 

https://www.milesburton.com/LCD_Smartie_Powered_By_Arduino_Liquid_Crystal_library  который написан с библиотекой LiquidCrystal.
Как код с библиотекой LiquidCrystal адаптировать под Arduino-LiquidCrystal-I2C ?


Инициализацию в начале кода:

#include <LiquidCrystal.h>
const int numRows = 2;
const int numCols = 16;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

меняю на:

#include <LiquidCrystal_I2C.h>
const int numRows = 2;
const int numCols = 16;
LiquidCrystal_I2C lcd(0x27, 16, 2);

Затем arduino ide 1.8.9 ругается на строку 017: lcd.begin(numRows, numCols);

Что нужно исправить в коде, чтобы работало под Arduino-LiquidCrystal-I2C 
?

 // include the library code: #include <LiquidCrystal.h>  // these constants won't change. But you can change the size of // your LCD using them: const int numRows = 2; const int numCols = 16;  // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // RS, RW, Enable, 4,5,6,7 (Refer to the back of your LCD for details)   void setup() {   Serial.begin(9600);  // set up the LCD's number of rows and columns:   lcd.begin(numRows, numCols);  lcd.clear();  lcd.setCursor(0,0);  lcd.print("**LCD SMARTIE**");  lcd.setCursor(0,1);  lcd.print("on Arduino"); }  byte serial_getch(){   int incoming;   while (Serial.available()==0){  }  // read the incoming byte:  incoming = Serial.read.  

  
set up case 2: temp += 0x40; break; case 3: temp += 0x14; break; case 4: temp += 0x54; break; default: break; } lcd.command(0b10000000 + temp); break; case 72: //cursor home (reset display position) lcd.command(2); break; case 74: //show underline cursor lcd.command(0b00001110); break; case 75: //underline cursor off case 84: //block cursor off lcd.command(0b00001100); break; case 76: //move cursor left lcd.command(16); break; case 77: //move cursor right lcd.command(20); break; case 78: //define custom char lcd.command(64 + (serial_getch() * 8)); //get+set char address for (temp = 7; temp != 0; temp--) { lcd.print((char)serial_getch()); //get each pattern byte } break; case 83: //show blinking block cursor lcd.command(0b00001111); break; case 86: //GPO OFF //implement later break; case 87: //GPO ON /*temp = serial_getch(); if (temp == 1) { GPO1 = GPO_ON; }*/ break; case 88: //clear display, cursor home lcd.command(1); break; case 152: //set and remember (doesn't save value, though) case 153: //set backlight brightness //not implemented break; //these commands ignored (no parameters) case 35: //read serial number case 36: //read version number case 55: //read module type case 59: //exit flow-control mode case 65: //auto transmit keypresses case 96: //auto-repeat mode off (keypad) case 67: //auto line-wrap on case 68: //auto line-wrap off case 81: //auto scroll on case 82: //auto scroll off case 104: //init horiz bar graph case 109: //init med size digits case 115: //init narrow vert bar graph case 118: //init wide vert bar graph break; default: //all other commands ignored and parameter byte discarded temp = serial_getch(); //dump the command code break; } return; } //END OF COMMAND HANDLER //change accented char to plain, detect and change descenders //NB descenders only work on 5x10 displays. This lookup table works // with my DEM-20845 (Display Elektronik GmbH) LCD using KS0066 chip. switch (rxbyte) { //chars that have direct equivalent in LCD charmap /* case 0x67: //g rxbyte = 0xE7; break; case 0x6A: //j rxbyte = 0xEA; break; case 0x70: //p rxbyte = 0xF0; break; case 0x71: //q rxbyte = 0xF1; break; case 0x79: //y rxbyte = 0xF9; break; */ case 0xE4: //ASCII "a" umlaut rxbyte = 0xE1; break; case 0xF1: //ASCII "n" tilde rxbyte = 0xEE; break; case 0xF6: //ASCII "o" umlaut rxbyte = 0xEF; //was wrong in v0.86 break; case 0xFC: //ASCII "u" umlaut rxbyte = 0xF5; break; //accented -> plain equivalent //and misc symbol translation case 0xA3: //sterling (pounds) rxbyte = 0xED; break; /* case 0xB0: //degrees symbol rxbyte = 0xDF; break; */ case 0xB5: //mu rxbyte = 0xE4; break; case 0xC0: //"A" variants case 0xC1: case 0xC2: case 0xC3: case 0xC4: case 0xC5: rxbyte = 0x41; break; case 0xC8: //"E" variants case 0xC9: case 0xCA: case 0xCB: rxbyte = 0x45; break; case 0xCC: //"I" variants case 0xCD: case 0xCE: case 0xCF: rxbyte = 0x49; break; case 0xD1: //"N" tilde -> plain "N" rxbyte = 0x43; break; case 0xD2: //"O" variants case 0xD3: case 0xD4: case 0xD5: case 0xD6: case 0xD8: rxbyte = 0x4F; break; case 0xD9: //"U" variants case 0xDA: case 0xDB: case 0xDC: rxbyte = 0x55; break; case 0xDD: //"Y" acute -> "Y" rxbyte = 0x59; break; /* case 0xDF: //beta //mucks up LCDSmartie's degree symbol?? rxbyte = 0xE2; break; */ case 0xE0: //"a" variants except umlaut case 0xE1: case 0xE2: case 0xE3: case 0xE5: rxbyte = 0x61; break; case 0xE7: //"c" cedilla -> "c" rxbyte = 0x63; break; case 0xE8: //"e" variants case 0xE9: case 0xEA: case 0xEB: rxbyte = 0x65; break; case 0xEC: //"i" variants case 0xED: case 0xEE: case 0xEF: rxbyte = 0x69; break; case 0xF2: //"o" variants except umlaut case 0xF3: case 0xF4: case 0xF5: case 0xF8: rxbyte = 0x6F; break; case 0xF7: //division symbol rxbyte = 0xFD; break; case 0xF9: //"u" variants except umlaut case 0xFA: case 0xFB: rxbyte = 0x75; break; default: break; } lcd.print((char)rxbyte); //otherwise a plain char so we print it to lcd return; }

 

Источник: arduino.ru

Плод месячного курения манула на Hitachi HD4478U и ему подобным клонам. А их судя по всему не мало — S6A0069, KS0066U, NT3881D, LC7985, ST7066, SPLC780, WH160xB, AIP31066. И это далеко не полный список. Библиотека без проблем работает с любыми китайскими модулями на PCF8574 и PCF8574A.

Моя писанина получилась компактнее и немного быстрее, чем многочисленная копипаста с GitHub-а на эту тему. Библиотека с 16МГц AVR-ом и частотой I2C шины 100КГц выдала 1096мкс, копипаста из менеджера закачек 1458мкс. На ESP8266 и STM32 должно быть быстрее. Еще одно достоинство — универсальность. Можно переназначать контакты если у вас нестандартный модуль или экран. Для этого поближе посмотрим на строку инициализации:

Эта запись означает, что: 4-й пин LCD подключен к поту P0 (4 ноге) PCF8574, 5-й пин LCD подключен к поту P1 (5 ноге) PCF8574, 6-й пин LCD подключен к поту P2 (6 ноге) PCF8574, 16-й пин LCD подключен к поту P3 (7 ноге) PCF8574 и тд…

Теперь представим, что в вашем модуле 14-й пин LCD подключен к поту P0 (4 ноге) PCF8574, а 4-й пин LCD подключен к поту P7 (12 ноге) PCF8574, тогда строка инициализации для вашего модуля будет выглядеть так:

Переменная "POSITIVE" означает что транзистор Q1 на китайском модуле NPN типа и для его открытия нужен положительный потенциал. Если подсветка экрана не зажглась, то скорее всего у вас PNP транзистор и нужно заменить "POSITIVE" на "NEGATIVE".

В библиотеке забиты все возможные адреса для чипов PCF8574 и PCF8574A. Вот их список:

Что бы понять что этот список означает посмотрите на внешний вид китайского модуля. В правом нижнем углу есть 3 контактные площадки A0, A1, A2. Теперь глянем на схему модуля — по умолчанию эти контакты подтянуты к питанию через резисторы R4, R5, R6, что соответствует логической единице на всех трех пинах: A0=1, A1=1, A2=1. Для такой конфигурации текущий адрес будет:

Если соединить верхнюю и нижнюю контактную площадки A2, то мы закоротим ее на землю, что соответствует логическому нулю на этом пине. Состояние на всех трех контактах будет следующее: A0=1, A1=1, A2=0. Для такой конфигурации текущий адрес будет:

Я постарался привести как можно больше примеров в библиотеке. Написал сумбурно, но пока так. Будет время добавлю про плюшки подробнее.

Забирать библиотеку тут.

UDP: Оказывается у дисплея есть тестовый режим. Если подключить только питание, на рабочем экране должны появиться прямоугольники.

UDP2: В качества ликбеза очень полезная статья про подтяжку линий SDA и SCL.
UDP3: Исправил мелкие баги, чуть-чуть уменьшил код, добавил поддержку Arduino STM32.
UDP4: Похоже многие свалились с луны и не знают, что для нормальной работы i2c шины линии SDA и SCL должны быть подтянуты к питанию. Почему, читаем тут и тут.

Источник: elchupanibrei.livejournal.com

Без проблем работает с не стандартным модулями и экранами. Поддерживает Arduino AVR, Arduino ESP8266, Arduino SMT32. Получилась немного быстрее, чем у всей остальной копипасты из интернета. Все пины можно переназначать. Вот как это работает. Для этого поближе посмотрим на строку инициализации:

LiquidCrystal_I2C lcd(PCF8574_ADDR_A21_A11_A01, 4, 5, 6, 16, 11, 12, 13, 14, POSITIVE);
Эта запись означает, что: 4-й пин LCD подключен к поту P0 (4 ноге) PCF8574, 5-й пин LCD подключен к поту P1 (5 ноге) PCF8574, 6-й пин LCD подключен к поту P2 (6 ноге) PCF8574, 16-й пин LCD подключен к поту P3 (7 ноге) PCF8574 и тд.

Теперь представим, что в вашем модуле 14-й пин LCD подключен к поту P0 (4 ноге) PCF8574, а 4-й пин LCD подключен к поту P7 (12 ноге) PCF8574, тогда строка инициализации для вашего модуля будет выглядеть так:
LiquidCrystal_I2C lcd(PCF8574_ADDR_A21_A11_A01, 14, 5, 6, 16, 11, 12, 13, 4, POSITIVE);

В библиотеке уже забиты все возможные адреса для чипов PCF8574 и PCF8574A. Вот их список:
PCF8574_ADDR_A21_A11_A01
PCF8574_ADDR_A21_A11_A00
PCF8574_ADDR_A21_A10_A01
PCF8574_ADDR_A21_A10_A00
PCF8574_ADDR_A20_A11_A01
PCF8574_ADDR_A20_A11_A00
PCF8574_ADDR_A20_A10_A01
PCF8574_ADDR_A20_A10_A00

PCF8574A_ADDR_A21_A11_A01
PCF8574A_ADDR_A21_A11_A00
….
….
PCF8574A_ADDR_A20_A10_A00

Что бы понять что этот список означает посмотрите на внешний вид китайского модуля. В правом нижнем углу есть 3 контактные площадки A0, A1, A2. Теперь глянем на схему модуля — по умолчанию эти контакты подтянуты к питанию через резисторы R4, R5, R6, что соответствует логической единице на всех трех пинах: A0=1, A1=1, A2=1. Для такой конфигурации текущий адрес будет:
PCF8574_ADDR_A21_A11_A01
Если соеденить верхнюю и нижнюю контакнтную площадки A2, то мы закоротим ее на землю, что соотвествует логическому нулю на этом пине. Состояние на всех трех контактах будет следущее: A0=1, A1=1, A2=0. Для такой конфигурации текущий адрес будет:
PCF8574_ADDR_A20_A11_A01

Забирать библиотеку — тут

Источник: esp8266.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.