Skip to content

Commit

Permalink
Mudar nome das classes e parametrizar velocidades
Browse files Browse the repository at this point in the history
  • Loading branch information
Henrique-BO committed Jun 27, 2022
1 parent 6a8a7cc commit 2cc4751
Show file tree
Hide file tree
Showing 12 changed files with 90 additions and 101 deletions.
18 changes: 9 additions & 9 deletions include/controlador.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

// Velocidade máxima de deslocamento
#define MAX_SPEED 30000.0
#define FAST_SPEED 500.0
#define LINEAR_SPEED 300.0
#define CALIBRAR_SPPED 100.0

// Resolução de passo de cada eixo
#define STEPS_POR_MM_X 4.750893824 // 2pi/200*R
Expand All @@ -25,7 +28,7 @@
#define ARC_ANGULAR_TRAVEL_EPSILON 5e-7

// Período da Task do controlador
#define CONTROLADOR_DELAY_MS 10
#define CONTROLADOR_DELAY_MS 1

typedef struct {
int stepsX;
Expand All @@ -36,32 +39,29 @@ typedef struct {
// Wrapper da Task do controlador
void vTaskControlador(void *param);

class Controlador {
class Controlador_t {
public:
Controlador(int pinStepX, int pinDirX, int pinStepY, int pinDirY, int pinStepZ, int pinDirZ);
Controlador_t(int pinStepX, int pinDirX, int pinStepY, int pinDirY, int pinStepZ, int pinDirZ);
void iniciarControlador();
// void enviarComando(int G, float X, float Y, float Z);
void enviarComando(GCodeParser *pGCode);
void calibrar();
void cancelar();
void origem();
void zerarEixos();
void taskControlar();

private:
// seta a posição desejada em cada eixo, calculando e configurando
// as velocidades para obter movimento retilíneo no plano XY (se linear == true)
void nextTarget();

// calcula as posições necessárias para interpolar um arco (G02 ou G03)
void arco(ponto_steps_t position, ponto_steps_t target, ponto_steps_t offset, bool is_clockwise_arc);

// ponteiros para os motores de passo
AccelStepper *pStepperX;
AccelStepper *pStepperY;
AccelStepper *pStepperZ;

// velocidade de deslocamento
float speed = 50.0; // TODO calcular velocidade efetiva

// flags de controle
bool calibrando = false;
bool mover = false;
Expand All @@ -72,7 +72,7 @@ class Controlador {
std::queue<ponto_steps_t> filaTargets;
};

extern Controlador controlador;
extern Controlador_t Controlador;

extern SemaphoreHandle_t xSemaphoreControlador;

Expand Down
3 changes: 1 addition & 2 deletions include/definicoes_sistema.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#define PIN_DIR_Z 14

// Pinos dos sensores de fim de curso
#define PIN_SENSOR_1 4
#define PIN_SENSOR_2 5
#define PIN_SENSOR 4

#endif
6 changes: 3 additions & 3 deletions include/interface_wifi.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

#include "ESPAsyncWebServer.h"

class InterfaceWiFi {
class InterfaceWiFi_t {
public:
InterfaceWiFi(): server(AsyncWebServer(80)) {}
InterfaceWiFi_t(): server(AsyncWebServer(80)) {}
void iniciarWiFi();
void imprimir();
void cancelar();
Expand All @@ -20,6 +20,6 @@ class InterfaceWiFi {
AsyncWebServer server;
};

extern InterfaceWiFi interfaceWifi;
extern InterfaceWiFi_t InterfaceWiFi;

#endif
6 changes: 3 additions & 3 deletions include/interpretador_g.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@

void vTaskInterpretadorG(void *param);

class InterpretadorG {
class InterpretadorG_t {
public:
InterpretadorG(){}
InterpretadorG_t(){}
void iniciarInterpretadorG();
void imprimir();
void cancelar();
Expand All @@ -25,6 +25,6 @@ class InterpretadorG {
int line_number = 1;
};

extern InterpretadorG interpretadorG;
extern InterpretadorG_t InterpretadorG;

#endif
6 changes: 3 additions & 3 deletions include/maquina_estados.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ typedef struct ProxEstadoAcao {
* @brief Classe do componente Máquina de Estados
*
*/
class MaquinaEstados {
class MaquinaEstados_t {
public:
MaquinaEstados(){}
MaquinaEstados_t(){}

/**
* @brief Inicia a Máquina de Estados, criando a matriz de transição de estados e a task do FreeRTOS
Expand Down Expand Up @@ -126,7 +126,7 @@ class MaquinaEstados {

void vTaskMaquinaEstados(void *param);

extern MaquinaEstados maquinaEstados;
extern MaquinaEstados_t MaquinaEstados;

extern QueueHandle_t xQueueEventos;

Expand Down
7 changes: 3 additions & 4 deletions include/sensor_curso.h
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
#ifndef SENSOR_CURSO_H
#define SENSOR_CURSO_H

class SensorCurso {
class SensorCurso_t {
public:
SensorCurso(int pin): pin(pin){}
SensorCurso_t(int pin): pin(pin){}
void iniciarSensor();
bool origem();

private:
int pin;
};

extern SensorCurso sensorCurso1;
extern SensorCurso sensorCurso2;
extern SensorCurso_t SensorCurso;

#endif
42 changes: 23 additions & 19 deletions src/controlador.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

SemaphoreHandle_t xSemaphoreControlador;

Controlador::Controlador(int pinStepX, int pinDirX, int pinStepY, int pinDirY, int pinStepZ, int pinDirZ)
Controlador_t::Controlador_t(int pinStepX, int pinDirX, int pinStepY, int pinDirY, int pinStepZ, int pinDirZ)
{
pStepperX = new AccelStepper(AccelStepper::DRIVER, pinStepX, pinDirX);
pStepperY = new AccelStepper(AccelStepper::DRIVER, pinStepY, pinDirY);
Expand All @@ -21,7 +21,7 @@ Controlador::Controlador(int pinStepX, int pinDirX, int pinStepY, int pinDirY, i
pStepperY->setPinsInverted(true, false, false);
}

void Controlador::iniciarControlador()
void Controlador_t::iniciarControlador()
{
Serial.println("[Controlador] Iniciando controlador");

Expand All @@ -36,8 +36,7 @@ void Controlador::iniciarControlador()
);
}

// void Controlador::enviarComando(int G, float X, float Y, float Z)
void Controlador::enviarComando(GCodeParser *pGCode)
void Controlador_t::enviarComando(GCodeParser *pGCode)
{
static int G = -1;
static int stepsX, stepsY, stepsZ, stepsI, stepsJ;
Expand Down Expand Up @@ -126,17 +125,17 @@ void Controlador::enviarComando(GCodeParser *pGCode)
mover = true;
}

void Controlador::calibrar()
void Controlador_t::calibrar()
{
calibrando = true;
mover = false;
movendo = false;

Serial.println("[Controlador] Iniciando calibração");
pStepperX->setSpeed(-speed);
pStepperX->setSpeed(-CALIBRAR_SPPED);
}

void Controlador::cancelar()
void Controlador_t::cancelar()
{
// para os eixos e levanta a caneta
while (!filaTargets.empty()) {
Expand All @@ -153,7 +152,13 @@ void Controlador::cancelar()
Serial.println("[Controlador] Cancelando movimento");
}

void Controlador::nextTarget()
void Controlador_t::zerarEixos()
{
pStepperY->setCurrentPosition(0);
pStepperZ->setCurrentPosition(0);
}

void Controlador_t::nextTarget()
{
float speedX, speedY;

Expand All @@ -170,20 +175,20 @@ void Controlador::nextTarget()
float dist = sqrt(pow(target.stepsX - pStepperX->currentPosition(),2) +
pow(target.stepsY - pStepperY->currentPosition(),2)
);
speedX = speed * (target.stepsX - pStepperX->currentPosition()) / dist;
speedY = speed * (target.stepsY - pStepperY->currentPosition()) / dist;
speedX = LINEAR_SPEED * (target.stepsX - pStepperX->currentPosition()) / dist;
speedY = LINEAR_SPEED * (target.stepsY - pStepperY->currentPosition()) / dist;
} else {
speedX = speed;
speedY = speed;
speedX = FAST_SPEED;
speedY = FAST_SPEED;
}

pStepperX->setSpeed(speedX);
pStepperY->setSpeed(speedY);
pStepperZ->setSpeed(speed);
pStepperZ->setSpeed(FAST_SPEED);
Serial.printf("[Controlador] Target X=%d Y=%d Z=%d\n", pStepperX->targetPosition(), pStepperY->targetPosition(), pStepperZ->targetPosition());
}

void Controlador::arco(ponto_steps_t position, ponto_steps_t target, ponto_steps_t offset, bool is_clockwise_arc)
void Controlador_t::arco(ponto_steps_t position, ponto_steps_t target, ponto_steps_t offset, bool is_clockwise_arc)
{
Serial.println("[Controlador] Interpolando trajetória em arco");
// baseado em https://github.com/gnea/grbl/blob/master/grbl/motion_control.c
Expand All @@ -207,7 +212,7 @@ void Controlador::arco(ponto_steps_t position, ponto_steps_t target, ponto_steps
int segments = floor(fabs(0.5*angular_travel*radius)/
sqrt(ARC_TOLERANCE*(2*radius - ARC_TOLERANCE)) );

if (segments) {
if ((radius != 0) && segments) {
float theta_per_segment = angular_travel/segments;

float cos_T = 2.0 - theta_per_segment*theta_per_segment;
Expand Down Expand Up @@ -247,7 +252,7 @@ void Controlador::arco(ponto_steps_t position, ponto_steps_t target, ponto_steps
filaTargets.push(target);
}

void Controlador::taskControlar()
void Controlador_t::taskControlar()
{
xSemaphoreGive(xSemaphoreControlador);

Expand Down Expand Up @@ -290,9 +295,8 @@ void Controlador::taskControlar()
}
}
} else { // calibrando
if (sensorCurso1.origem()) {
if (SensorCurso.origem()) {
pStepperX->setCurrentPosition(-MARGEM_X);
pStepperY->setCurrentPosition(0);
pStepperX->moveTo(0);
Evento evento = ORIGEM;
if (xQueueSendToBack(xQueueEventos, &evento, portMAX_DELAY) != pdTRUE) {
Expand All @@ -313,5 +317,5 @@ void vTaskControlador(void *param)
// Cria semáforo de controlador
xSemaphoreControlador = xSemaphoreCreateBinary();

static_cast<Controlador *>(param)->taskControlar();
static_cast<Controlador_t *>(param)->taskControlar();
}
24 changes: 12 additions & 12 deletions src/interface_wifi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include "credenciais.h"


void InterfaceWiFi::iniciarWiFi()
void InterfaceWiFi_t::iniciarWiFi()
{
Serial.println("[InterfaceWiFi] Iniciando interface WiFi");

Expand Down Expand Up @@ -64,38 +64,38 @@ void InterfaceWiFi::iniciarWiFi()
server.begin();
}

void InterfaceWiFi::imprimir()
void InterfaceWiFi_t::imprimir()
{
Evento evento = IMPRIMIR;
if(xQueueSendToBack(xQueueEventos, &evento, portMAX_DELAY) != pdTRUE) {
Serial.println("[InterfaceWiFi] Erro ao enviar evento à fila");
}
}

void InterfaceWiFi::cancelar()
void InterfaceWiFi_t::cancelar()
{
Evento evento = CANCELAR;
if(xQueueSendToBack(xQueueEventos, &evento, portMAX_DELAY) != pdTRUE) {
Serial.println("[InterfaceWiFi] Erro ao enviar evento à fila");
}}

void InterfaceWiFi::calibrar()
void InterfaceWiFi_t::calibrar()
{
Evento evento = CALIBRAR;
if(xQueueSendToBack(xQueueEventos, &evento, portMAX_DELAY) != pdTRUE) {
Serial.println("[InterfaceWiFi] Erro ao enviar evento à fila");
}}

void InterfaceWiFi::carregarPrograma(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final)
void InterfaceWiFi_t::carregarPrograma(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final)
{
if (!interfaceWifi.carregando) {
if (!InterfaceWiFi.carregando) {
Evento evento = CARREGAR;
if(xQueueSendToBack(xQueueEventos, &evento, portMAX_DELAY) != pdTRUE) {
Serial.println("[InterfaceWiFi] Erro ao enviar evento à fila");
}
}

while(!interfaceWifi.carregando) vTaskDelay(pdMS_TO_TICKS(100));
while(!InterfaceWiFi.carregando) vTaskDelay(pdMS_TO_TICKS(100));

// https://github.com/smford/esp32-asyncwebserver-fileupload-example/blob/master/example-01/example-01.ino
String logmessage = "[InterfaceWiFi] Client: " + request->client()->remoteIP().toString() + " " + request->url();
Expand All @@ -121,14 +121,14 @@ void InterfaceWiFi::carregarPrograma(AsyncWebServerRequest *request, String file
request->_tempFile.close();
Serial.println(logmessage);
request->redirect("/");
interfaceWifi.carregando = false;
InterfaceWiFi.carregando = false;
}
}

String InterfaceWiFi::processor(const String& var){
String InterfaceWiFi_t::processor(const String& var){
// Serial.println("[InterfaceWiFi] " + var);
if(var == "ESTADO"){
switch(maquinaEstados.getEstado()) {
switch(MaquinaEstados.getEstado()) {
case IDLE:
return "Idle";
case IMPRIMINDO:
Expand All @@ -140,10 +140,10 @@ String InterfaceWiFi::processor(const String& var){
return String();
}

void InterfaceWiFi::handleEstado(AsyncWebServerRequest *request)
void InterfaceWiFi_t::handleEstado(AsyncWebServerRequest *request)
{
String sEstado;
switch(maquinaEstados.getEstado()) {
switch(MaquinaEstados.getEstado()) {
case IDLE:
sEstado = "Idle";
break;
Expand Down
Loading

0 comments on commit 2cc4751

Please sign in to comment.