#include <Arduino.h>
// Definição da struct para os comandos CNC
typedef struct {
char comando; // Letra do comando (ex.: 'G', 'X', 'Y')
int valor; // Valor associado ao comando (ex.: 0, 1, etc.)
} CNC_Comando;
// Função para processar a string de comando
void processarComando(const char* entrada, CNC_Comando* comando) {
if (entrada == NULL || strlen(entrada) < 2) {
Serial.println("Comando inválido!");
return;
}
comando->comando = entrada[0]; // Primeiro caractere é o comando
comando->valor = atoi(&entrada[1]); // O restante é o valor convertido para inteiro
}
// Função para executar um comando no motor de passo
void executarComando(const CNC_Comando* comando) {
switch (comando->comando) {
case 'G':
if (comando->valor == 0) {
Serial.println("Executando G0: Movimento rápido.");
// Código para movimentar o motor rapidamente
} else if (comando->valor == 1) {
Serial.println("Executando G1: Movimento linear.");
// Código para movimentar o motor linearmente
} else {
Serial.println("Comando G desconhecido.");
}
break;
case 'X':
Serial.printf("Movendo para X: %d\n", comando->valor);
// Código para movimentar no eixo X
break;
case 'Y':
Serial.printf("Movendo para Y: %d\n", comando->valor);
// Código para movimentar no eixo Y
break;
default:
Serial.printf("Comando desconhecido: %c\n", comando->comando);
break;
}
}
// Comandos de exemplo
const char* comandos[] = {"G1", "X10", "Y-20"};
CNC_Comando comando;
void setup() {
Serial.begin(115200); // Inicializa a comunicação serial
Serial.println("Iniciando o ESP32 - Teste de Comandos CNC");
// Processa e executa cada comando
for (int i = 0; i < sizeof(comandos) / sizeof(comandos[0]); i++) {
processarComando(comandos[i], &comando);
executarComando(&comando);
}
}
void loop() {
// O loop pode ser usado para receber comandos do usuário no futuro
}