#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#define UART_NUM UART_NUM_0
#define BUF_SIZE 1024
// Funções matemáticas
float soma(float a, float b) { return a + b; }
float subtracao(float a, float b) { return a - b; }
float multiplicacao(float a, float b) { return a * b; }
float divisao(float a, float b) {
return (b != 0) ? a / b : 0;
}
void calculadora_task(void *pvParameter) {
uint8_t data[BUF_SIZE];
while (1) {
int len = uart_read_bytes(UART_NUM, data, BUF_SIZE - 1, 1000 / portTICK_PERIOD_MS);
if (len > 0) {
data[len] = '\0';
float num1, num2;
char op;
if (sscanf((char *)data, "%f %c %f", &num1, &op, &num2) == 3) {
float resultado = 0;
switch (op) {
case '+': resultado = soma(num1, num2); break;
case '-': resultado = subtracao(num1, num2); break;
case '*': resultado = multiplicacao(num1, num2); break;
case '/': resultado = divisao(num1, num2); break;
default:
printf("Operador inválido!\n");
continue;
}
printf("Resultado: %.2f\n", resultado);
} else {
printf("Entrada inválida! Formato: <num1> <operador> <num2>\n");
}
}
}
}
void app_main() {
uart_driver_install(UART_NUM, BUF_SIZE, 0, 0, NULL, 0);
xTaskCreate(&calculadora_task, "calculadora_task", 4096, NULL, 5, NULL);
}