// IFMA - Embarcatech - jan-fev/2025
// Atividade Capítulos 05 a 08 - Clock e Temporizador
// Nome: Alberto Carlos de Oliveira Andrade
// Tarefa 2:
// 03 - Elabore um código utilizando a interfaces UART0 e conecte os fios TX e RX
// atribuídos à essa interface entre. Essa estrutura envia dados e recebe os dados
// na mesma interface, apenas para verificar seu funcionamento. Utilize a função scanf
// da biblioteca stdio para enviar via console um dado à placa, em seguida, transmita
// da UART0 para a UART1, e por fim, transmita o dado recebido para o console utilizando o printf.
#include <stdio.h>
#include "pico/stdlib.h"
#include <string.h>
#include "hardware/uart.h"
#define UART0_TX_PIN 0 // Pino TX da UART0
#define UART0_RX_PIN 1 // Pino RX da UART0
#define UART1_TX_PIN 8 // Pino TX da UART1
#define UART1_RX_PIN 9 // Pino RX da UART1
char message[50]; // Variável para armazenar a mensagem a ser enviada
int main() {
stdio_init_all(); // Inicializa as interfaces de entrada/saída
// Configurações da UART0
uart_init(uart0, 115200); // Inicializa a UART0 com baud rate de 115200
gpio_set_function(UART0_TX_PIN, GPIO_FUNC_UART); // Configura o pino 0 como TX da UART0
gpio_set_function(UART0_RX_PIN, GPIO_FUNC_UART); // Configura o pino 1 como RX da UART0
// Configurações da UART1
uart_init(uart1, 115200); // Inicializa a UART1 com baud rate de 115200
gpio_set_function(UART1_TX_PIN, GPIO_FUNC_UART); // Configura o pino 8 como TX da UART1
gpio_set_function(UART1_RX_PIN, GPIO_FUNC_UART); // Configura o pino 9 como RX da UART1
uart_set_fifo_enabled(uart0, true); // Habilita o FIFO na UART0
uart_set_fifo_enabled(uart1, true); // Habilita o FIFO na UART1
// Solicita ao usuário para digitar a mensagem inicial
printf("Digite a mensagem para enviar via UART0: ");
scanf("%s", message); // Recebe a mensagem do console
// Envia a mensagem inicial pela UART0
uart_puts(uart0, message);
while (true) {
// Aguarda e verifica se há dados disponíveis na UART1
if (uart_is_readable(uart1)) { // Verifica se há dados para ler na UART1
char received_message[50]; // Variável para armazenar a mensagem recebida
int i = 0;
// Lê a mensagem recebida da UART1
while (uart_is_readable(uart1) && i < sizeof(received_message) - 1) {
received_message[i++] = uart_getc(uart1); // Recebe os dados da UART1
}
received_message[i] = '\0'; // Finaliza a string recebida
printf("\nMensagem recebida da UART1: %s\n", message, received_message); // Imprime a mensagem recebida no console
printf("\nDigite uma nova mensagem para enviar via UART0: \n"); // Solicita ao usuário uma nova mensagem para enviar
scanf("%s", message); // Recebe a nova mensagem
uart_puts(uart0, message); // Envia a nova mensagem pela UART0
}
sleep_ms(100); // Atraso para evitar sobrecarga do processador
}
return 0;
}