#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define UART_NUM UART_NUM_0
#define BUF_SIZE (1024)
#define MAX_CELL_SIZE 20
void uartPutchar(char c)
{
uart_write_bytes(UART_NUM, &c, sizeof(c));
}
void uartputs(const char *str)
{
uart_write_bytes(UART_NUM, str, strlen(str));
}
int uartkbhit(void)
{
int length = 0;
uart_get_buffered_data_len(UART_NUM, (size_t*)&length);
return (length > 0);
}
char uartgetchar(void)
{
char c;
while (uartkbhit() == 0)
{
vTaskDelay(10 / portTICK_PERIOD_MS);
}
uart_read_bytes(UART_NUM, &c, sizeof(c), 0);
return c;
}
void uart_gets(char *str, int maxlen)
{
int i = 0;
char c;
while (i < maxlen - 1)
{
c = uartgetchar();
if (c == '\n' || c == '\r')
{
break;
}
str[i++] = c;
}
str[i] = '\0';
}
// Función para eliminar espacios en la cadena
void eliminar(char* input)
{
int Longitud = strlen(input);
int c = 0;
char aux[Longitud];
for(int i = 0; i < Longitud; i++)
{
if(input[i] != ' '){
aux[c] = input[i];
c++;
}
}
aux[c] = '\0';
strcpy(input, aux); // Actualiza el contenido original
printf("%s \n",aux);
}
void llenar_matriz(char* cadena, int rows, int cols) {
char matriz[rows][cols];
int len = strlen(cadena);
int index = 0;
// Llenar la matriz
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (index < len) {
matriz[i][j] = cadena[index++];
} else {
matriz[i][j] = ' '; // Rellenar espacios vacíos
}
}
}
// Mostrar la matriz
printf("Matriz generada:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%c ", matriz[i][j]);
}
printf("\n");
}
}
void app_main()
{
uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
};
ESP_ERROR_CHECK(uart_param_config(UART_NUM, &uart_config));
ESP_ERROR_CHECK(uart_set_pin(UART_NUM, 4, 5, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
ESP_ERROR_CHECK(uart_driver_install(UART_NUM, BUF_SIZE, BUF_SIZE, 0, NULL, 0));
char input[100];
uartputs("Hola, mi nombre es Alain.\n");
uartputs("Escribir la cadena: ");
uart_gets(input, sizeof(input));
// Eliminar espacios de la cadena ingresada
eliminar(input);
// Calcular longitud de la cadena
int longitud = strlen(input);
printf("Longitud de la cadena sin espacios: %d\n", longitud);
// Calcular filas y columnas para la matriz cuadrada
int cols = ceil(sqrt(longitud));
int rows = ceil((double)longitud / cols);
printf("Filas: %d, Columnas: %d\n", rows, cols);
// Llenar y mostrar la matriz
llenar_matriz(input, rows, cols);
}