//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 CH1 2
#define CH2 3
#define CH3 6
#define CH4 7
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, sizeof(display_buffer));
gpio_init(CH1); gpio_set_dir(CH1, GPIO_IN); gpio_pull_up(CH1);
gpio_init(CH2); gpio_set_dir(CH2, GPIO_IN); gpio_pull_up(CH2);
gpio_init(CH3); gpio_set_dir(CH3, GPIO_IN); gpio_pull_up(CH3);
gpio_init(CH4); gpio_set_dir(CH4, GPIO_IN); gpio_pull_up(CH4);
char bin[20]; //Cria vetores de caracteres
char dec[20];
while (true) {
int b0 = !gpio_get(CH1);
int b1 = !gpio_get(CH2);
int b2 = !gpio_get(CH3);
int b3 = !gpio_get(CH4);
int valor = (b3 << 3) | (b2 << 2) | (b1 << 1) | b0; //Monta valor binário completo
sprintf(bin, "BIN: %d%d%d%d", b3, b2, b1, b0); //Cria uma string com os bits individuais
sprintf(dec, "DEC: %d", valor);
ssd1306_clear_buffer(display_buffer); //Atualiza display
ssd1306_write_text(display_buffer, 0, 0, "LEITURA BINARIA"); //Escreve texto no display
ssd1306_write_text(display_buffer, 0, 48, bin); //Mostra o valor binário
ssd1306_write_text(display_buffer, 0, 16, dec); //Mostra o valor decimal
ssd1306_send_data(display_buffer, sizeof(display_buffer)); //Atualiza o display com o conteúdo do buffer
sleep_ms(100);
}
}
RESET
Botão B1
OLED