#include "pico/stdlib.h"
#include "hardware/uart.h"
#include <stdio.h>
#define UART0_ID uart0
#define UART0_PINO_TX 0
#define UART0_PINO_RX 1
#define UART1_ID uart1
#define UART1_PINO_TX 4
#define UART1_PINO_RX 5
#define TAXA_BAUD 115200
// Função para limpar buffers de UART
void limpar_buffer_uart(uart_inst_t *uart) {
while (uart_is_readable(uart)) {
uart_getc(uart); // Lê e descarta dados residuais
}
}
int main(void) {
// Inicializa UART0 e UART1
uart_init(UART0_ID, TAXA_BAUD);
gpio_set_function(UART0_PINO_TX, GPIO_FUNC_UART);
gpio_set_function(UART0_PINO_RX, GPIO_FUNC_UART);
uart_init(UART1_ID, TAXA_BAUD);
gpio_set_function(UART1_PINO_TX, GPIO_FUNC_UART);
gpio_set_function(UART1_PINO_RX, GPIO_FUNC_UART);
// Inicializa a saída padrão para printf
stdio_init_all();
sleep_ms(2000); // Aguarda a inicialização
// Loop principal
while (true) {
char caractere;
printf("Digite um caractere para transmitir: ");
scanf(" %c", &caractere);
limpar_buffer_uart(UART1_ID); // Limpa buffer UART1 antes de enviar
uart_putc(UART0_ID, caractere); // Envia o caractere via UART0
printf("\n");
// Aguarda o caractere ser recebido na UART1
while (!uart_is_readable(UART1_ID)) {
tight_loop_contents(); // Aguardar ativamente
}
// Lê e exibe o caractere recebido
char recebido = uart_getc(UART1_ID);
printf("Dado recebido da UART1: %c\n", recebido);
limpar_buffer_uart(UART0_ID); // Limpa buffer UART0 depois de receber
}
return 0;
}