codigo fonte

Dependencies:   mbed TextLCD

Revision:
0:99c31d1bf4d3
Child:
1:7ed1c2479638
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jun 04 18:40:23 2021 +0000
@@ -0,0 +1,654 @@
+#include "mbed.h"
+#include "TextLCD.h"
+
+TextLCD lcd(D8, D9, D4, D5, D6, D7); //Comunicação com LCD
+BusOut motor_x(PC_8, PC_6, PC_5, PA_12); //Pinos para acionamento do motor do eixo X
+BusOut motor_y(PA_11, PB_12, PB_11, PB_2); //Pinos para acionamento do motor do eixo Y
+BusOut motor_z(PB_1, PB_15, PB_14, PB_13); //Pinos para acionamento do motor do eixo Z
+DigitalOut sinal(PC_10); // Pino para o acionamento da pipeta
+//DigitalIn botao_seleciona(PC_3); //botao de SELECT geral
+
+Serial pc (D1, D0); //Comunicação com USB
+AnalogIn joystick(PC_2); //Joystick potenciometro
+//AnalogIn botao_SELECT(A0); //Botão SELECT da IHM
+//Teste
+InterruptIn botao_seleciona(PA_3); //Botão de salva posição Joystick
+
+InterruptIn botao_emergencia_in(PC_4); //Botão de emergência para detectar acionamento
+InterruptIn botao_fim_curso_rise(PC_12); //Chave de fim de curso
+
+
+Timer debounce1; //Correção para botão de posição de salva
+Timer debounce2; //Correção para botão de emergência
+Timer debounce3; //Correção para chave de fim de curso
+
+int pulsos = 0; //Contagem dos pulsos para o motor
+
+int i; //Variável para contar o incremento no motor
+int cont_fim_curso = 0; //Variável para contar o incremento do fim de curso
+int J_XYZ; //Variável para ler o potenciometro do Joystick
+int passo_fuso = 5; //Declara o passo do fuso
+int pegaZ; //Variável que receberá o valor da posição de salva
+int SELECT; //Variável para leitura do botão SELECT da IHM
+int contador_SELECT = 0; //Define o contator do SELECT da IHM
+int contador_emergencia = 0; //Define o contator do botão de emergência
+
+int contador_rise = 0;
+int seguranca_fdc = 0;
+
+// ------------------Acionamento da Pipeta------------------
+// Valores de Teste
+int total_pega = 6; // quantidade de mL na posição de pega disponível
+int quant_desejada = 3; // quantidade de mL na posição de solta 1
+//int npos_solta = [1,2,3,4];
+//int pos_solta_total = 4;
+//float posZ_atual = 100;
+//float posX_atual = 10;
+//float posY_atual = 20;
+float posX0_desejada = 0;
+float posY0_desejada = 5;
+float posZ0_desejada = 10;
+float posX_desejada = 10;
+float posY_desejada = 20;
+float posZ_desejada = 90;
+
+float velocidade = 0.003; //Armazena a velocidade dos motores
+
+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 posZ_origem = 0;
+int deslocamentoZ_partida = posZ_origem - deslocamento_Z; // deslocamento do eixo Z até a posição de partida (origem)
+int deslocamento_X0 = posX0_desejada - posX_atual; // deslocamento do eixo X até a posição de pega desejada
+int deslocamento_Y0 = posY0_desejada - posY_atual; // deslocamento do eixo Y até a posição de pega desejada
+int deslocamento_Z0 = posZ0_desejada - posZ_atual; // deslocamento do eixo Z até a posição de pega desejada
+int deslocamento_solta_X = posX_desejada - posX_atual; // deslocamento do eixo X até a posição de solta desejada
+int deslocamento_solta_Y = posY_desejada - posY_atual; // deslocamento do eixo Y até a posição de solta desejada
+int deslocamento_solta_Z = posZ_desejada - posZ_atual; // deslocamento do eixo Z até a posição de solta desejada
+
+// ------------------Acionamento da Pipeta------------------
+
+float tempo_horario, tempo_anti_horario; //Define os tempos de acionamento do motor
+float passo_motor = 5.625/32; //Declara o passo angular do motor
+float tempo = 1.5; // Define o tempo que a pipeta fica acionada
+
+float deslocamento_X = 0; //Define o deslocamento linear total
+float deslocamento_Y = 0; //Define o deslocamento linear total
+float deslocamento_Z = 0; //Define o deslocamento linear total
+
+float deslocamento_max_X = 0; //Define o deslocamento linear total
+float deslocamento_max_Y = 0; //Define o deslocamento linear total
+float deslocamento_max_Z = 0; //Define o deslocamento linear total
+
+int pulsos_Z = 0; //Contagem dos pulsos para o motor_Z
+int pulsos_X = 0; //Contagem dos pulsos para o motor_X
+int pulsos_Y = 0; //Contagem dos pulsos para o motor_Y
+
+int contador_botao_seleciona = 0; //Boleana para a lógica do botão SELECT do joystick
+
+bool valor_SELECT = false; //Boleana para lógica do botão SELECT da IHM
+bool estado_referenciamento = false; //Boleana para identificar a necessidade do referênciamento
+bool estado_botao_emergencia_in = false; //Boleana para identificar a necessidade do referênciamentosatisfazer a lógica da rotina_emergencia_in
+bool motor_referenciamento = false; //Boleana para permitir o movimento automático do motot no referenciamento
+
+// Rotinas do programa
+void rotina_posicao_salva (void);
+void rotina_emergencia_in (void);
+void rotina_velocidade_eixo_Z (void);
+void rotina_deslocamento_eixo_Z (void);
+void rotina_deslocamento_eixo_menos_Z (void);
+void rotina_JOG (void);
+void rotina_botoes_IHM (void);
+void Rotina_Pega (void);
+void Rotina_Solta (void);
+void teste2dora (void);
+void reposiciona_pipeta_origem (void);
+
+void rotina_fdc_rise (void);
+void referenciamento (void);
+
+void rotina_estado_botao_seleciona (void);
+
+int main()
+{
+    pc.baud(115200); //Define a velocidade da porta USB
+    motor_x = 0x00; //Estabelece a condição inicial do motor do eixo X
+    motor_y = 0x00; //Estabelece a condição inicial do motor do eixo Y
+    motor_z = 0x00; //Estabelece a condição inicial do motor do eixo Z
+
+    //Declara os pinos de interrupção com suas funções
+    botao_seleciona.rise(&rotina_estado_botao_seleciona);
+
+    botao_emergencia_in.rise(&rotina_emergencia_in);
+    botao_fim_curso_rise.rise(&rotina_fdc_rise);
+
+
+    //Inicializa os timers
+    debounce1.start();
+    debounce2.start();
+    debounce3.start();
+
+    //Inicia o LCD
+    wait_ms(500);
+    lcd.locate(2,0);
+    lcd.printf("SELECT para");
+    lcd.locate(0,1);
+    lcd.printf("referenciamento");
+
+    while(1) {
+        //Leitura de variáveis
+        J_XYZ = joystick.read_u16();
+        //SELECT = botao_SELECT.read_u16();
+        //pc.printf("estado_referenciamento=%4d, estado_botao_emergencia_in=%d valor_SELECT=%d\r\n", estado_referenciamento, estado_botao_emergencia_in, valor_SELECT);
+        //pc.printf("deslocamento_Z=%4f, pulsos=%d\r\n", deslocamento_Z, pulsos);
+        //pc.printf("J_XYZ= %d\r\n", J_XYZ);
+        if(estado_referenciamento == true & estado_botao_emergencia_in == false & contador_botao_seleciona == 2) {
+            //Condição para poder disponibilizar a função JOG
+            //Chama a rotina do JOG
+            rotina_JOG();
+            //LCD
+
+            lcd.locate(2,0);
+            lcd.printf("PosicaoZ:");
+            lcd.locate(0,1);
+            lcd.printf("%4fmm",deslocamento_Z);
+            //pc.printf("J_XYZ= %d\r\n", J_XYZ);
+        }
+
+        else {
+            //Chama a rotina dos botões da IHM
+            //rotina_botoes_IHM();
+
+            if(valor_SELECT == false) { //se estiver 0, mudar para 1 -- no PC da dora fica 0 pela LCD dela
+
+                lcd.cls();
+                lcd.locate(2,0);
+                lcd.printf("Iniciando o");
+                lcd.locate(0,1);
+                lcd.printf("referenciamento");
+
+                pc.printf("Referenciamento \r\n");
+
+                contador_SELECT = 1;
+                estado_referenciamento = false;
+                //Permite o movimento automático do motor até atingir o fim de curso
+                referenciamento();
+
+                pc.printf("Referenciamento feito\r\n");
+                lcd.cls();
+                lcd.locate(0,0);
+                lcd.printf("Pressione SELECT");
+                lcd.locate(0,1);
+                lcd.printf("para continuar");
+
+            }
+        }
+
+//========================================================================================
+
+        //while (npos_solta < pos_solta_total) {
+        //checa se existem mais posições de solta
+
+//        if(contador_botao_seleciona == 2) {
+//            //pressiona para entrar nesse if
+//            // o usuario nao quer alterar nenhum parametro
+//            pc.printf("pressionado\r\n");
+//
+//            quant_depositada = 0;
+//
+//            while (quant_depositada < quant_desejada) {
+//                // "quant_desejada" definido pelo usuário na IHM
+//
+//                if (atual_pega == 0) {
+//                    lcd.cls();
+//                    lcd.locate(0,0);
+//                    lcd.printf("Coleta vazia");
+//                    lcd.locate(0,1);
+//                    lcd.printf("Pressione RST");
+//                    wait(4);
+//                    pc.printf("Coleta vazia \r\n");
+//                    exit(0); // obriga o usuário a recomeçar
+//                }
+//                //rotina_referenciamento();
+//                //break;
+//                else {
+//                    Rotina_Pega();
+//                    Rotina_Solta();
+//                }
+//
+//                atual_pega = atual_pega - 1;
+//                quant_depositada = quant_depositada + 1;
+//
+//                pc.printf("atual_pega: %d \r\n",atual_pega);
+//                pc.printf("quant_depositada: %d \r\n",quant_depositada);
+//            }
+//        }
+        //}
+//        pc.printf("fora do if\r\n");
+        //rotina_referenciamento();
+    } //while(1)
+} //int main()
+
+
+
+
+void rotina_estado_botao_seleciona()
+{
+    if(debounce1.read_ms() >= 10 & estado_referenciamento == true & estado_botao_emergencia_in == false) {
+        contador_botao_seleciona += 1;
+        pc.printf("contador_botao_seleciona= %d\r\n", contador_botao_seleciona);
+        lcd.cls();
+    }
+    debounce1.reset();
+}
+
+void rotina_emergencia_in()
+{
+    if(debounce2.read_ms() >= 10) {
+
+        motor_x = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo X
+        motor_y = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo Y
+        motor_z = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo Z
+
+        estado_referenciamento = false; //Solicita um novo referenciamento
+        estado_botao_emergencia_in =! estado_botao_emergencia_in;
+        contador_emergencia += 1;
+
+        lcd.cls();
+        wait_ms(500);
+        lcd.locate(0,0);
+        lcd.printf("Emergencia ON");
+        lcd.locate(0,1);
+        lcd.printf("Pressione RST");
+
+        exit(0); //Encerra o programa e obriga o usuário a resetar o sistema
+
+        debounce2.reset();
+    }
+}
+
+void rotina_velocidade_eixo_Z()
+{
+    //Converte a leitura do Joystick para tempo de acionamento do motor
+    J_XYZ = joystick.read_u16();
+    tempo_horario = -1*J_XYZ*0.0000028 + 0.1875;
+    tempo_anti_horario = J_XYZ*0.000002785 + 0.0025;
+}
+
+void rotina_velocidade_referenciamento_eixo_Z()
+{
+    //Converte a leitura do Joystick para tempo de acionamento do motor
+    J_XYZ = joystick.read_u16();
+    tempo_horario = (-1*J_XYZ*0.0000028 + 0.1875)*2;
+    tempo_anti_horario = (J_XYZ*0.000002785 + 0.0025)*2;
+}
+
+void rotina_deslocamento_eixo()
+{
+    //Calcula os deslocamentos no eixo Z
+
+    deslocamento_X = (passo_fuso*pulsos_X*passo_motor)/360;
+    deslocamento_Y = (passo_fuso*pulsos_Y*passo_motor)/360;
+    deslocamento_Z = (passo_fuso*pulsos_Z*passo_motor)/360;
+
+//    recebe_arduino.printf("X%3.2f\n", deslocamento_X);
+//    recebe_arduino.printf("Y%3.2f\n", deslocamento_Y);
+//    recebe_arduino.printf("Z%3.2f\n", deslocamento_Z);
+
+    pc.printf("X%3.2f, Y%3.2f, Z%3.2f, J_XYZ=%d\n", deslocamento_X, deslocamento_Y, deslocamento_Z, J_XYZ);
+
+}
+
+//void rotina_botoes_IHM()
+//{
+//    if(SELECT > 60000 & SELECT < 65000) valor_SELECT =! valor_SELECT;
+//    else valor_SELECT = 0;
+//}
+
+void referenciamento()
+{
+
+    while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_SELECT == 1) {//W1
+
+        for(i = 0; i < 4; i++) {
+            motor_x = 1 << i;
+            motor_y = 1 << i;
+            motor_z = 1 << i;
+            wait(0.003);
+        }
+
+        if(contador_rise == 1) {//if1
+
+            while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 1) {//W2
+
+                for(i = 3; i > -1; i--) {
+                    motor_x = 1 << i;
+                    motor_y = 1 << i;
+                    motor_z = 1 << i;
+                    wait(0.003);
+
+                }
+
+                if(contador_rise == 2) {//if2
+
+                    while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 2) {//W3
+
+                        for(i = 0; i < 4; i++) {
+                            motor_x = 1 << i;
+                            motor_y = 1 << i;
+                            motor_z = 1 << i;
+                            wait(0.003);
+                        }
+
+                        if(contador_rise == 3) {//if3
+
+                            while(seguranca_fdc != 8 & estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 3) {//W4
+                                for(i = 3; i > -1; i--) {
+                                    motor_x = 1 << i;
+                                    motor_y = 1 << i;
+                                    motor_z = 1 << i;
+                                    wait(0.003);
+
+                                }
+                                seguranca_fdc += 1;
+
+                            }//Fecha W4
+
+                            estado_referenciamento = true;
+                            contador_SELECT = 0;
+                            contador_rise = 0;
+                            seguranca_fdc = 0;
+
+                            valor_SELECT = true;
+                            contador_botao_seleciona = 0;
+                            deslocamento_X = 0; //Define o deslocamento linear total
+                            deslocamento_Y = 0; //Define o deslocamento linear total
+                            deslocamento_Z = 0; //Define o deslocamento linear total
+                            pulsos_X = 0;
+                            pulsos_Y = 0;
+                            pulsos_Z = 0;
+                            deslocamento_max_X = 5; //Define o deslocamento linear total
+                            deslocamento_max_Y = 5; //Define o deslocamento linear total
+                            deslocamento_max_Z = 5; //Define o deslocamento linear total
+//                            velocidade = 0.1;
+
+//                            recebe_arduino.printf("D\n"); //Done referenciamento
+
+                        }//Fecha if3
+                    }//Fecha W3
+
+                }//Fecha if2
+            }//Fecha W2
+        }//Fecha if1
+    }//Fecha W1
+    motor_x = 0x00;
+    motor_y = 0x00;
+    motor_z = 0x00;
+}//Fecha funcao
+
+
+void rotina_fdc_rise()
+{
+    if(debounce3.read_ms() >= 50 & estado_botao_emergencia_in == false & estado_referenciamento == false & contador_SELECT == 1) {
+        contador_rise += 1;
+        pc.printf("contador_rise=%d\n", contador_rise);
+        debounce3.reset();
+    }
+}
+
+
+void rotina_JOG()
+{
+    J_XYZ = joystick.read_u16();
+
+    if(32400 <= J_XYZ &  J_XYZ <= 34100) {
+        motor_x = 0x00;
+        motor_y = 0x00;
+        motor_z = 0x00;
+    }
+
+    else {
+//============== Movimenta Eixo Y ======================================
+
+        if (J_XYZ > 34100 & deslocamento_Y > 0 & pulsos_Y > 0) {
+//            tempo_motor.start();
+//            while(deslocamento_Y > 0) {
+                J_XYZ = joystick.read_u16();
+                for(i = 0; i < 4; i++) {
+                    motor_y = 1 << i;
+//                    rotina_velocidade_eixo();
+                    rotina_deslocamento_eixo();
+                    pulsos_Y-=1;
+                    wait(velocidade);
+
+                }
+//            }
+//            tempo_motor.reset();
+//            tempo_motor.stop();
+        }
+
+        if(J_XYZ < 32400 & deslocamento_max_Y > deslocamento_Y  & pulsos_Y < 2048) {
+//            tempo_motor.start();
+//            while(deslocamento_max_Y > deslocamento_Y) {
+                J_XYZ = joystick.read_u16();
+                for(i = 3; i > -1; i--) {
+                    motor_y = 1 << i;
+//                    rotina_velocidade_eixo();
+                    rotina_deslocamento_eixo();
+                    pulsos_Y+=1;
+                    wait(velocidade);
+
+                }
+//            }
+//            tempo_motor.reset();
+//            tempo_motor.stop();
+        }
+
+//============== Movimenta Eixo X ======================================
+
+        if (J_XYZ > 34100 & deslocamento_X > 0  & pulsos_X > 0) {
+//            tempo_motor.start();
+//            while(deslocamento_X > 0) {
+                for(i = 0; i < 4; i++) {
+                    motor_x = 1 << i;
+//                    rotina_velocidade_eixo();
+                    rotina_deslocamento_eixo();
+                    pulsos_X-=1;
+                    wait(velocidade);
+
+                }
+//            }
+//            tempo_motor.reset();
+//            tempo_motor.stop();
+        }
+
+        if(J_XYZ < 32400 & deslocamento_max_X > deslocamento_X & pulsos_X < 2048) {
+//            tempo_motor.start();
+//            while(deslocamento_max_X > deslocamento_X) {
+                for(i = 3; i > -1; i--) {
+                    motor_x = 1 << i;
+//                    rotina_velocidade_eixo();
+                    rotina_deslocamento_eixo();
+                    pulsos_X+=1;
+                    wait(velocidade);
+
+                }
+//            }
+//            tempo_motor.reset();
+//            tempo_motor.stop();
+        }
+
+
+//============== Movimenta Eixo Z ======================================
+
+        if (J_XYZ > 34100 & deslocamento_Z > 0  & pulsos_Z > 0) {
+//            tempo_motor.start();
+//            while(deslocamento_Z > 0) {
+                for(i = 0; i < 4; i++) {
+                    motor_z = 1 << i;
+//                    rotina_velocidade_eixo();
+                    rotina_deslocamento_eixo();
+                    pulsos_Z-=1;
+                    wait(velocidade);
+
+                }
+//            }
+//            tempo_motor.reset();
+//            tempo_motor.stop();
+        }
+
+        if(J_XYZ < 32400 & deslocamento_max_Z > deslocamento_Z & pulsos_Z < 2048) {
+//            tempo_motor.start();
+//            while(deslocamento_max_Z > deslocamento_Z) {
+                for(i = 3; i > -1; i--) {
+                    motor_z = 1 << i;
+//                    rotina_velocidade_eixo();
+                    rotina_deslocamento_eixo();
+                    pulsos_Z+=1;
+                    wait(velocidade);
+
+                }
+//            }
+//            tempo_motor.reset();
+//            tempo_motor.stop();
+        }
+
+
+    }
+}
+
+
+void Rotina_Pega()
+{
+    // ------------ LEIA ----------
+    //Ele ta pulando o while do Z e X e indo direto pro Z -- ele não tá nem entrando nesse while
+    sinal = 0; // saída nível lógico "baixo"
+    
+    posZ_atual = deslocamento_Z // posZ_atual = a posição de deslocamento neste momento
+    if(posZ_atual > posZ_origem) {
+        while (deslocamento_Z > posZ_origem) {
+            //While para verificar que o motor funcione até a a posição desejada ser alcançada
+            for(i = 3; i > -1; i--) {
+                motor_z = 1 << i;
+                pulsos_Z -= 1;
+                wait(velocidade);
+                rotina_deslocamento_eixo();
+                pc.printf("Pos atualZ AH: %d\r\n", deslocamento_Z);
+            }
+        }
+    }
+    else { //não faz nada
+    
+//        while (deslocamento_Z < posZ0_desejada) {
+//            //While para verificar que o motor funcione até a a posição desejada ser alcançada
+//            for(i = 0; i < 4; i++) {
+//                motor_z = 1 << i;
+//                pulsos_Z -= 1
+//                wait(velocidade);
+//                rotina_deslocamento_eixo();
+//                pc.printf("Pos atualZ H: %d\r\n", deslocamento_Z);
+            }
+        }
+    }
+    posX_atual = deslocamento_X
+    if(posX_atual < posX0_desejada) {
+        while (deslocamento_X > posX0_desejada) {
+            //While para verificar que o motor funcione até a a posição desejada ser alcançada
+            for(i = 3; i > -1; i--) {
+                motor_x = 1 << i;
+                pulsos_X += 1;
+                wait(velocidade);
+                rotina_deslocamento_eixo();
+                pc.printf("Pos atualX AH: %d\r\n", deslocamento_X);
+            }
+        }
+    } else {
+        while (deslocamento_X < posX0_desejada) {
+            //While para verificar que o motor funcione até a a posição desejada ser alcançada
+            for(i = 0; i < 4; i++) {
+                motor_x = 1 << i;
+                pulsos_X -= 1;
+                wait(velocidade);
+                rotina_deslocamento_eixo();
+                pc.printf("Pos atualX H: %d\r\n", deslocamento_X);
+            }
+        }
+    }
+    posY_atual = deslocamento_Y
+    if(posY_atual < posY0_desejada) {
+        while (posY_atual > posY0_desejada) {
+            for(i = 3; i > -1; i--) {
+                motor_y = 1 << i;
+                pulsos_Y += 1;
+                wait(velocidade);
+                rotina_deslocamento_eixo();
+            }
+        }
+    }
+
+    else {
+        while (posY_atual < posY0_desejada) {
+            for(i = 0; i < 4; i++) {
+                motor_y = 1 << i;
+                pulsos_Y -= 1;
+                wait(velocidade);
+                rotina_deslocamento_eixo();
+            }
+        }
+    }
+
+    posZ_atual = deslocamento_Z
+    if(posZ_atual < posZ0_desejada) {
+        while (deslocamento_Z > posZ0_desejada) {
+            //While para verificar que o motor funcione até a a posição desejada ser alcançada
+            for(i = 3; i > -1; i--) {
+                motor_z = 1 << i;
+                pulsos_Z += 1;
+                wait(velocidade);
+                rotina_deslocamento_eixo();
+                pc.printf("Pos atualZ AH: %d\r\n", deslocamento_X);
+            }
+        }
+    } else {
+        while (deslocamento_Z < posZ0_desejada) {
+            //While para verificar que o motor funcione até a a posição desejada ser alcançada
+            for(i = 0; i < 4; i++) {
+                motor_z = 1 << i;
+                pulsos_Z -= 1;
+                wait(velocidade);
+                rotina_deslocamento_eixo();
+                pc.printf("Pos atualX H: %d\r\n", deslocamento_X);
+            }
+        }
+    }
+
+
+    sinal = 1; // saída nível lógico "alto"
+    lcd.cls();
+    lcd.locate(0,0);
+    lcd.printf("Coletando");
+    pc.printf("Coletando\r\n");
+    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_solta_X; //movimentação do eixo X para posição de pega
+    n_pulsosY = (1/(passo_motor*passo_fuso))*360*deslocamento_solta_Y; //movimentação do eixo Y para posição de pega
+    n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamento_solta_Z; //movimentação do eixo Z para posição de pega
+
+    sinal = 1; // saída nível lógico "alto"
+    lcd.cls();
+    lcd.locate(0,0);
+    lcd.printf("Depositando");
+    pc.printf("Depositando\r\n");
+    wait(tempo);
+}