#include "pico/stdlib.h"
#include <stdio.h>
#include <string.h>
// Definição dos pinos para UART0 e UART1
#define UART0_TX_PIN 0
#define UART0_RX_PIN 1
#define UART1_TX_PIN 4
#define UART1_RX_PIN 5
// Definição dos pinos LED
#define LED1_PIN 2
#define LED2_PIN 7
int main() {
stdio_init_all();
printf("UART0 e UART1 Iniciando testes...\n");
gpio_init(LED1_PIN);
gpio_init(LED2_PIN);
gpio_set_dir(LED1_PIN, GPIO_OUT);
gpio_set_dir(LED2_PIN, GPIO_OUT);
// Inicialização das UARTs
uart_init(uart0, 115200); // UART0 a 115200 baud
uart_init(uart1, 115200); // UART1 a 115200 baud
// Configuração dos pinos para funções UART
gpio_set_function(UART0_TX_PIN, GPIO_FUNC_UART);
gpio_set_function(UART0_RX_PIN, GPIO_FUNC_UART);
gpio_set_function(UART1_TX_PIN, GPIO_FUNC_UART);
gpio_set_function(UART1_RX_PIN, GPIO_FUNC_UART);
// Arrays para armazenar mensagens
char message[10] = {}; // Mensagem inicial lida do console
char msg_u1[10] = {}; // Mensagem recebida pela UART1
char msg_u0[10] = {}; // Mensagem recebida pela UART0
// Leitura da mensagem inicial do console usando scanf
printf("Digite uma mensagem (max 9 caracteres): ");
scanf("%9s", message);
printf("Mensagem recebida: %s\n", message);
// Transmissão da mensagem de UART0 para UART1
size_t tamanho = strlen(message);
printf("Enviando mensagem de UART0 para UART1...\n");
for (int i = 0; i <= tamanho; i++) {
gpio_put(LED1_PIN, 1); // Liga LED1
uart_putc_raw(uart0, message[i]);
uart_tx_wait_blocking(uart0);// A mensagem é enviada pelo TX0 para o console e para RX1 da UART1
msg_u1[i] = uart_getc(uart1); // A mensagem é recebida pela UART1 e armazenada em msg_u1
sleep_ms(500);
gpio_put(LED2_PIN, 0); // Desliga LED2
}
gpio_put(LED1_PIN, 0); // Desliga LED1
printf("Mensagem recebida pela UART1: %s\n", msg_u1);
// Transmissão da mensagem de UART1 para UART0
size_t tamanho_msg_u1 = strlen(msg_u1);
printf("Enviando mensagem de UART1 para UART0...\n");
for (int i = 0; i <= tamanho_msg_u1; i++) {
gpio_put(LED2_PIN, 1); // Liga LED2
uart_putc_raw(uart1, msg_u1[i]);// A mensagem é enviada pelo TX1 para RX0 da UART0
uart_tx_wait_blocking(uart1);
msg_u0[i] = uart_getc(uart0); // A mensagem é recebida pela UART0 e armazenada em msg_u0
uart_putc_raw(uart0, msg_u0[i]); //A mensagem é impressa no console pela UART0 (TX0)
sleep_ms(100);
}
gpio_put(LED2_PIN, 0); // Desliga LED2
printf("Mensagem recebida de volta pela UART0: %s\n", msg_u0);
printf("UART do WOkwi ta com erro? \n");
printf("Teste concluído, pois pisca LED2...\n");
// Loop para LED2
while(1) {
sleep_ms(100);
gpio_put(LED2_PIN, 0);
sleep_ms(100);
gpio_put(LED2_PIN, 1);
}
}