O display OLED SSD1306 é um monitor monocolor extremamente econômico comparado a outras telas. Com este display, é possível desenhar formas e exibir textos e imagens de bitmap. A conexão de dados deste modelo é I2C, mas existem outros monitores OLED que se comunicam usando a comunicação SPI.
O modelo em questão possui 0,96 polegadas com 128×64 pixels e não requer luz de fundo, o que resulta em um contraste muito agradável em ambientes escuros. Possui apenas quatro pinos, dois para alimentação (VCC e GND) e dois para dados (relógio serial SCL e serial data SDA), tornando a fiação muito simples.
O módulo possui um poderoso controlador de driver CMOS OLED de chip único - SSD1306. Ele pode se comunicar com o microcontrolador de várias maneiras, incluindo I2C e SPI. O SPI é geralmente mais rápido que o I2C, mas requer mais pinos de E/S. Enquanto o I2C requer apenas dois pinos e pode ser compartilhado com outros periféricos I2C. É uma troca entre pinos e velocidade.
Dependendo do modelo e fabricante os pinos de alimentação do OLED podem estar em ordem diferente, portanto verifique sempre antes de ligá-lo.
#include <Arduino.h> // Biblioteca principal do Arduino para permitir a criação de sketches #include <Wire.h> // Biblioteca necessária para a comunicação I2C #include <MicroLCD.h> // Biblioteca para controle do display OLED // LCD_SH1106 lcd; /* para módulo OLED modelo SH1106 */ // Descomente a linha acima e comente a linha abaixo se estiver usando um display SH1106 LCD_SSD1306 lcd; /* para módulo OLED modelo SSD1306 */ // Criação de um objeto `lcd` para controlar o display OLED do modelo SSD1306 // Definição dos padrões de imagem para o "tick" e "cross" // As imagens são definidas como arrays de bytes (16x16 pixels) // O PROGMEM garante que esses arrays sejam armazenados na memória flash do microcontrolador, // economizando a memória RAM const PROGMEM uint8_t tick[16 * 16 / 8] = {0x00,0x80,0xC0,0xE0,0xC0,0x80,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x78,0x30,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00}; const PROGMEM uint8_t cross[16 * 16 / 8] = {0x00,0x0C,0x1C,0x3C,0x78,0xF0,0xE0,0xC0,0xE0,0xF0,0x78,0x3C,0x1C,0x0C,0x00,0x00,0x00,0x30,0x38,0x3C,0x1E,0x0F,0x07,0x03,0x07,0x0F,0x1E,0x3C,0x38,0x30,0x00,0x00}; void setup() { lcd.begin(); // Inicializa o display OLED } void loop() { lcd.clear(); // Limpa o conteúdo atual do display // Exibe "Hello, world!" com tamanho de fonte pequeno lcd.setFontSize(FONT_SIZE_SMALL); lcd.println("Hello, world!"); // Exibe "Hello, world!" com tamanho de fonte médio lcd.setFontSize(FONT_SIZE_MEDIUM); lcd.println("Hello, world!"); delay(1000); // Aguarda por 1 segundo // Define a posição do cursor e desenha as imagens "tick" e "cross" no display lcd.setCursor(40, 6); // Define a posição para a imagem "tick" lcd.draw(tick, 16, 16); // Desenha a imagem "tick" lcd.setCursor(72, 6); // Define a posição para a imagem "cross" lcd.draw(cross, 16, 16); // Desenha a imagem "cross" delay(1000); // Aguarda por 1 segundo // Limpa o display e exibe o número 12345678 em diferentes tamanhos de fonte lcd.clear(); lcd.setCursor(0, 0); // Define o cursor no início do display lcd.setFontSize(FONT_SIZE_SMALL); // Tamanho de fonte pequeno lcd.printLong(12345678); // Exibe o número 12345678 delay(1000); // Aguarda por 1 segundo lcd.clear(); lcd.setCursor(0, 0); // Define o cursor no início do display lcd.setFontSize(FONT_SIZE_MEDIUM); // Tamanho de fonte médio lcd.printLong(12345678); // Exibe o número 12345678 delay(1000); // Aguarda por 1 segundo lcd.clear(); lcd.setCursor(0, 0); // Define o cursor no início do display lcd.setFontSize(FONT_SIZE_LARGE); // Tamanho de fonte grande lcd.printLong(12345678); // Exibe o número 12345678 delay(1000); // Aguarda por 1 segundo lcd.clear(); lcd.setCursor(0, 0); // Define o cursor no início do display lcd.setFontSize(FONT_SIZE_XLARGE); // Tamanho de fonte extra grande lcd.printLong(12345678); // Exibe o número 12345678 delay(1000); // Aguarda por 1 segundo }