#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/uart.h"
// Definição dos pinos de UART
#define UART0_TX_PIN 0 // GPIO0 é o UART0 TX
#define UART0_RX_PIN 1 // GPIO1 é o UART0 RX
#define UART1_TX_PIN 8 // GPIO8 é o UART1 TX
#define UART1_RX_PIN 9 // GPIO9 é o UART1 RX
// Buffer para mensagens recebidas
#define BUFFER_SIZE 50
// Função para enviar uma mensagem e esperar pela resposta
void uart_send_and_receive(uart_inst_t *uart_tx, uart_inst_t *uart_rx, const char *message) {
char buffer[BUFFER_SIZE]; // Buffer para armazenar dados recebidos
int index = 0; // Índice do buffer
// Envia a mensagem via UART
uart_puts(uart_tx, message);
printf("Sent -> %s", message);
// Aguarda resposta (timeout de 500ms)
while (uart_is_readable_within_us(uart_rx, 500000)) { // 500ms de espera
char c = uart_getc(uart_rx); // Lê um caractere da UART
buffer[index++] = c;
// Interrompe ao receber o caractere de nova linha ou se o buffer estiver cheio
if (c == '\n' || index >= BUFFER_SIZE - 1) {
break;
}
}
// Finaliza a string recebida
buffer[index] = '\0';
// Exibe a resposta recebida ou indica que não houve resposta
if (index > 0) {
printf("Received -> %s\n", buffer);
} else {
printf("No response received.\n");
}
}
int main() {
// Inicializa USB para depuração
stdio_init_all();
printf("UART0 and UART1 Test Starting...\n");
// Inicializa UART0 com 115200 baud
uart_init(uart0, 115200);
gpio_set_function(UART0_TX_PIN, GPIO_FUNC_UART); // Configura GPIO0 como TX
gpio_set_function(UART0_RX_PIN, GPIO_FUNC_UART); // Configura GPIO1 como RX
// Inicializa UART1 com 115200 baud
uart_init(uart1, 115200);
gpio_set_function(UART1_TX_PIN, GPIO_FUNC_UART); // Configura GPIO4 como TX
gpio_set_function(UART1_RX_PIN, GPIO_FUNC_UART); // Configura GPIO5 como RX
// Mensagem de teste
const char *message0 = "Envio da UART0!\n";
const char *message1 = "Envio da UART1!\n";
// Loop principal
while (true) {
// UART0 envia para UART1 e espera a resposta
uart_send_and_receive(uart0, uart1, message0);
//sleep_ms(100);
// UART1 envia para UART0 e espera a resposta
//uart_send_and_receive(uart1, uart0, message1);
// Atraso para evitar sobrecarga de mensagens
sleep_ms(1000);
}
return 0;
}