//Gabriel Oliveira, Dênis Flores e Arthur Zagretti
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "ssd1306.h"
#define I2C_PORT i2c0
#define SDA_PIN 20
#define SCL_PIN 21
#define BOTAO_B1 22
uint8_t display_buffer[128 * SSD1306_HEIGHT / 8]; // Buffer de RAM de tela
int main() {
stdio_init_all();
SSD1306_init(); // Inicializa a interface I2C e o display
ssd1306_clear_buffer(display_buffer); // Limpa o buffer
ssd1306_send_data(display_buffer, 128 * SSD1306_HEIGHT / 8);
gpio_init(BOTAO_B1);
gpio_set_dir(BOTAO_B1, GPIO_IN);
gpio_pull_up(BOTAO_B1);
uint8_t contador = 0; //Cria a variável contador de 8 bits(0 a 15), começando no valor 0
char dec[20]; //Cria vetores de caracteres
char hex[20];
char bin[20];
while (true) {
if (!gpio_get(BOTAO_B1)) {
contador++;
if (contador > 15)
contador = 0;
sleep_ms(250);
}
sprintf(dec, "DEC: %d", contador); //Converte o valor do contador para texto decimal
sprintf(hex, "HEX: %X", contador); //Converte o número para hexadecimal
sprintf(bin, "BIN: %d%d%d%d", //Cria uma string com os bits individuais
(contador >> 3) & 1, //Desloca o número 3 bits para direita, pega o bit mais significativo
(contador >> 2) & 1, //Pega o terceiro bit
(contador >> 1) & 1, //Pega o segundo bit
contador & 1 //Pega o bit menos significativo
);
ssd1306_clear_buffer(display_buffer); //Apaga o conteúdo antigo
ssd1306_write_text(display_buffer, 0, 0, "CONTADOR 0-15"); //Escreve texto no display
ssd1306_write_text(display_buffer, 0, 16, dec); //Mostra o valor decimal
ssd1306_write_text(display_buffer, 0, 32, hex); //Mostra o valor em hexadecimal
ssd1306_write_text(display_buffer, 0, 48, bin); //Mostra o valor binário
ssd1306_send_data(display_buffer, sizeof(display_buffer)); //Atualiza o display com o conteúdo do buffer
sleep_ms(50);
}
}GPIO14
GPIO 13
GPIO 12
GPIO 11
GPIO 10
GPIO 9
GPIO 8
GP14
GP13
GP12
GP11
GP10
GP9
GP8
RESET
Botão B1
OLED
4.3V
COM
3.3V
GND
GND