#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "ssd1306.h"
#define PICO_I2C_SDA_PIN 20
#define PICO_I2C_SCL_PIN 21
#define atraso 25
void setup_I2C(void);
int main() {
stdio_init_all();
setup_I2C();
const char *words[] = { "SSD1306", "DISPLAY", "DRIVER" };
ssd1306_t disp;
disp.external_vcc = false;
ssd1306_init(&disp, 128, 64, 0x3C, i2c0);
ssd1306_clear(&disp);
char buf[8];
while (true) {
for (int y = 0; y < 31; ++y) {
ssd1306_draw_line(&disp, 0, y, 127, y);
ssd1306_show(&disp);
sleep_ms(atraso);
ssd1306_clear(&disp);
}
for (int y = 31; y < 63; ++y) {
ssd1306_draw_line(&disp, 0, y, 127, y);
ssd1306_show(&disp);
sleep_ms(atraso);
ssd1306_clear(&disp);
}
sleep_ms(2000);
for (int8_t i = 0; i < 3; i++) {
ssd1306_draw_string(&disp, 8, 8, 2, words[i]);
ssd1306_show(&disp);
sleep_ms(2000);
ssd1306_clear(&disp);
}
sleep_ms(2000);
for (int y = 0, i = 1; y >= 0; y += i) {
ssd1306_draw_line(&disp, 0, 31 - y, 127, 31 + y);
ssd1306_draw_line(&disp, 0, 31 + y, 127, 31 - y);
ssd1306_show(&disp);
sleep_ms(atraso);
ssd1306_clear(&disp);
if (y == 32) i = -1;
}
}
}
void setup_I2C(void) {
i2c_init(i2c0, 100000);
gpio_set_function(PICO_I2C_SDA_PIN, GPIO_FUNC_I2C);
gpio_set_function(PICO_I2C_SCL_PIN, GPIO_FUNC_I2C);
gpio_pull_up(PICO_I2C_SDA_PIN);
gpio_pull_up(PICO_I2C_SCL_PIN);
}