#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/uart.h"
char dado, recebido;
// Função auxiliar para limpar o FIFO de recebimento da UART
void flush_uart(uart_inst_t *uart) {
while (uart_is_readable(uart)) {
(void)uart_getc(uart); // descarta o dado lido
}
}
int main(void) {
stdio_init_all();
sleep_ms(1000);
// Configura UART0 (TX: GP0, RX: GP1)
uart_init(uart0, 115200);
gpio_set_function(0, GPIO_FUNC_UART); // TX UART0
gpio_set_function(1, GPIO_FUNC_UART); // RX UART0
// Configura UART1 (TX: GP4, RX: GP5)
uart_init(uart1, 115200);
gpio_set_function(4, GPIO_FUNC_UART); // TX UART1
gpio_set_function(5, GPIO_FUNC_UART); // RX UART1
sleep_ms(500); // Tempo necessário para conexão estável
// Desabilita controle de fluxo de hardware
uart_set_hw_flow(uart0, false, false);
uart_set_hw_flow(uart1, false, false);
// Habilita o FIFO para evitar sobrecarga de buffer
uart_set_fifo_enabled(uart0, true);
uart_set_fifo_enabled(uart1, true);
while (true) {
// Antes de iniciar a nova iteração, limpa o FIFO das UARTs
flush_uart(uart0);
flush_uart(uart1);
// Lê caractere do console
printf("\nDigite um caractere: ");
scanf(" %c", &dado); // Usa scanf() conforme solicitado
// Envia o dado da UART0 para a UART1
uart_putc(uart0, dado);
printf("\nDado enviado: '%c'", dado);
sleep_ms(1000); // Pequena pausa antes da próxima iteração
// Aguarda um dado da UART1 (recebendo o que foi enviado)
while (!uart_is_readable(uart1)) {
tight_loop_contents(); // Aguarda sem travar o processador
}
// Lê o dado recebido da UART1
recebido = uart_getc(uart1);
printf("\nDado recebido: '%c'\n", recebido);
}
return 0;
}