HCuOLED библиотека для OLED-дисплеев SSD1307 и SH1106

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 21 декабря 2017, 22:44

Разбираясь с LED дисплей 128x64 1.3" SPI, решил что буду использовать HCuOLED библиотеку. Но не нашёл описания её функций и решил как смогу перевести.

Эта библиотека Arduino позволит вам отображать различные текстовые, графические и растровые изображения на дисплеях uOLED на SSD1307 и SH1106. Библиотека была написана специально для наших собственных дисплеев uOLED, включая следующие:

Хобби-компоненты 0.96 "дисплеи uOLED (HCMODU0050 & HCMODU0052)
Хобби-компоненты 1.3 "дисплеи uOLED (HCMODU0058 & HCMODU0059)
Защитный экран WeMos D1 mini OLED (HCWEMO0007)
Компоненты Hobby 0.9 "128x32 дисплеи uOLED (HCMODU0118 & HCMODU0119)


Библиотека использует интерфейс SPI от Arduino (V0.2 теперь дополнительно поддерживает дисплеи в режиме I2C) для управления дисплеями в их конфигурации SPI по умолчанию. Тем не менее, библиотека способна управлять несколькими дисплеями с сочетанием ранее упомянутых типов контроллеров от одного Arduino. Для каждого дополнительного дисплея требуется только 3 дополнительных цифровых контакта.

Вам нужно будет скачать и разархивировать эту библиотеку в библиотечную область среды разработки Arduino.

В Windows:
Мои документы \ Arduino \ libraries \

На Mac:
Документы / Arduino / библиотеки /
или аналогично для Linux.

Использование библиотеки


Чтобы использовать библиотеку, просто включите заголовочный файл HCuOLED.h и стандартный файл заголовка SPI.h, а затем создайте экземпляр библиотеки для каждого дисплея. Например:
Для режима SPI:

Код: Выделить всё

#include <HCuOLED.h>
#include <SPI.h>
HCuOLED HCuOLED(DisplayType, CS, DC, RST);

Где:
DisplayType - это версия драйвера. Допустимые значения: SSD1306б, SH1106
CS - цифровой контактный номер, используемый для вывода микросхемы (CS)
DC - это номер пина, используемый для модулей. Вывод данных / команды (DC)
RST - это номер пина, используемый для вывода сброса модулей (RST)

Для режима I2C:

Код: Выделить всё

#include <HCuOLED.h>
#include <Wire.h>
HCuOLED HCuOLED(DisplayType, I2C_ADD, RST);

Где:
DisplayType - это версия драйвера. Допустимые значения: SSD1306, SH1106, WEMOS_D1_MINI_OLED ,SSD1306_128_32
I2C_ADD - это адрес I2C дисплея. Обычно это 0x3C или 0x3D.
RST - это номер пина, используемый для вывода сброса модулей (RST). Это необязательный параметр и может быть опущен, если на вашем дисплее есть встроенная схема сброса (например, WeMos OLED).

Буфер отображения:
Поскольку невозможно просмотреть статус отображения экранов, библиотека создаст буфер отображения в ОЗУ. Большинство функций, описанных ниже, не будут записываться непосредственно на дисплей, а вместо этого записываться в буфер отображения. Ничего не будет отображаться на модуле до тех пор, пока не будет выполнена функция обновления, которая выведет на дисплей все содержимое дисплейного буфера.

Обратите внимание, что при использовании библиотеки с несколькими дисплеями:
Из-за жестких ограничений RAM большинства Arduino невозможно хранить отдельный буфер отображения для каждого дисплея. Поэтому создается только один буфер отображения и используется каждым дисплеем. Поэтому при записи на другой дисплей вам нужно сначала очистить буфер отображения с помощью команды ClearBuffer(), чтобы избежать отображения информации на экране с предыдущего экрана на новый экран.
В этой библиотеке доступны следующие функции:

ФУНКЦИИ

Код: Выделить всё

HCuOLED.Reset();

Сбрасывает дисплей и настраивает его в состояние по умолчанию.
//================================================

Код: Выделить всё

HCuOLED.Refresh();

Записывает содержимое буфера дисплея на дисплей.
//================================================

Код: Выделить всё

