Данный дисплей подключается по шине I2C и питается от 3 вольт. Подробнее про подключение по I2C вы можете узнать по этой ссылке:
подключение_по_i2c
#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.
#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 секунд. } //
#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