#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include <string.h>
#define MATRIX_ROWS 10
#define MATRIX_COLS 5
void uartPutchar(char c)
{
uart_write_bytes(0, &c, sizeof(c));
}
void uartputs(const char *str)
{
uart_write_bytes(0, str, strlen(str));
}
void uartputchar(char c)
{
uart_write_bytes(0, &c, sizeof(c));
}
int uartkbhit(void)
{
int length = 0;
uart_get_buffered_data_len(0, (size_t*)&length);
return (length > 0);
}
char uartgetchar(void)
{
char c;
while (uartkbhit() == 0)
{
vTaskDelay(10 / portTICK_PERIOD_MS);
}
uart_read_bytes(0, &c, sizeof(c), 0);
return c;
}
void printMatrix(char matrix[MATRIX_ROWS][MATRIX_COLS])
{
for (int i = 0; i < MATRIX_ROWS; i++)
{
for (int j = 0; j < MATRIX_COLS; j++)
{
uartputchar(matrix[i][j]);
uartputchar(' ');
}
uartputchar('\n');
}
}
void app_main()
{
const uart_port_t uart_num = UART_NUM_0;
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));
const int uart_buffer_size = (1024 * 2);
QueueHandle_t uart_queue;
ESP_ERROR_CHECK(uart_driver_install(uart_num, uart_buffer_size, uart_buffer_size, 10, &uart_queue, 0));
char matrix[MATRIX_ROWS][MATRIX_COLS] = {{0}};
int row = 0, col = 0;
while (true)
{
char tecla = uartgetchar();
if (tecla == '\n' || tecla == '\r')
{
if (col > 0)
{
row++;
col = 0;
}
if (row >= MATRIX_ROWS)
{
break;
}
}
else
{
matrix[row][col++] = tecla;
if (col >= MATRIX_COLS)
{
row++;
col = 0;
if (row >= MATRIX_ROWS)
{
break;
}
}
}
uartputchar(tecla);
uartputs(" - Captured\n");
vTaskDelay(10 / portTICK_PERIOD_MS);
}
uartputs("Matrix:\n");
printMatrix(matrix);
}