HCuOLED.ClearBuffer();

Очищает содержимое буфера дисплея.
//================================================

Код: Выделить всё

HCuOLED.Flip_H();

Переворачивает дисплей вокруг своей горизонтальной оси.
//================================================

Код: Выделить всё

HCuOLED.Flip_V();

Переворачивает дисплей вокруг своей вертикальной оси.
//================================================

Код: Выделить всё

HCuOLED.Bitmap(Cols, ByteRows, BitmapData[]);

Копирует 1-мерный массив (типа const byte), содержащий информацию растрового изображения в буфер отображения с верхним левым углом растрового изображения, начиная с координат Cursor(),
где:
Cols - размер X-оси растрового изображения в пикселях.
ByteRows - это размер оси Y растрового изображения в 8 пиксельных кусках.
BitmapData[] - это 1-мерный массив типа const byte, содержащий данные растрового изображения. Каждый байт массива представляет собой 8-пиксельный столбец растрового изображения.
//================================================

Код: Выделить всё

HCuOLED.Cursor(byte X, byte Y);

Устанавливает текущее местоположение курсора, используемое для позиционирования текста и растровых изображений на экране, где:
X - это местоположение оси X, из которого начинается битмап или текст. Допустимые значения: от 0 до 127
Y - это местоположение оси Y, где начинается растровое изображение или текст. Допустимые значения: от 0 до 63
//================================================

Код: Выделить всё

HCuOLED.SetFont(Font);

Устанавливает шрифт функцией Print ().
Где:
Шрифт является обязательным шрифтом. Возможные варианты:
Terminal_8pt (маленькая фиксированная ширина шрифта 8x8)
MedProp_11pt (средний пропорциональный шрифт 2 строки)
LCDLarge_24pt (большой четырехстрочный шрифт с ЖК-экраном)
//================================================

Код: Выделить всё

HCuOLED.Plot(X, Y);

Изменяет пиксель в указанной координате,
где:
X - ось X пикселя. Допустимые значения: от 0 до 127
Y - ось Y пикселя. Допустимые значения: от 0 до 127
//================================================

Код: Выделить всё

HCuOLED.Line(X1, Y1, X2, Y2);

Рисует линию ширины одного пикселя,
где:
X1 - начальная координата оси X линии. Допустимые значения: от 0 до 127
Y1 - начальная координата оси Y линии. Допустимые значения: от0 до 63
X2 - конечная координата оси X линии. Допустимые значения: от0 до 127
Y3 - конечная координата оси Y линии. Допустимые значения: от 0 до 63
//================================================

Код: Выделить всё

HCuOLED.Rect(X1, Y1, X2, Y2, FillMode);

Рисует прямоугольник,
где:
X1 - координата оси X для первого угла. Допустимые значения: от 0 до 127
Y1 - координата оси Y для первого угла. Допустимые значения: от 0 до 63
X2 - координата оси X для противоположного угла. Допустимые значения: от 0 до 127
Y2 - координата оси Y для противоположного угла. Допустимые значения: от 0 до 63
FillMode указывает, должен ли прямоугольник быть заполнен или нет. Допустимые значения:
OUTLINE (рисует одиночный прямоугольник с одним пикселем)
SOLID (рисует заполненный прямоугольник)
//================================================

Код: Выделить всё

HCuOLED.DrawMode(DrawMode);

Устанавливает режим рисования для функций Print(), Line(), Rect(), Bitmap(),
где:
DrawMode устанавливает режим рисования. Допустимые значения:
NORMAL (пикселы заданы для цвета переднего плана)
CLEAR (Пиксели установлены на цвет фона)
INVERT (пиксели установлены в противоположность их текущему состоянию)
//================================================

Код: Выделить всё

HCuOLED.Print(TextString[])

Распечатывает буквенно-цифровую строку текста в выходной буфер, используя текущий шрифт в местоположении, установленном Cursor(),
где:
TextString[] - это строка текста.
//================================================

Код: Выделить всё

HCuOLED.Print(Value)

Печатает целочисленное число со знаком в буфер вывода с использованием текущего шрифта в местоположении, установленном Cursor(),
где:
Value - целое число со знаком типа long.
//================================================

Код: Выделить всё

