Скачайте и установите Adafruit SH1106 и Adafruit-GFX-Library в папку libraries (arduino-1.xx.xx\libraries)
Основные функции для работы с дисплеем
- begin(SH1106_SWITCHCAPVCC, 0x3C) — Инициализация дисплея
- clearDisplay() — очистить кадр.
- display() — отрисовать кадр (выводит изображение на дисплей).
- setTextSize(i) — установить размер текста(i-число).
- setTextColor(color) — установить цвет текста (BLACK, WHITE).
- print(s) — написать текст, число и т.д.(s-число, строка и т.д.).
- println(s) — тоже самое что и print(s), но переводит курсор на новую строку (замена Enter на клавиатуре).
- setRotation(i) — поворот дисплея на 90,180,270,360 градусов(i — число от 0 до 3)
- drawBitmap (x, y, *bitmap, w, h, color) — рисует картинку(bitmap) в координатах x;y, ширины w, высоты h, цветом color.
- drawPixel(x,y,color) закрасить пиксель в координатах x;y выбранным цветом (WHITE, BLACK).
При использовании print и println как правило данные записываются в RAM память. Что бы принудительно записать данные в FLASH память используйте макрос F().
Например:
display.println F("Hello, world!");
Простой вывод текста на дисплей
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);//Создаём объект дисплей
void setup()
{
display.begin(SH1106_SWITCHCAPVCC, 0x3C);//Инициализация дисплея
display.clearDisplay();//Очистка буфера
display.display();//Очистка буфера
display.setCursor(0,0);//Устанавливаем курсор в левый-верхний угол
display.setTextSize(1);//Установка размера шрифта
display.setTextColor(WHITE);//Установка цвета текста
display.println("Hello, world!");//Пишем на дисплей
display.display();//Отображаем то что написали
}
Пример динамического изменения кадров
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);//Создаём объект дисплей
long counter = 0;//Переменная счётчик
void setup()
{
display.begin(SH1106_SWITCHCAPVCC, 0x3C);//Инициализация дисплея
display.clearDisplay();//Очистка буфера
display.display();//Очистка буфера
display.setTextSize(1);//Установка размера шрифта
display.setTextColor(WHITE);//Установка цвета текста
}
void loop()
{
display.clearDisplay();//Начинаем заново рисовать кадр
display.setCursor(0,0);//Устанавливаем курсор в левый-верхний угол
display.print("Frame: ");//Пишем на кадре
display.println(counter);//Пишем на кадре
display.display();//Выводим кадр на дисплей
counter++;
}
Мы добавили счётчик кадров и выводим его каждый раз.
Пример использования дисплея и I2C сканера.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);//Создаём объект дисплей
void setup()
{
display.begin(SH1106_SWITCHCAPVCC, 0x3C);//Инициализация дисплея
display.clearDisplay();//Очистка дисплея
display.display();
display.setTextSize(1);//Установка размера шрифта
display.setTextColor(WHITE);//Установка цвета текста
}
void loop()
{
byte error, address;//Переменные для хранения ошибок и подсчёта адресов
int nDevices;//Переменная для подсчёта количества устройств
display.setCursor(0, 0);//Устанавливаем курсор в начало
display.println("Scanning...");//Начинаем сканирование
nDevices = 0;
for (address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
display.print("I2C device found at address 0x");
if (address < 16)
display.print("0");
display.print(address, HEX);
nDevices++;
}
else if (error == 4)
{
display.print("Unknown error at address 0x");
if (address < 16)
display.print("0");
display.println(address, HEX);
}
}
if (nDevices == 0)
display.println("No I2C devices found");
else
display.println("done");
display.display();
delay(5000); // Ждём 5 секунд перед следующим сканированием
display.clearDisplay();
}