// IFMA - SISTEMAS EMBARCADOS
// HUGO FELIPE DOS SANTOS ROCHA
// UNIT04 - Cap. 05 a 08 - ATIVIDADE: TAREFA DE ENVIO - Clock e temporizador
/*TAREFA 2:
3. 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 "hardware/uart.h"
// Define as UARTs e seus respectivos pinos
#define UART0_ID uart0
#define UART1_ID uart1
#define UART0_TX_PIN 0 // GPIO para TX da UART0
#define UART0_RX_PIN 1 // GPIO para RX da UART0
#define UART1_TX_PIN 4 // GPIO para TX da UART1
#define UART1_RX_PIN 5 // GPIO para RX da UART1
#define MAX_INPUT_LENGTH 100 // Tamanho máximo para a entrada
int main() {
// Inicializa a UART padrão
stdio_init_all();
// Configura UART0
uart_init(UART0_ID, 115200); // Inicializa a UART0 com 115200 bps
gpio_set_function(UART0_TX_PIN, GPIO_FUNC_UART); // Define o pino TX da UART0
gpio_set_function(UART0_RX_PIN, GPIO_FUNC_UART); // Define o pino RX da UART0
// Configura UART1
uart_init(UART1_ID, 115200); // Inicializa a UART1 com 115200 bps
gpio_set_function(UART1_TX_PIN, GPIO_FUNC_UART); // Define o pino TX da UART1
gpio_set_function(UART1_RX_PIN, GPIO_FUNC_UART); // Define o pino RX da UART1
printf("Sistema UART iniciado.\nDigite no console para transmitir via UART.\n");
char input[MAX_INPUT_LENGTH]; // Buffer para armazenar a entrada
while (true) {
// Lê uma linha inteira do console
if (fgets(input, MAX_INPUT_LENGTH, stdin)) {
printf("\nVocê digitou: %s", input); // Mostra o que foi digitado no console
// Envia cada caractere da linha pela UART0 para UART1
for (int i = 0; input[i] != '\0'; i++) {
uart_putc(UART1_ID, input[i]);
}
// Recebe os caracteres da UART1 e envia de volta ao console
printf("\nMensagem recebida pela UART1. \n");
while (uart_is_readable(UART1_ID)) {
char received = uart_getc(UART1_ID);
putchar(received); // Exibe o caractere recebido no console
}
printf("\n");
}
}
return 0;
}