HCuOLED.Print(Value, DecimalPlaces)

Распечатывает целое число со знаком с десятичной точкой в буфер отображения с использованием текущего шрифта в местоположении, установленном Cursor(),
где:

Value - целое число со знаком типа long.
DecimalPlaces - позиция десятичной точки, начиная с правой стороны
//================================================

Код: Выделить всё

HCuOLED.Print(value, digits, DecimalPlaces);

Распечатывает подписанный номер с плавающей запятой в буфер отображения с использованием текущего шрифта в местоположении, установленном Cursor ),
где:

value - это число с плавающей запятой с плавающей запятой типа float
digits - это количество цифр (включая десятичные разряды) для обрезки номера до. Максимум 10 цифр.
DecimalPlaces - количество знаков после запятой, чтобы обрезать число до.

Пример скетча

Пример скетча

Код: Выделить всё

/*Чтобы использовать этот пример, подключите дисплей uOLED к следующим контактам вашего
Arduino:
MODULE..........ARDUINO
GND.............GND
VCC.............3.3V
D0 (CLK)........D13
D1 (DATA).......D11
RST (RESET).....D8
DC..............D9
CS (SS).........D10 */

#include "HCuOLED.h"
#include "SPI.h"

/* Пример растрового изображения */
const PROGMEM byte Tiny_Logo_Resistor[] =
{
  0xC0, 0xE0, 0x30, 0x30, 0xF0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x38, 0x0E, 0x07, 0x1E, 0x78, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x70, 0x1C, 0x07, 0x0F, 0x3C, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x3C, 0x0F, 0x07, 0x1C, 0x70, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x78, 0x1E, 0x07, 0x0E, 0x38, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xF0, 0x30, 0x30, 0xE0, 0xC0,
  0x00, 0x01, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x3C, 0x38, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1E, 0x38, 0x1C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x38, 0x38, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1C, 0x38, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x38, 0x3C, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01, 0x00,
};


/* Цифровой контактный номер (пин)  для вывода микросхемы дисплея */
#define CS_DI 10
/* Цифровой контактный номер (пин)  для вывода данных / вывод команды */
#define DC_DI 9
/* Цифровой контактный номер (пин) для вывода сброса дисплея */
#define RST_DI 8

/* Индексы массивов для координат X и Y */
#define X1 0
#define Y1 1
#define X2 2
#define Y2 3

/* Массивы для хранения координат и направления для линии, прямоугольника и растрового изображения */
byte Box[4] = {1,1,20,20};
byte BoxDir[4] = {1,1,1,1};
byte Line[4] = {100,25,120,55};
byte LineDir[4] = {-1,-1,-1,-1};
byte Bitmap[2] = {40,40};
byte BitmapDir[2] = {-1,-1};

/* Создайте экземпляр библиотеки (раскомментируйте одну из строк ниже) */
//HCuOLED HCuOLED(SSD1307, SS_DI, DC_DI, RST_DI); //Для дисплеев SSD1307 (HCMODU0050 & HCMODU0052)
HCuOLED HCuOLED(SH1106, CS_DI, DC_DI, RST_DI); // Для дисплеев SH1106 (HCMODU0058 & HCMODU0059)

void setup()
{
  /*Сбросить отображение */
  HCuOLED.Reset();
}

