#include <stdio.h>
#include <stdlib.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "hardware/pio.h"
#include "ssd1306.h"
#include "font.h"
#define I2C_PORT i2c1
#define I2C_SDA 14
#define I2C_SCL 15
#define endereco 0x3C
int main() {
// I2C Initialisation. Using it at 400Khz.
i2c_init(I2C_PORT, 400 * 1000);
gpio_set_function(I2C_SDA, GPIO_FUNC_I2C); // Set the GPIO pin function to I2C
gpio_set_function(I2C_SCL, GPIO_FUNC_I2C); // Set the GPIO pin function to I2C
gpio_pull_up(I2C_SDA); // Pull up the data line
gpio_pull_up(I2C_SCL); // Pull up the clock line
ssd1306_t ssd; // Inicializa a estrutura do display
ssd1306_init(&ssd, WIDTH, HEIGHT, false, endereco, I2C_PORT); // Inicializa o display
ssd1306_config(&ssd); // Configura o display
ssd1306_send_data(&ssd); // Envia os dados para o display
// Limpa o display. O display inicia com todos os pixels apagados.
ssd1306_fill(&ssd, false);
ssd1306_send_data(&ssd);
bool cor = true;
while (true) {
ssd1306_fill(&ssd, !cor); // Limpa o display
ssd1306_rect(&ssd, 3, 3, 122, 60, cor, !cor); // Desenha um retângulo
ssd1306_line(&ssd, 3, 20, 123, 20, cor); // Desenha uma linha
ssd1306_draw_string(&ssd, " SEMAFORO", 8, 6);
ssd1306_rect(&ssd, 95, 15, 100, 20, cor, !cor); // Desenha um retângulo
ssd1306_DrawCircle(&ssd, 30, 40, 5, cor); // Desenha um círculo
ssd1306_DrawCircle(&ssd, 65, 40, 5, cor); // Desenha um círculo
ssd1306_DrawCircle(&ssd, 100, 40, 5, cor); // Desenha um círculo
ssd1306_FillCircle(&ssd, 100, 40, 5, cor); // Desenha um círculo
ssd1306_send_data(&ssd); // Atualiza o display
sleep_ms(735);
}
}
BTN A
BTN B
Até 3,3V
Até 6,6V