// Código disponível em : https://github.com/BitDogLab/BitDogLab-C/blob/main/display_oled/display_oled.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include "pico/stdlib.h"
#include "pico/binary_info.h"
#include "ssd1306.h"
#include "hardware/i2c.h"
const uint I2C_SDA = 14;
const uint I2C_SCL = 15;
int main()
{
stdio_init_all(); // Inicializa os tipos stdio padrão presentes ligados ao binário
// Inicialização do i2c
i2c_init(i2c1, ssd1306_i2c_clock * 1000);
gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);
gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);
gpio_pull_up(I2C_SDA);
gpio_pull_up(I2C_SCL);
// Processo de inicialização completo do OLED SSD1306
ssd1306_init();
// Preparar área de renderização para o display (ssd1306_width pixels por ssd1306_n_pages páginas)
struct render_area frame_area = {
start_column : 0,
end_column : ssd1306_width - 1,
start_page : 0,
end_page : ssd1306_n_pages - 1
};
calculate_render_area_buffer_length(&frame_area);
// zera o display inteiro
uint8_t ssd[ssd1306_buffer_length];
memset(ssd, 0, ssd1306_buffer_length);
render_on_display(ssd, &frame_area);
restart:
// Parte do código para exibir a mensagem no display (opcional: mudar ssd1306_height para 32 em ssd1306_i2c.h)
// /*
/* char *text[] = {
" Bem-vindos! ",
" Embarcatech "};
int y = 0;
for (uint i = 0; i < count_of(text); i++)
{
ssd1306_draw_string(ssd, 5, y, text[i]);
y += 8;
}
render_on_display(ssd, &frame_area); */
//
// Parte do código para exibir a linha no display (algoritmo de Bresenham)
/**
ssd1306_draw_line(ssd, 10, 10, 100, 50, true);
render_on_display(ssd, &frame_area);
*/
// Parte do código para exibir o bitmap no display
const uint8_t bitmap_128x64[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0a, 0x00, 0x00, 0x10,
0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x0a, 0x00, 0x00,
0x20, 0x21, 0x21, 0x21, 0x21, 0x01, 0x00, 0x00, 0x4a, 0x94, 0x94, 0x94, 0x94, 0x04, 0x00,
0x00, 0x10, 0x21, 0x22, 0x22, 0x22, 0x12, 0x00, 0x00, 0x4a, 0x4a, 0x44, 0x44, 0x44, 0x04,
0x00, 0x00, 0x90, 0x90, 0x92, 0x92, 0x92, 0x02, 0x00, 0x00, 0x22, 0x25, 0x24, 0x24, 0x24,
0x14, 0x00, 0x00, 0x14, 0x92, 0x92, 0x92, 0x92, 0x02, 0x00, 0x00, 0x00, 0x00, 0x48, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x28, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x94, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x92, 0x48, 0x92,
0x24, 0x09, 0x00, 0x00, 0x4a, 0x49, 0x92, 0x48, 0x92, 0x04, 0x00, 0x00, 0x10, 0x84, 0x44,
0x22, 0x44, 0x10, 0x00, 0x00, 0x4a, 0x51, 0x12, 0x89, 0x12, 0x05, 0x00, 0x00, 0x10, 0x8a,
0x48, 0x52, 0xa4, 0x08, 0x00, 0x00, 0x4a, 0x11, 0x91, 0x88, 0x08, 0x05, 0x00, 0x00, 0x20,
0xa2, 0x24, 0x22, 0xa5, 0x10, 0x00, 0x00, 0x4a, 0x49, 0x92, 0x94, 0x10, 0x0a, 0x00, 0x00,
0x10, 0x12, 0x49, 0x22, 0x4a, 0x01, 0x00, 0x00, 0xa0, 0x24, 0x22, 0x89, 0x10, 0x02, 0x00,
0x00, 0x10, 0x91, 0x88, 0x50, 0x4a, 0x01, 0x00, 0x00, 0x40, 0x24, 0x25, 0x8a, 0x24, 0x00,
0x00, 0x00, 0x80, 0x92, 0x48, 0x11, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x24, 0x04, 0x00, 0x00, 0x00, 0x00,
0x4a, 0x02, 0x88, 0x02, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x24, 0x09, 0x00, 0x00, 0x00,
0x00, 0x24, 0x02, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x88, 0x04, 0x22, 0x01, 0x00, 0x00,
0x00, 0x00, 0x52, 0x02, 0x88, 0x14, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x24, 0x01, 0x00,
0x00, 0x00, 0x00, 0x50, 0x02, 0x48, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x24, 0x04, 0x24, 0x00,
0x00, 0x00, 0x00, 0x00, 0x84, 0x02, 0x90, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x28, 0x01, 0x44,
0x02, 0x10, 0x00, 0x00, 0x00, 0x44, 0x00, 0x28, 0x09, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00,
0x40, 0x04, 0x20, 0x00, 0x80, 0x00, 0x48, 0x00, 0x14, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00,
0x00, 0xa0, 0x00, 0x90, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x02,
0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x28,
0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x40, 0x05, 0x00, 0x00, 0x00, 0x00, 0x08, 0x05,
0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02, 0xa0, 0x08, 0x00, 0x20, 0x00, 0x00, 0x24,
0x01, 0x10, 0x25, 0x00, 0x00, 0x00, 0x00, 0x92, 0x00, 0x40, 0x48, 0x00, 0xa8, 0x00, 0x00,
0x09, 0x00, 0x80, 0x92, 0x02, 0x45, 0x00, 0x40, 0xa4, 0x00, 0x40, 0x24, 0x54, 0x28, 0x05,
0x00, 0x11, 0x00, 0x00, 0x89, 0x22, 0x05, 0x00, 0x00, 0x44, 0x00, 0x00, 0x22, 0x94, 0x08,
0x00, 0x00, 0x28, 0x00, 0x00, 0x49, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x8a,
0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x88, 0x24, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x24,
0x91, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x90, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x49, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x10, 0x22, 0x80, 0xaa, 0xaa, 0x02, 0x00,
0x00, 0x40, 0x89, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x24, 0x80, 0xaa, 0x2a, 0x01,
0x00, 0x00, 0x40, 0x48, 0x00, 0x92, 0x44, 0x00, 0x00, 0x00, 0x00, 0x25, 0x80, 0x24, 0x09,
0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x11, 0x52, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0xa2,
0x08, 0x00, 0x00, 0x00, 0x00, 0x29, 0x80, 0x14, 0x05, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00,
0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x4a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x08,
0x80, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x50, 0x11, 0xa5, 0x04, 0x00, 0x00, 0x00, 0x00,
0x80, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x12, 0x52, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x49, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x84, 0xa4, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x52, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x25, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa5, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};
ssd1306_t ssd_bm;
ssd1306_init_bm(&ssd_bm, 128, 64, false, 0x3C, i2c1);
ssd1306_config(&ssd_bm);
ssd1306_draw_bitmap(&ssd_bm, bitmap_128x64);
while (true) {
sleep_ms(1000);
}
return 0;
}