void loop()
{
  /* Отображение некоторого текста с использованием небольшого шрифта с фиксированной шириной 8x8 */
  HCuOLED.SetFont(Terminal_8pt);
  HCuOLED.Cursor(44,0);
  HCuOLED.Print("HOBBY");
  HCuOLED.Cursor(20,10);
  HCuOLED.Print("COMPONENTS");
  /* Отображение номера с использованием большого 4-строчного шрифта для ЖК-дисплея */
  HCuOLED.Cursor(20,24);
  HCuOLED.SetFont(LCDLarge_24pt);
  HCuOLED.Print("HCuOLED");
  /* Измените режим рисования с NORMAL на INVERT */
  HCuOLED.DrawMode(INVERT);
  while(1)
  {
    /* Переместить позиции трех объектов */
    MoveRect();
    MoveLine();
    MoveBitmap();  
    
/* Нарисуйте объекты в буфер отображения */
    HCuOLED.Rect(Box[X1],Box[Y1],Box[X2],Box[Y2], SOLID);
    HCuOLED.Line(Line[X1],Line[Y1],Line[X2],Line[Y2]);
   
    HCuOLED
.Cursor(Bitmap[X1],Bitmap[Y1]);
    HCuOLED.Bitmap(84, 2, Tiny_Logo_Resistor);
    /* Записать буфер отображения на экран */
    HCuOLED.Refresh();
    /* Нарисуйте объекты еще раз. Поскольку мы находимся в режиме INVERT, это удалит их */
    HCuOLED.Rect(Box[X1],Box[Y1],Box[X2],Box[Y2], SOLID);
    HCuOLED.Line(Line[X1],Line[Y1],Line[X2],Line[Y2]);
   
    HCuOLED
.Cursor(Bitmap[X1],Bitmap[Y1]);
    HCuOLED.Bitmap(84, 2, Tiny_Logo_Resistor);
  }
}

/* Обновите координаты X и Y для окна */
void MoveRect(void)
{
  if(Box[X1] == 0 || Box[X1] == 127)
    BoxDir[X1] *= -1;
  Box[X1] += BoxDir[X1];
 
  if
(Box[Y1] == 0 || Box[Y1] == 63)
    BoxDir[Y1] *= -1;
  Box[Y1] += BoxDir[Y1];
 
  if
(Box[X2] == 0 || Box[X2] == 127)
    BoxDir[X2] *= -1;
  Box[X2] += BoxDir[X2];
 
  if
(Box[Y2] == 0 || Box[Y2] == 63)
    BoxDir[Y2] *= -1;
  Box[Y2] += BoxDir[Y2];   
}

/* Обновите координаты X и Y для линии */
void MoveLine(void)
{
  if(Line[X1] == 0 || Line[X1] == 127)
    LineDir[X1] *= -1;
  Line[X1] += LineDir[X1];
 
  if
(Line[Y1] == 0 || Line[Y1] == 63)
    LineDir[Y1] *= -1;
  Line[Y1] += LineDir[Y1];
 
  if
(Line[X2] == 0 || Line[X2] == 127)
    LineDir[X2] *= -1;
  Line[X2] += LineDir[X2];
 
  if
(Line[Y2] == 0 || Line[Y2] == 63)
    LineDir[Y2] *= -1;
  Line[Y2] += LineDir[Y2];   
}

/* Обновите координаты X и Y для растрового изображения */
void MoveBitmap(void)
{
  if(Bitmap[X1] == 0 || Bitmap[X1] == 43)
    BitmapDir[X1] *= -1;
  Bitmap[X1] += BitmapDir[X1];
 
  if
(Bitmap[Y1] == 0 || Bitmap[Y1] == 47)
    BitmapDir[Y1] *= -1;
  Bitmap[Y1] += BitmapDir[Y1];
}
[center]i love you [s]mxIni[/s] Mysql[/center]


Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#2 Дим » 20 февраля 2018, 22:12

Функции которых не было в вышеприведённом описании

Код: Выделить всё

HCuOLED.Erase(X1, Y1, X2, Y2);

Очистить выделенную область.
где:
X1 - координата оси X для первого угла. Допустимые значения: от 0 до 127
Y1 - координата оси Y для первого угла. Допустимые значения: от 0 до 63
X2 - координата оси X для противоположного угла. Допустимые значения: от0 до 127
Y2 - координата оси Y для противоположного угла. Допустимые значения: от 0 до 63

HCuOLED.Erase.png
HCuOLED.Erase
HCuOLED.Erase.png (80.04 КБ) 4570 просмотров
[center]i love you [s]mxIni[/s] Mysql[/center]

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#3 Дим » 20 февраля 2018, 22:37

HCuOLED примеры работы с библиотекой
HCuOLED примеры.png
HCuOLED примеры - рамка, линии
HCuOLED примеры.png (75.94 КБ) 4572 просмотра

Код: Выделить всё

  HCuOLED.Rect(0,0,127,63OUTLINE); // Рамка вокруг экрана
  
HCuOLED.Line(03212732); // Горизонтальная линия
  
HCuOLED.Line(6306363);  // Вертикальная линия 
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя