|
![]() |
Библиотека для LCD экранов. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Изменения и дополнения:0.2.0 (08.07.23)0.3.0 (09.08.23) 0.4.0 (29.08.23) 0.5.0 (4.11.23) 0.6.0 (25.01.24) 0.7.0 (19.04.24) 0.8.0 (15.05.24) 0.8.5 (20.06.24) 0.9.0 (8.09.24) 0.9.2 (21.10.24) 0.9.3 (7.11.24) 0.9.4 (1.03.25) 0.9.5 (28.04.25) 0.9.6 (14.06.25) 0.9.7 (25.08.25) 0.9.8 (2.02.26) 1. Подключение и базывое настройки.Дисплей подключается к контроллеру по SPI, либо по 8 или 16 битной шине. Для каждого типа подключения имеется отдельная реализация библиотеки.Порты контроллера экрана работают на напряжении 3.5-3.8 В. Поэтому подклюение управляющего микроконтроллера работающего на напряжении 5В должно происходить через микросхемы преобразования уровня, либо двухстороннего буфера, которые на выходе будут иметь 3.3В. В некоторых случаях данные микросхемы уже присутствуют на плате экрана. Как в случае экран-шилда для Arduino UNO или Arduino Mega. Поэтому подключение по 8 и 16 битной шине унифицировано с данными шилдами. Часть настроек библиотеки для увелиения скорости работы и снижения размера скомпилированного файла, выведена в заголовочный файл, для вклчения различных веток условной компиляции. Помимо различных способов подключения, которые определены тем как распяна плата конкретного дисплея. Существует и формат передачи данных в дисплей (pixel format) Это могут быть в форматы 5-6-5, 6-6-6 или 8-8-8. Режим 5-6-5 для передачи данных о цвете используется 5 бит для красного цвета, 6 бит для зеленого и 5 бит для синего. Данный режим включен по умолчанию. Режим 6-6-6 дступен пока только для SPI. Режим 8-8-8 будет добавлен позже. Приведен пример подключения по 8 битной шине. Платы некоторых дисплеев разведены с возможностью подключения как по SPI так и по 16 битной шине. Подключение по SPI.Подключение по SPI происходит к аппаратному SPI микроконтроллера. Что обеспечивает довольно высокую скорость передачи данных, так как аппаратный SPI имеет режим 2х (ускорение в 2 раза).D/C Подключается по заданному в заголовоном файле пину. Там же его можно и изменить. RST, не подключается и заведен на 3.3В. SPI выводы: SS, MOSI, MISO, SCL используют специальные пины контроллера для аппаратного подклюения SPI.
В заголовочном файле библиотеки имеется define-определение SPI_BOOST, которое методами условной компиляции переносит включение SPI, установку мастера и удвоенной скорости в функцию Display_Setup. И позволяет ускорить отрисовку множества мелких сегментов на 3-4%. То есть SPI в управляющем микроконтроллере включен всё время. В закомментированом состоянии, SPI включается только перед передачей данных в МК дисплея и отключается по завершении передачи. Отклчать данную опцию не рекомендуется. Так как без неё не рабтает оконный режим, и на данный момент не выявлено негативных последствий. Дисплей подключенный по SPI нормально функционирует с SD_Card подключенной к тому же аппаратному SPI микрокнтроллера. Подключение по 8/16-битной шине.Для унификации подключения экрана выполненного в виде шилда для Arduino UNO, и всех остальных экранов с 8-битной шиной к контроллерам на базе ATMega328 (и аналогов) в библиотеке использована жесткая привязка к пинам, без возможности их изменения. Экран в виде шилда уже имеет на борту преобразователи напряжения, в виде микросхем двухсторонних буферов. Для подключения остальных экранов, необходимо подключать их через микросхемы. Двухсторонние буфера, работают в обе стороны и позволяют производить чтение из памяти контроллера экрана. Подключение происходит как на схеме SPI. Для Меги так же выбраны пины без возможности их изменения.Подключение Arduino Mega по 16 битной шине унифицировано с подключением шилда Mega TFT Shield Примечание. Микросхемы буферов (однонаправленные) такие как HC541 которые используют в Display TFT Shild для Arduino Mega, являются по сути драйвером шины. То есть основная задача включать и отключать шину. При работе по схеме преобразователь напряжения наблюдаются достаточно сильные пульсации напряжения. До 4-х вольт, что вызывает заметное мерцание подсветки экрана. Двухстороние буфера в Shield для Arduino Uno, обладают схожим эффектом, но в значительно меньшей степени, Напряжение поднимается до 3.7В. Включение дисплея 800х480 на контроллере SSD1963 имеет свои особенности и описано отдельно. Подключение SSD1963
2.Настройки библиотеки.Настройки библиотеки вынесены в условную компиляцию и находятся в заголовочном файле Display_Lib.h
В данный момент присутствует только выбор интерфейса соединения с дисплеем и формат пикселя, который доступен пока только для варианта подключения по SPI. Здесь и в заголовочнике для оконного режима будут присутствовать настройки которые не предполагается изменять в процессе работы. Выбран должен быть только один из вариантов в каждой группе. 3.Функции библиотеки обычного режима рисования.На данный момент, библиотека функционирует в двух режимах. Это обычное рисование простых фигур, реализованое функциями Си. Данный режим используется в основном для статичного изображения, общего оформления. И оконный режим, специально для анимации. Данный режим создан как логическое продлжение обычного режима, в следствии того, что средствами обыного рисования проблематично создавать приемлемого вида анимацию на экране дисплея. Тем не менее в каталоге examples присутствуют и примеры анимации нарисованные в обычном режиме. Примеры использующие оконный режим дополнительно помечены как Window_mode. Оконный режим, в свою очередь так же имеет, условно, два варианта рисования фигур. В первом случае, для каждой фигуры создается объект, который в последствии будует записан в экранную память. Это для случая, когда под экранную память выделенно не столь много ОЗУ и окно бъется на сегменты. Когда памяти выделено достаточно на отрисовку всего окна заданного размера, возможно рисование фигур сразу в экранную память. Что очень удобно делать в цикле. В одно окно можно добавлять объекты обоими способами. Тем не менее часть элементов, доступны только через создание объекта. Фигуры из обычного режима аналогичны фигурам из оконнго режима. По названию, по аргументам функции и конструктора и по алгоритму отрисовки. Но фактически это разные методы и функции, хотя на 99% имеют общий код. Что негативно сказывается на размере конечной прошивки. Но наиболее тяжелые части, а это текстовые, имеют общую функцию в которой хранятся константные данные символов. В последствии, возможно, обычный режим будет переписан на С++ и методы будут объединены, но пока, в целях дальнейшей разработки, пока удобнее держать в том виде в котором есть. Прямоугольники, круг, окружность имеют не столь большой объем кода. В основном разница ощутима при использовании треугольника в обоих ржимах. Display_Setup (unsigned char display_orient) Функция для блока Setup. Предварительные настройки дисплея. display_orient : 1 - Альбомный формат. 2 - Альбомный перевернутый. 3 - Портретный. 4 - Портретный перевернутый. Функции включения и выключения дисплея, а так же перевода его в спящий режим. Display_Power_On () Display_Power_Off () Display_Sleep_On () Display_Sleep_Off () Команды пишут в регистры и читают из регистров контроллера экрана. Display_Command (unsigned char *command) Display_Read_Parametr (unsigned char *data) В качестве аргумента принимают ссылку на массив. В случае чтения, данные регистра пишутся в этот же массив . Массив должен иметь вид: [0]- количество передаваемых параметров регистра. [1]- адрес регистра. [2..n]- данные. При записи, должны быть переданы все параметры регистра. Функция чтения работает пока только для 8 битной шины. Более подробного о базовых регистрах контроллера экрана, а так же их параметрах можно ознакомится в статье : LCD экраны под управлением микроконтроллеров. Часть 1. Базовые регистры. Display_Set_Color (byte color) Display_Set_Color (byte red, byte green, byte blue) Функция выбора текущего цвета. До начала рисования, необходимо выбрать цвет. Передача одного параметра актуальна только при подключении по 8 битной шине. В этом случае, при отрисовки средних и больших по площади фигур, скорость заметно возрастает. Минус данного режима, это не корректная палитра цветов. 0 - черный, 255- белый. Для остальных значений надо составлять пантон. В режиме SPI такой вариант тоже работает, но прироста скорости не дает. Либо он крайне незначительный. При передачи данных в этом режиме не происходит смена первого байта на второй. Что в первом байте, то и во вторм. Вариант с передачей значений всех трех цветов классический при выборе цвета. С той лишь разницей, что например на ПК, HTML цвета кодируются 3 байтами, по 255 значений для каждого цвета - 16,5 млн. цветов и оттенков. Контроллер экрана принимает лишь 2 байта. В режиме 5-6-5. 5-бит красный, 6-бит зеленый, 5-бит синий - 65 тыс. цветов и оттенков. Возможен вариант 6-6-6, но в таком случае, для передачи значения 1 пикселя (для SPI и 8бит) потребуется 3 байта, и это на ~1/3 снизит скорость появления изображения. При передачи аргументов можно опираться на палитры HTML цветов или графических редакторов. Цвет будет максимально возможно похожий. При передаче будут срезаны младшие 3, 2 и 3 бита в соответствующих цветах. Display_Write_Text (int X, int Y, unsigned char *data, int symbol_interval=0) Функция отображения текста. Принимает коды символов в кодировке КОИ-8Р. Присутствуют: заглавные и прописные символы латиницы и кириллицы, цифры и другие символы. Прописные символы не привычные прописные, а заглавные только меньшего размера. < При передаче в функцию массива, последним элементом должен идти нуль (0х00) символ окончания строки. Для символов кириллицы в Arduino IDE необходимо использовать код символа, например можно использовать данный конвертер www.rapidtables.org Кодировку выбрать КОИ-8Р, в разделителе указать "пробел" "0" "x". Отсутствующие в библиотеке символы будут заменены пробелом. Аргумент symbol_interval имеет значение по умолчанию=0, поэтому является опциональным, можно вызывать функцию и без него. Положительные значения увеличивают интервал между символами, отрицательные уменьшают. Латинские символы можно передавать прям в аргументах функции, заключая текст в двойные кавычки. Display_Write_Text (10,10, "Hello world"), но компилятор под данные символы создает массив данных с типом const char, поэтому при компиляции может возникнуть предупреждение. Чтобы этого избежать, так же как и для русских символов необходимо создать массив c типом byte, а уже в нем вместо символов писать текст в двойных кавычках. При передачи символов в двойных кавычках, компилятор самостоятельно поставит нуль в конце строки. byte test_array[] = {"Prived Medved"}; Для кириллицы нужно в любом случае заводить массив, не забывая про нуль в последней ячейке. Неиспользуемые символы, с целью снижения размера скомпилированной программы, можно закомментировать в самой библиотечной функции. Более точно указано в её описании. При создании инициализированного массива, как например массив заполненный кодами символов, и который является константным, если не указано количество элементов массива [в квадратных скобках], либо значение точно соответствует количеству его элементов, то массив будет сохранен в ОЗУ. Если же, значение указывающие на количество элементов на 1 больше чем реально вписано элементов, то массив будет сохранен во флеш памяти. Массив созданный в области глобальных переменных будет в любом случае сохранен в ОЗУ. Так же возможно использовать решения Arduino IDE и явно указывать куда сохранть массив. const dataType variableName[] PROGMEM = {}; Описание работы PROGMEM> на сайте docs.arduino.cc Display_Write_Text_30px (int X, int Y, byte *data, int8_t symbol_interval=0) Функция отображения текста размером по высоте 30px (27 для большинства символов). Справедливо всё что и для функции Display_Write_Text. Доступны пока только числа. Display_Draw_Circle (int X, int Y, unsigned int radius, unsigned int thickness=1, byte quarter=0) Функция отрисовки окружности. Аргумент функции thickness позволяет увеличить толщину линии. Алгоритм рисования толщины линии более 2х пикселей далеко не самый оптимальный в плане быстродействия, так как рисуется почти в двое больше окружностей, чем заданная толщина. Поэтому, для больших радиусов рационально нарисовать два круга, второй меньше первого, цветом фона. Display_Draw_Fill_Circle (int X, int Y, unsigned int radius) Функция отрисовки круга (закрашенной окружности). Алгоритм достаточно быстрый, так как рисование происходит горизонтальными линиями. Display_Draw_Arc (int X, int Y, unsigned int radius, unsigned start_deg, unsigned stop_deg, unsigned int thickness=1) Функция отрисовки дуги. Если дуга пересекает нулевую отметку, то стартовым углом идет большее значение. Толщина дуги задается крайним аргументом.
Display_Draw_Rounded_Rectangle (int X1, int Y1, int X2, int Y2, unsigned int radius, unsigned int thickness=1) Прямоугольник со скругленными углами. Возможно задать толщину линии. Функция не предусматривает проверок на корректность, как например когда радиус больше стороны прямоугольника. Подобные ситуации, как и выход фигуры за пределы экрана и пр. лежат на пользователе, с целью не перегружать код базового элемента. Display_Draw_Fill_Rounded_Rectangle (int X1, int Y1, int X2, int Y2, unsigned int radius) Закрашенный прямоугольник со скругленными углами. Так же как и круг, рисуется быстро. На радиусах линиями, внутри прямоугольником.
int Display_Draw_Triangle (int X1, int Y1, int X2, int Y2, int X3, int Y3,) Закрашенный треугольник. Функция достаточно прожорливая на ОЗУ. Для контроля за его потреблением она возвращает примерно затраченное его количество. Перерасход ОЗУ может привести к зависанию микроконтроллера. Display_Draw_Line (int X1, int Y1, int X2, int Y2, unsigned int thickness=1 ) - Отрезок (Произвольная линия). Display_Draw_Rectangle (int X1, int Y1, int X2, int Y2 ) - Закрашенный прямоугольник. Display_Draw_Rectangle (int X1, int Y1, int X2, int Y2, unsigned int thickness=1 ) - Прямоугольник, с заданной толщиной линии. Толщина линии набирается внутрь фигуры. Display_Draw_HLine (int X1, int Y1, int lenght_line) - Горизонтальная линия. Display_Draw_VLine (int X1, int Y1, int lenght_line) - Вертикальная линия Display_Draw_Pixel (int X1, int Y1) - Отдельная точка (пиксель). Набор стандартных функций. Прямоугольником могут быть заменены все остальные типы функций, кроме произвольной линии. Х1=Х2 - Вертикальная линия. Y1=Y2 - Горизонтальная линия. X1=X2 и Y1=Y2 - Пиксель. Display_Draw_Handle_Bitmap (int X1, int Y1, unsigned char(int) *data_array, unsigned char number_of_lines) Функция для простого и быстрого добавления небольших изображений шириной 8 или 16 пикселей (массив char или int). Размер по высоте задает аргумент number_of_lines. Имеются дополнительные функции, для отзеркаливания содержимого массивов. void Array_Flip_Value (unsigned char(int) *data_array, unsigned int array_length, unsigned int start_position=0, unsigned int end_position=0); по горизонтали void Array_Flip_All_Content (unsigned char *data_array, unsigned char array_length); по вертикали. СчетчикиСчетчики написаны на С++, и работают по не самой оптимальной схеме. Сперва закрашивается разряд предыдущего значения счетчика, потом рисуется новый. Но данная схема, работает достаточно быстро и не вызывает мерцания символов. Допускается создание объекта класса в цикле вместе с методами класса. Как если бы вызывалась обычная функция. Доступно 3 типа счетчиков. Конструкторы классов: Display_Counter (int X, int Y, byte digit_count); Размер символов 15px. Display_Counter_30px (int X, int Y, byte digit_count); Размер символов 30px. Display_Counter_Seven_Segments (int X, int Y, byte digit_count); Масштабируемый размер. Конструктор класса включает в себя координаты счетчика и количество разрядов счетчика, от 1 до 5. Методы счетчиков Counter и Counter_30px: Установка цвета цифр счетчика и фона. По умолчанию цвет белый, фон черный. Цвета можно менять в любой момент работы счетчика. Метод отрисовки значения. int и float для счетчика со знаком, unsigned int беззнаковая переменная. Cчетчики имеют стопор, на выбранном максимальном разряде. И самостоятельно удаляют нули левее старших разрядов. Не перерисовывают число полностью, а перерисовывают только изменившийся разряд (разряды) числа. Счетчик с переменной типа float имеет 2 разряда для дробной части. Семисегментный счетчик имеет схожие методы. .Set_Color_Segment (byte red, byte green, byte blue, byte bg_red, bg_green, bg_blue) - Цвет символов и цвет фона. .Set_Size_Segment (byte Length, byte Width, byte Offset, byte Symbol_interval) - размеры описывающие размер одного сегмента, которые и определяют размер всего символа. .Print_Segment_Value (принимает int или unsigned int или float); Так же, можно задать контур сегмента, толщиной 1px. Работает через поля класса. .contur=1; // Включение контура .contur=0; // Выключение контура Цвет контура .counter_red = 0...255; .counter_green =0...255; .counter_blue = 0...255; Точка, в переменной типа float разделяющая дробную и целую часть числа при использовании контура, не во всех размерах удовлетворительно масштабируется. Поэтому есть возможность скорректировать её размер, через поля класса. signed char correct_dot_X; // Знаковая переменная, корректировка по X. 1 прибавляет 2px (слева и справа). signed char correct_dot_Y; // 1 прибавляет 1px (сверху). Для корректной работы, все счетчики сохраняют переданное значение в глобальных переменных, для следующего своего запуска. В некоторых случаях, при смене страницы, входе или выходе из цикла, может потребоваться принудительно перерисовать счетчик, не обращая внимание на сохраненное значение из прошлого цикла. Для этого у всех счетчиков есть поле .reprint После следующего цикла отрисовки, значение данного поля сбросится в нулевое значение. В данной версии библиотеки доступно для создания 16 различных счетчиков. Их количество можно увеличить правкой в файле библиотеки. 4. Оконный режим работы.Особый режим работы библиотеки для работы которого сперва выделяется область экрана (окно), в котором, уже относительно координат окна создаются объекты. Эта часть написана на C++. Дополнительным вариантом работы в оконном режиме является способ внесения геометрических фигур и других объектов без создания объектов, сразу записывая графический элемент в экранную память. Все основные настройки оконного режима вынесены в условную компиляцию и находятся в заголовочном файле Display_Lib_Window.h
Оконный режим может работать с определенной глубиной цвета. Поэтому должен быть выбран один из режимов _COLOR_MODE. Так как окно заранее не знает какие объекты в него будут добавлены, оно готово рисовать все. Потому код всех графических элементов автоматически включается в прошивку. Чтобы удалить не используемые графичекие элементы необходимо из закомментировать. Обращая внимание на зависимость. Например удалять Circle нельзя, если используется Rounded_Rectangle. Алгоритм работы следующий. В выбранном месте экрана создается окно, по координатам, как прямоугольник, и ему выделяется определенный объем памяти, в виде массива. Изменяя размер массива важно не забывать менять его размер в аргументе конструктора окна. Далее создаются объекты, первым аргументом которых является созданное окно. Класс объекта сохраняет координаты созданного объекта, а ссылку на себя передает в класс Window. После того как объекты созданы, можно изменять их координаты (двигать, масштабировать), менять их номер цвета в палитре окна. Когда все желаемые действия в окне завершены, запускается метод Render Content. Он по сохраненным указателям обращается к созданным объектам и начинает их отрисовку в экранной памяти. Когда все созданные объекты окажутся внесенными в "экранную память", запускается метод передачи данных из памяти управляющего контроллера в память контроллера дисплея. На практике это выглядит значительно проще.
Методы оконного режима.4.1 Оконный режим работы без создания объектов.Данный режим предназначен для работы в цикле, когда требуется нарисовать множество однотипных элементов. Но данный режим требует чтобы выделенной экранной памяти хватило на всё окно целиком, без деления на сегменты. Для рисования используются уже методы окна Window. Flash-память не перегружается, это одни и те же функции, только в одной из них на входе используется обертка. Особенности работы. В двух цветном режиме, каждый бит памяти будет хранить либо нулевой, либо первый цвет палитры. 4х цветный режим, в каждой паре бит хранит номер цвета, от 0 до 3. 16 цветный режим в каждой тетраде байт хранит номер цвета одного пикселя объекта.
Не сложно посчитать, что даже небольшое окно 144 х 144 займет 20736 пикселей. А для 4х цветного режима, разделим это значение на 4. И потребуется 5184 байта "экранной памяти". Которой в например в ATMega328 взять неоткуда. И по умолчанию выделено 1000+16 байт. В этой ситуации метод предварительно разбивает окно на сегменты по вертикали, чтобы они влезали в выделенный размер памяти. И отрисовку окна начинает посегментно.
Минусом данного подхода является то, что фигура(объект) находящаяся в двух и более сегментах, просчитывается дважды и более раз. Элементы которые подают в сегмент, отправляются в экранную память, остальное пропускается(подрезаются). При переходе к следующему сегменту фигура будет просчитана заново и в память будут внесены только те части, которые попадают уже в текущий сегмент. И если в случае с прямоугольником, это особенно не влияет на FPS, то в случае с треугольником (полигоном) просадки скорости куда более заметны. Очевидный плюс, это то что с минимальным количеством ОЗУ мы имеем полноценный оконный режим. 4. Вспомогательные функции.Display_ID_Info (); Display_Status_Info (); Display_Setup_Info (); Набор информационных функций, выводящие в Serilal.print содержание нескольких регистров, общие для всех типов контроллеров дисплеев. Поэтому с достаточно скудной информацией. Данные функции закомментированы в конце основного файла библиотеки .cpp Так как даже упоминание в библиотеке Serial.print при компиляции скетча в Arduino IDE происходит выделение ОЗУ. Работают только в Arduino IDE.
Point_On_Circle (int X, int Y, unsigned int radius, unsigned int deg, int *data) Функция для нахождения координаты точки принадлежащей некоторой окружности с центром в X, Y. Угол deg определяет положение точки на окружности. Результат пишется в переданный массив data. data[0] - X, data[1]- Y. Так же можно почитать и задать вопросы в статьях на Дзен.
Внимание! При включенном ADB Block ссылки на стороние ресурсы не отображаются.
Статья на Дзен.
5.Рекомендации по использованию библиотеки и примерыПри подключении, чтобы ничего не спалить, сперва нужно проверить питание контроллера дисплея. Подсветка экрана запитывается отдельно, это как правило 3.3В. Питание микросхемы контроллера, как правило, выведено отдельно. Нужно смотреть даташит на конкретный контроллер. Может быть 3.3В или 5В. Шина данных работает на 3.3В. Это актуально и для готовых "шилдов". Например шилд для Arduino Mega для подключения по 16 битной шине подходит к экрану 800x480 на контроллере SSD1963, который питается от 3.3В, а шилд разведен под 5В. Поэтому, необходимо до подключения проверять наличие необходимых стабилизаторов и правильного питания в нужных местах. Настоятельно не рекомендуется подключать экран по 16 битной шине через макетную плату. Либо необходимо использовать свежую макетку с еще не разбитыми отверстиями. Иначе можно потрать много времени как на само подключение, так и на выяснение что именно вызывает появление артефактов или отсутствие изображения. Библиотека не походила тесты на работу с прерываниями. Возможны проблемы в случае длительной паузы при передачи данных в память контроллера, а это 70-80% времени работы библиотеки. Микроконтроллеры имеют специальный регистр для продолжения записи в память, но в данной библиотеке это не реализовано. "Экранировать" от прерываний, если это потребуется, необходимо только транспортные функции. Задержки Delay используются только при старте, в функции Setup. Некоторые функции библиотеки достаточно прожорливы. Такие как например треугольник, текст, счетчики. С 2мя Кб ОЗУ в ATMega328 можно упереться в ограничение. Но перерасход моментально себя проявит. В виде зависания картинки, артефактов, появлением лишних линий и других графических элементов. Счетчики очень прожорливы на flash память программ так как тянут с собой весь алфавит и английский и русский, включая маленькие буквы. Лишние символы можно убрать, корректно закомментировав его в коде библиотеке (там подробно описано). Так же счетчики, как и текстовая функция, потребляют немало ОЗУ (до 670 байт за вызов), хоть и разбиты внутри на 4 блока(функции). Семисегментный счетчик работает отдельно, к нему всё это не относится. Примеры, в библиотеке, компилируются в Arduino IDE без ошибок и предупреждений. При компиляции в Atmel Studio или Code::Block, в связи с более жесткими настройками, ошибки и предупреждения будут. Будут исправлятся по мере появления. Работоспособность библиотеки проверена на следующих контроллерах: ILI9341(240x320) ILI9486(480x320) SSD1963(800x480) Множество примеров находится в папке example. Для части из них есть отдельные описания.
6.Файлы библиотеки.Файлы библиотек полностью идентичны, за исключением имен и define определений в заголовочном файле для выбора типа подключения. Так как define не получается вынести в среду Arduino IDE, то выполнены они отдельными zip-библиотеками. Возможно установить одну библиотеку и вносить изменения в заголовочный файл для иного типа соединения.
Старые версии библиотеки доступны по ссылке. Старые версии.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
![]() |
|
![]() |
![]() |
|
![]() |
||||||||||||
![]() |
|
![]() |