Projeto Mecatrônico / Mbed 2 deprecated Acionamento_Pipeta

Dependencies:   mbed

main.cpp

Committer:
juan_ruiz
Date:
2021-06-01
Revision:
1:b77c22122be8
Parent:
0:acba0720dcfd
Child:
2:3cfe40337158

File content as of revision 1:b77c22122be8:

#include "mbed.h"

// Pinos para emitir pulsos para cada motor
DigitalOut sinal(PC_10);

float tempo = 1.5;

int total_pega = 40; // 40 mL na posição de pega
int atual_pega = total_pega; // "total_pega" é a quantidade inserida pelo usuário na posição de pega
int quant_desejada; // "quant desejada" é a quantidade inserida pelo usuário na posição de solta
int quant_depositada = 0;
int n_pulsosX;
int n_pulsosY;
int n_pulsosZ;
int deslocamentoZ_partida = posZ0_origem - posZ0_atual; // deslocamento do eixo Z até a posição de partida (origem)
int deslocamentoX0 = posX0_desejada - posX_atual; // deslocamento do eixo X até a posição de pega desejada
int deslocamentoY0 = posY0_desejada - posY_atual; // deslocamento do eixo Y até a posição de pega desejada
int deslocamentoZ0 = posZ0_desejada - posZ_atual; // deslocamento do eixo Z até a posição de pega desejada
int deslocamentoX = posX_desejada - posX_atual; // deslocamento do eixo X até a posição de solta desejada
int deslocamentoY = posY_desejada - posY_atual; // deslocamento do eixo Y até a posição de solta desejada
int deslocamentoZ = posZ_desejada - posZ_atual; // deslocamento do eixo Z até a posição de solta desejada


void Rotina_Pega(void);
void Rotina_Solta(void);

int main()
{
    while (npos_pega < pos_pega_total) // checa se existem mais posições de solta
    {
        if (valor_SELECT == 1) // o usuário não quer alterar nenhum parâmetro
        {
            contador_SELECT = 1;
        
            //Chama a rotina de pega
            Rotina_Pega();
                    
            //Chama a rotina de solta
            Rotina_Solta();
            
            atual_pega = atual_pega - 1; // após a rotina de solta, a quantidade atual do substrato é reduzida por 1mL
            quant_depositada = quant_depositada + 1; //  +1mL na quantidade depositada
            
            if (atual_pega == 0) // não existe mais substrato na posição de pega
            {
                lcd.locate(2,0);
                lcd.printf("Coleta vazia");
            }
            else
            {
                while (quant_depositada < quant_desejada) // "quant_desejada" definido pelo usuário na IHM
                {
                    Rotina_Pega();
                    atual_pega = atual_pega - 1;
                
                    if (mL_atual == 0)
                    {
                        lcd.locate(2,0);
                        lcd.printf("Coleta vazia");
                    }
                
                    else
                    {
                        Rotina_Solta();
                        quant_depositada = quant_depositada + 1;
                    }   
                
                }
            }
        }
}

void Rotina_Pega()
{
    sinal = 0; // saída nível lógico "baixo"
    
    n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamentoZ_partida; // desloca a pipeta no eixo Z para sua posição de partida para evitar colisão
    
    n_pulsosX = (1/(passo_motor*passo_fuso))*360*deslocamento_X0; //movimentação do eixo X para posição de pega
    n_pulsosY = (1/(passo_motor*passo_fuso))*360*deslocamento_Y0; //movimentação do eixo Y para posição de pega
    n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamento_Z0; //movimentação do eixo Y para posição de pega
    
    sinal = 1; // saída nível lógico "alto"
    lcd.locate(2,0);
    lcd.printf("Coletando");
    wait(tempo);
            
}

void Rotina_Solta()
{
   sinal = 0; // saída nível lógico "baixo"
    
    n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamentoZ_partida; // desloca a pipeta no eixo Z para sua posição de partida para evitar colisão
    
    n_pulsosX = (1/(passo_motor*passo_fuso))*360*deslocamento_X; //movimentação do eixo X para posição de pega
    n_pulsosY = (1/(passo_motor*passo_fuso))*360*deslocamento_Y; //movimentação do eixo Y para posição de pega
    n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamento_Z; //movimentação do eixo Y para posição de pega
    
    sinal = 1; // saída nível lógico "alto"
    lcd.locate(2,0);
    lcd.printf("Depositando");
    wait(tempo); 
}