Инструменты пользователя

Инструменты сайта


oled_0_96

Схема подключения

Данный дисплей подключается по шине I2C и питается от 3 вольт. Подробнее про подключение по I2C вы можете узнать по этой ссылке: подключение_по_i2c

Библиотеки

Примеры

Вывод текста (Hello World)

#include "SPI.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
 
void setup() {
// инициализация и очистка дисплея
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.display();
 
delay(1000);
display.setTextSize(1); // установка размера шрифта
display.setTextColor(WHITE); // установка цвета текста
display.setCursor(0,0); // установка курсора
 
display.println("Hello, world!");
display.display();
}
 
void loop() {
}

Еще пример

/* Well done!
Starting with Arduino OLED
 */
 
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
 
void setup() 
{
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
 
}
 
void loop() 
{
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Well done!");
  display.display();
 
}

Отсчет времени работы

#include <iarduino_OLED.h>                                 // Подключаем библиотеку iarduino_OLED.
iarduino_OLED myOLED(0x3C);                                // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
                                                           //
extern uint8_t MediumFont[];                               // Подключаем шрифт MediumFont.
uint32_t       i;                                          // Объявляем переменную для хранения времени прошедшего с момента старта скетча.
int            h, m, s;                                    // Объявляем переменную для хранения времени в часах, минутах и секундах.
                                                           //
void setup(){                                              //
    myOLED.begin();                                        // Инициируем работу с дисплеем.
    myOLED.setFont(MediumFont);                            // Указываем шрифт который требуется использовать для вывода цифр и текста.
}                                                          //
void loop(){                                               //
    i=millis();                                            // Получаем количество миллисекунд прошедшее с момента старта скетча.
    if(i%1000==0){ delay(1);                               // Выполняем скетч 1 раз в секунду. Так как условие истинно в течении 1 миллисекунды, то устанавливаем задержку в 1 миллисекунду.
        i/=1000; h=i/60/60%24; m=i/60%60; s=i%60;          // Рассчитываем часы, минуты и секунды.
                                   myOLED.setCursor(16,39);// Устанавливаем курсор в координату 16:31, это будет нижняя левая точка первой цифры выведенной функцией print().
        if(h<10){myOLED.print(0);} myOLED.print(h);        // Выводим часы прошедшие с момента старта скетча, в формате ЧЧ.
                                   myOLED.print(":");      // Выводим текст состоящий из одного символа «:»
        if(m<10){myOLED.print(0);} myOLED.print(m);        // Выводим минуты прошедшие с момента старта скетча, в формате ММ.
                                   myOLED.print(":");      // Выводим текст состоящий из одного символа «:»
        if(s<10){myOLED.print(0);} myOLED.print(s);        // Выводим секунды прошедшие с момента старта скетча, в формате СС.
    }                                                      //
}                                                          //
                                                           //

Демонстрация вывода текста Кириллицей с указанием разных кодировок

Представленные ниже скетчи позволят выводить Русский текст при работе в разных версиях Arduino IDE и ОС отличных от Windows.

Пример с использованием текстовой библиотеки iarduino_OLED_txt

#include <iarduino_OLED_txt.h>                             // Подключаем библиотеку iarduino_OLED_txt.
iarduino_OLED_txt myOLED(0x3C);                            // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
                                                           //
extern uint8_t SmallFontRus[];                             // Подключаем шрифт SmallFontRus.
                                                           //
void setup(){                                              //
    myOLED.begin();                                        // Инициируем работу с дисплеем.
    myOLED.setFont(SmallFontRus);                          // Указываем шрифт который требуется использовать для вывода цифр и текста.
}                                                          //
void loop(){                                               //
//  Вывод текста в кодировке UTF-8:                        //
    myOLED.clrScr();                                       // Чистим экран.
    myOLED.print("UTF8", 0, 0);                            // Выводим текст начиная с 0 столбца 0 строки.
    myOLED.setCoding(TXT_UTF8);                            // Меняем кодировку на UTF-8 (по умолчанию).
    myOLED.print("Ардуино iArduino", OLED_C, 4);           // Выводим текст по центру 4 строки.
    delay (5000);                                          // Ждём 5 секунд.
                                                           //
//  Вывод текста в кодировке CP866:                        //
    myOLED.clrScr();                                       // Чистим экран.
    myOLED.print("CP866", 0, 0);                           // Выводим текст начиная с 0 столбца 0 строки.
    myOLED.setCoding(TXT_CP866);                           // Меняем кодировку на CP866.
    myOLED.print("Ардуино iArduino", OLED_C, 4);           // Выводим текст по центру 4 строки.
    delay (5000);                                          // Ждём 5 секунд.
                                                           //
//  Вывод текста в кодировке WINDOWS-1251:                 //
    myOLED.clrScr();                                       // Чистим экран.
    myOLED.print("WIN1251", 0, 0);                         // Выводим текст начиная с 0 столбца 0 строки.
    myOLED.setCoding(TXT_WIN1251);                         // Меняем кодировку на WINDOWS-1251.
    myOLED.print("Ардуино iArduino", OLED_C, 4);           // Выводим текст по центру 4 строки.
    delay (5000);                                          // Ждём 5 секунд.
}                                                          //

Пример с использованием графической библиотеки iarduino_OLED

#include <iarduino_OLED.h>                                 // Подключаем библиотеку iarduino_OLED.
iarduino_OLED myOLED(0x3C);                                // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
                                                           //
extern uint8_t SmallFontRus[];                             // Подключаем шрифт SmallFontRus.
                                                           //
void setup(){                                              //
    myOLED.begin();                                        // Инициируем работу с дисплеем.
    myOLED.setFont(SmallFontRus);                          // Указываем шрифт который требуется использовать для вывода цифр и текста.
}                                                          //
void loop(){                                               //
//  Вывод текста в кодировке UTF-8:                        //
    myOLED.clrScr();                                       // Чистим экран.
    myOLED.print("UTF8", 0, 7);                            // Выводим текст начиная с координаты 0x7 (нижняя левая точка текста).
    myOLED.setCoding(TXT_UTF8);                            // Меняем кодировку на UTF-8 (по умолчанию).
    myOLED.print("Ардуино iArduino", OLED_C, 39);          // Выводим текст по центру экрана, координата нижней части текста по оси Y равна 39.
    delay (5000);                                          // Ждём 5 секунд.
                                                           //
//  Вывод текста в кодировке CP866:                        //
    myOLED.clrScr();                                       // Чистим экран.
    myOLED.print("CP866", 0, 7);                           // Выводим текст начиная с координаты 0x7 (нижняя левая точка текста).
    myOLED.setCoding(TXT_CP866);                           // Меняем кодировку на CP866.
    myOLED.print("Ардуино iArduino", OLED_C, 39);          // Выводим текст по центру экрана, координата нижней части текста по оси Y равна 39.
    delay (5000);                                          // Ждём 5 секунд.
                                                           //
//  Вывод текста в кодировке WINDOWS-1251:                 //
    myOLED.clrScr();                                       // Чистим экран.
    myOLED.print("WIN1251", 0, 7);                         // Выводим текст начиная с координаты 0x7 (нижняя левая точка текста).
    myOLED.setCoding(TXT_WIN1251);                         // Меняем кодировку на WINDOWS-1251.
    myOLED.print("Ардуино iArduino", OLED_C, 39);          // Выводим текст по центру экрана, координата нижней части текста по оси Y равна 39.
    delay (5000);                                          // Ждём 5 секунд.

Оба примера работают одинаково. Код скетчей отличается названием подключаемой библиотеки (1 и 2 строки) и номером вертикальной координаты (13,15, 20,22, 27,29 строки). В первом примере (для текстовой библиотеки) указывается номер строки (от 0 до 7), а во втором примере (для графической библиотеки) указывается номер пикселя (от 0 до 63). Если у Вас ОС Windows, Вы работаете в среде Arduino IDE 1.8.X и скетч был сохранён перед загрузкой, то указывать кодировку нет необходимости (символы будут переданы компилятору в кодировке UTF-8, которая используется библиотекой по умолчанию). Но в некоторых случаях может понадобиться явное указание кодировки. Например если у Вас ОС Windows, Вы работаете в среде Arduino IDE 1.8.X и скетч не был сохранён перед загрузкой, то все символы будут переданы компилятору в кодировке WINDOWS-1251.

Вывод символов по их коду: Представленные ниже скетчи могут понадобиться для указания Русских или специальных символов в строках. Этот пример можно использовать не только для создания строк выводимых на дисплей. Описанный метод действует для создания любых строк в Arduino IDE (так, например, можно создавать строки для вывода в монитор последовательного порта).

Таблица кодов Русских букв в кодировке CP866

Для вывода любого символа нужно указать его код в 8-ричной системе счисления, которому должен предшествовать обратный слеш «\». Данное правило действует для любых строк в Arduino IDE. Первая буква в строке примера - «A», имеет код 128. Если перевести 128 в 8-ричную систему счисления, получится (200)8. Значит букву «А» можно записать как «\200», букву «р» как «\340», букву «д» как «\244» и т.д.

Для перевода чисел из 10-тичной в 8-ричную систему предлагаем воспользоваться стандартным калькулятором Windows. Откройте калькулятор, выберите вид калькулятора - «Программист» и введите число, Вы увидите его представление в разных системах счисления: HEX(16), DEC(10), OCT(8) и BIN(2).

Если Вы пишите скетч с большим количеством выводимых строк и у Вас не хватает памяти ОЗУ, то предлагаем Вам использовать такой вид записи:

myOLED.print( F("Строка для дисплея") );  // Вывод строки на дисплей.
Serial.print( F("Строка для монитора") ); // Вывод строки в монитор последовательного порта.

Теперь выводимые Вами строки будут храниться в области памяти программ, не используя память ОЗУ.

Вывод предустановленных изображений

Данные примеры демонстрируют вывод небольших изображений входящих в состав библиотеки. Эти изображения хранятся как массивы в файле «DefaultImage.c» в папке «src» библиотеки iarduino_OLED. Вы можете открыть этот файл в любом текстовом редакторе и увидеть названия всех имеющихся изображений, и способ объявления массивов. Так как предустановленные изображения находятся в отдельном файле, то перед выводом на экран, нужно подключить те массивы изображения которых Вы хотите использовать в скетче.

Список предустановленных изображений и их названий

Узнать размеры картинок в пикселях можно функциями getImageWidth() и getImageHeight():

uint8_t X = myOLED.getImageWidth(Img_Logo);                // Ширина картинки из массива Img_Logo в пикселях.
uint8_t Y = myOLED.getImageHeight(Img_Logo);               // Высота картинки из массива Img_Logo в пикселях.

Вывод нескольких изображений на экран дисплея

#include <iarduino_OLED.h>                                 // Подключаем библиотеку iarduino_OLED.
iarduino_OLED  myOLED(0x3C);                               // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
                                                           //
extern uint8_t Img_Level_4[];                              // Подключаем изображение Img_Level_4   из встроенных картинок.
extern uint8_t Img_Antenna[];                              // Подключаем изображение Img_Antenna   из встроенных картинок.
extern uint8_t Img_Battery_0[];                            // Подключаем изображение Img_Battery_0 из встроенных картинок.
extern uint8_t Img_Battery_1[];                            // Подключаем изображение Img_Battery_1 из встроенных картинок.
extern uint8_t Img_Battery_2[];                            // Подключаем изображение Img_Battery_2 из встроенных картинок.
extern uint8_t Img_Battery_3[];                            // Подключаем изображение Img_Battery_3 из встроенных картинок.
extern uint8_t Img_BigBattery_low[];                       // Подключаем изображение Img_BigBattery_low из встроенных картинок.
       uint8_t i=0;                                        // Определяем переменную которая будет хранить номер от 0 до 3.
                                                           //
void setup(){                                              //
    myOLED.begin();                                        // Инициируем работу с дисплеем.
    myOLED.drawImage(Img_Level_4       , 0     , 7     );  // Выводим картинку Img_Level_4, указав координату её левого нижнего угла 0x7.
    myOLED.drawImage(Img_Antenna       , 12    , 7     );  // Выводим картинку Img_Antenna, указав координату её левого нижнего угла 10x7.
    myOLED.drawImage(Img_BigBattery_low, OLED_C, OLED_C);  // Выводим картинку Img_BigBattery_low по центру экрана.
}                                                          //
void loop(){                                               //
    while(millis()%300==0){                                // Выполняем код в теле оператора while через каждые 300 мс.
      i++; if(i>3){i=0;}                                   // Увеличиваем значение переменной i и обнуляем её если значение стало больше 3.
      switch(i){                                           // Создаём анимацию из четырех картинок, меняя их по значению переменной i.
        case 0: myOLED.drawImage(Img_Battery_0, OLED_R, OLED_T); break; // Выводим изображение Img_Battery_0 в правом верхнем углу экрана.
        case 1: myOLED.drawImage(Img_Battery_1, OLED_R, OLED_T); break; // Выводим изображение Img_Battery_0 в правом верхнем углу экрана.
        case 2: myOLED.drawImage(Img_Battery_2, OLED_R, OLED_T); break; // Выводим изображение Img_Battery_0 в правом верхнем углу экрана.
        case 3: myOLED.drawImage(Img_Battery_3, OLED_R, OLED_T); break; // Выводим изображение Img_Battery_0 в правом верхнем углу экрана.
      }                                                    //
    }                                                      //
}                                                          //

Вывод фигур

На дисплей можно выводить такие фигуры как: точка (drawPixel), линия (drawLine), прямоугольник (drawRect) и круг (drawCircle). Функции прорисовки фигур принимают в качестве обязательных параметров, только координаты фигур. Дополнительными параметрами являются: флаг заливки (указывает на необходимость закрасить фигуру) и цвет (фигуры и её заливки). Если дополнительные параметры не указывать, то фигура будет выводиться белым цветом, без заливки.

#include <iarduino_OLED.h>                                 // Подключаем библиотеку iarduino_OLED.
iarduino_OLED myOLED(0x3C);                                // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
                                                           //
void setup(){                                              //
    myOLED.begin();                                        // Инициируем работу с дисплеем.
}                                                          //
void loop(){                                               //
    myOLED.drawRect   (10, 10,  50, 50, true , 1);         // Прорисовываем квадрат по двум точкам: 10x10, 50x50       , залить - true  (да) , цвет - 1 (белый).
    myOLED.drawRect   (15, 15,  45, 45, true , 0);         // Прорисовываем квадрат по двум точкам: 15x15, 45x45       , залить - true  (да) , цвет - 0 (черный).
    myOLED.drawLine   (10, 10,  50, 50,        0);         // Прорисовываем линию через две точки:  10x10, 50x50       ,                       цвет - 0 (черный).
    myOLED.drawLine   (10, 50,  50, 10,        0);         // Прорисовываем линию через две точки:  10x50, 50x10       ,                       цвет - 0 (черный).
    myOLED.drawCircle (30, 30,      10, false, 1);         // Прорисовываем круг с центром с точке  30x30 и радиусом 10, залить - false (нет), цвет - 1 (белый).
    myOLED.drawCircle (30, 30,       5, true , 1);         // Прорисовываем круг с центром с точке  30x30 и радиусом 5 , залить - true  (да) , цвет - 1 (белый).
    myOLED.drawPixel  (30, 30,                 0);         // Прорисовываем точку в координате      30x30,                                     цвет - 0 (черный).
    myOLED.drawRect   (60, 10, 100, 50, false, 1);         // Прорисовываем квадрат по двум точкам: 60x10, 100x50      , залить - false (нет), цвет - 1 (белый).
    myOLED.drawRect   (65, 15,  95, 45, true , 1);         // Прорисовываем квадрат по двум точкам: 65x15,  95x45      , залить - true  (да) , цвет - 1 (белый).
    myOLED.drawLine   (60, 10, 100, 50,        1);         // Прорисовываем линию через две точки:  60x10, 100x50      ,                       цвет - 1 (белый).
    myOLED.drawLine   (60, 50, 100, 10,        1);         // Прорисовываем линию через две точки:  60x50, 100x10      ,                       цвет - 1 (белый).
    myOLED.drawCircle (80, 30,      10, false, 0);         // Прорисовываем круг с центром с точке  80x30 и радиусом 10, залить - false (нет), цвет - 0 (черный).
    myOLED.drawCircle (80, 30,       5, true,  0);         // Прорисовываем круг с центром с точке  80x30 и радиусом 10, залить - true  (да) , цвет - 0 (черный).
    myOLED.drawPixel  (80, 30,                 1);         // Прорисовываем точку в координате      80x30,                                     цвет - 1 (белый).
    delay(2000);                                           // Ждём 2 секунды.
    myOLED.clrScr();                                       // Чистим экран.
    delay(1000);                                           // Ждём 1 секунду.
}                                                          //

ИсточникIarduino

oled_0_96.txt · Последнее изменение: 2020/12/16 20:53 — admin

Инструменты страницы