Projeto Mecatronico Grupo: Pingos nos I's 2019

Dependencies:   mbed Projeto_Mecatronico Projeto_Mecat_Pingos

main.cpp

Committer:
ligeiro13
Date:
2019-06-13
Revision:
0:61ea5c9ad2de

File content as of revision 0:61ea5c9ad2de:

#include "mbed.h"
#include "TextLCD.h" 
//#include "LinkedList.h"
#define espera 100
#define vel_1 1000
#define vel_2 1000
//bibliteca segmento: TextLCD
/*
O QUE FAZER
1-aarrumar o print do COLA? qnd ponto modificado
2-arrrumar a listadecola quando ponto modificado
*/


//---------------------------------------------------------------------------------ENTRADAS E SAIDAS ANALOGICAS--------------------------------------------------------------------------------------------/
//DigitalIn botaoC(PC_1);//            //pino entrada botaoC
//DigitalIn botaoA(PC_2); //           //pino entrada botaoA colar pontos
int botaoA=1;
int botaoC=1;
DigitalIn botao_analog(PC_12);
//int botao_analog = 1;
AnalogIn eixo_x(A0);
AnalogIn eixo_y(A2);

DigitalOut enable_x(PA_10);//motor x
DigitalOut dir_x(PB_5);//motor x
DigitalOut step_x(PB_3);//motor x
DigitalIn FimCursoX(PA_6);         //entrada fdc eixo x novo

DigitalOut enable_y(PB_4);//motor y
DigitalOut dir_y(PA_8);//motor y
DigitalOut step_y(PB_10);//motor y
DigitalIn FimCursoY(PC_8);         //entrada fdc eixo y novo

DigitalOut enable_z(PA_9);//motor z
DigitalOut dir_z(PB_6);//motor z
DigitalOut step_z(PC_7);//motor z

DigitalIn FimCursoZ(PB_7);          //entrada fdc eixo z novo

DigitalIn botao_emergencia(PA_13);       //entrada B.E. nova
DigitalOut aciona_pneu(PC_3);//aciona pneumatica da cola PRESSAO
DigitalOut aciona_pneu2(PC_2);//aciona pneumatica da cola VALVULA
//----------------------------------IHM
TextLCD lcd(PC_13, PA_15, PA_12, PA_11, PB_12, PB_11, TextLCD::LCD20x4); // rs, e , d4-d7
DigitalIn botao_cima(PB_2); 
DigitalIn botao_enter(PB_1); 
DigitalIn botao_baixo(PB_15);

int menu = 1; // Aqui será a seleção dos menus do IHM
int menu_enter = 0;//referenciando menu se refe =1 
int menu_enter_2 = 0;//menu 2 ADICONAR PONTOS/ MODIFICAR PONTOS COLAR PONTOS    
int flag  = 1;
char strings_x[5]={0,0,0,0,0};
char ident_eixo;
int i = 1; //contador de chars
int linha = 0;//para descer o " >" 
int ponto = 0;//valor de um ponto
int pontos[10];//numero de pontos
int cola[10];//lista para saber se ira aplicar cola entre os pontos
int i_c = 0;// indice da lista cola
int i_p = 0; //loop i pontos
int ultimo_p = 0;
int lista_vel[]={1000,700,500};//lista velocidade dos motores
int i_v = 0;//indice lista velocidade
int vel = 0;//velocidade dos motores
int mover_motores = 0;//permite permitir mover os motores
int flag_mod = 0;//flag de modificar pontos para add pontos
int flag_mod2 = 0;//flag de modificar pontos para add COLA
int flag_emergencia = 0;// flag botao de emergencia
int flag_emergencia2 = 0;// flag botao de emergencia 2
int vai_emergencia = 0;// variavel para ser usado a funcao " go to" 

Serial pc(USBTX , USBRX);// band rate é de 1152000 na Serial Port do Tera Term
//------------------------------------------------------------------------------------------VARIÁVEIS-------------------------------------------------------------------------------------------------------/

float passo = 1.8f; //1.8 graus por passo
float x ; //valor do INPUT analog x
float y ;//valor do INPUT analog Y 
bool refe; //selecionar a rotina de referenciamento
bool troca_yz;//troca o eixo y/z 
int posicao_x; //Posicao do passo atual EIXO X
int posicao_y;//Posicao do passo atual EIXO Y
int posicao_z;//Posicao do passo atual EIXO Y
int i_x = -1; // contador lista x
int i_y = -1; // contador lista y
int i_z = -1; // contador lista z
int pontos_x[10]; //lista de pontos X
int pontos_y[10];//lista de pontos Y
int pontos_z[10];//lista de pontos Z
int add;
int pos;
int guardar_pontos = 0;//flag para ir ao condicional "guardar pontos" 
int colar_pontos = 0;//flag para ir ao condicional "ir aos pontos" 
//LinkedList<float>pontos;

//------------------------------------------------------------------------------------------DEFINICAO DAS FUNÇÕES--------------------------------------------------------------------------------------------------------/

float passo_mm_xy (int passo_atual)
    {
        float conversao = (passo_atual*3)/200;
        return conversao;   
    }
float passo_mm_z (int passo_atual)
    {
        float conversao = (passo_atual*10)/200;
        return conversao;   
    }


void move_inicial(bool dir, float vel, bool fimcurso, int qual_eixo) //dir 0 ou 1      vel em [passos/s]     fimcurso x/y    qual_eixo x/y/z = 0/1/2
    {
    //vel = (2*1000) / (vel);
      vel = 1000000 / (vel);
      vel = vel - espera;
      if (qual_eixo == 0)
      {
        while(FimCursoX == 0) 
            {   
                
                
                step_x = 1;
                wait_us(espera);
                step_x = 0;
                wait_us(vel);
                if (botao_emergencia == 0)
                {
                   flag_emergencia2 = 1;
                   break; 
                }
            }
     }//qual eixo == 0 = X
     if (qual_eixo == 1)
      {
        while(FimCursoY == 0) 
            {   
                step_y = 1;
                wait_us(espera);
                step_y = 0;
                wait_us(vel);
               if (botao_emergencia == 0)
                {
                   flag_emergencia2 = 1;
                   break; 
                }
            }
     }//qual eixo == 0 = Y
     if (qual_eixo == 2)
      {
        while(FimCursoZ == 0) 
            {   
                step_z = 1;
                wait_us(espera);
                step_z = 0;
                wait_us(vel);
                if (botao_emergencia == 0)
                {
                   flag_emergencia2 = 1;
                   break; 
                }
            }
     }//qual eixo == 0 = Z
    }
    
    
int move(bool dir, float vel,int posicao_xy, int qual_eixo) //dir 0 ou 1      vel em [passos/s]      posicao, devolve os passos andados         qual_eixo 0/1/2 x/y/z
    {
    int passos = 0;
    int ultimo_passo =0;
    int parada;
    //vel = (2*1000) / (vel);
    vel = 1000000 / (vel);
    vel = vel - espera;
    if (enable_x == 0 and qual_eixo == 0 ) //PARA EIXO X
        {
        ultimo_passo = posicao_xy;
        //while ((eixo_x.read() > 0.7 or eixo_x.read() < 0.3f) and posicao_x > -1 ) 
        while ((eixo_x > 0.7 or eixo_x < 0.3f) and posicao_x > -1 ) 
            {   step_x = 1;
                wait_us(espera);
                step_x = 0;
                wait_us(vel);
                passos++;
                if (dir_x == 0)
                    {
                     parada = ultimo_passo + passos;
                    // pc.printf("dir_x1 \r\n");
                    }
                if (dir_x == 1) 
                    {
                    parada = ultimo_passo - passos;
                   // pc.printf("dir_x0 \r\n");
                    }
                if (parada == 0 or parada == 25000)
                    {
                    break;
                    }
                       
            }
        }
    if (enable_y == 0 and qual_eixo == 1 ) //PARA EIXO Y
        {
        ultimo_passo = posicao_xy;
        //while ((eixo_y.read() > 0.7 or eixo_y.read() < 0.3f) and posicao_y > -1 ) 
        while ((eixo_y > 0.7 or eixo_y < 0.3f) and posicao_y > -1 ) 
            {   
                step_y = 1;
                wait_us(espera);
                step_y = 0;
                wait_us(vel);
                passos++;
                //pc.printf("%d \r\n",passos_y); 
                if (dir_y == 0)
                    {
                    parada = ultimo_passo + passos;
                   // pc.printf("dir_y1 \r\n");
                    }
                if (dir_y == 1) 
                    {
                     parada = ultimo_passo - passos;
                   // pc.printf("dir_y0 \r\n");
                    }
                if (parada == 0 or parada == 26000)
                    {
                    break;
                    } 
                //pc.printf("ultimo passo:%d i: %d \r\n",parada,passos); 
            }
        }
      if (enable_z == 0 and qual_eixo == 2 ) //PARA EIXO Z
        {
        ultimo_passo = posicao_xy;
       // while ((eixo_y.read() > 0.7 or eixo_y.read() < 0.3f)  ) 
        while ((eixo_y > 0.7 or eixo_y < 0.3f)  ) 
            {   
                step_z = 1;
                wait_us(espera);
                step_z = 0;
                wait_us(vel);
                passos++;
                //pc.printf("%d \r\n",passos_y); 
                if (dir_z == 0)
                    {
                    parada = ultimo_passo + passos;
                   // pc.printf("dir_y1 \r\n");
                    }
                if (dir_z == 1) 
                    {
                     parada = ultimo_passo - passos;
                   // pc.printf("dir_y0 \r\n");
                    }
                if (parada == 0 or parada == 2000)
                    {
                    break;
                    } 
                //pc.printf("ultimo passo:%d i: %d \r\n",parada,passos); 
            }
        }
       return passos;
    }
void para()//funçao para desativar o motor
    {
    enable_x = 1;
    }

void para_()//funçao para desativar o motor
    {
    enable_y = 1;
    enable_z = 1;
    }
    
int movepara(int dir, float vel, int passo_,int qual_eixo )
{   
     vel = 1000000 / (vel);
     vel = vel - espera;
     int passo_atual = 0;
    // pc.printf("Passo_local %i, %i  ", passo_atual, passo_ );
    
     if (enable_x == 0 and qual_eixo == 0 ) //PARA EIXO X
     { 
        while (passo_atual != abs(passo_))
        {   step_x = 1;
            wait_us(espera);
            step_x = 0;
            wait_us(vel);   
            passo_atual++ ;
            if (botao_emergencia == 0)
            {
               flag_emergencia2 = 1;
               break; 
            }
           // pc.printf("Passo_local %i, %i  ", passo_atual, passo_ );
        } 
    }
    if (enable_y == 0 and qual_eixo == 1 ) //PARA EIXO Y
     { 
        while (passo_atual != abs(passo_))
        {   step_y = 1;
            wait_us(espera);
            step_y = 0;
            wait_us(vel);   
            passo_atual++ ;
            if (botao_emergencia == 0)
            {
               flag_emergencia2 = 1;
               break; 
            }
           // pc.printf("Passo_local %i, %i  ", passo_atual, passo_ );
        } 
    } 
    if (enable_z == 0 and qual_eixo == 2 ) //PARA EIXO Z
     { 
        while (passo_atual != abs(passo_))
        {   step_z = 1;
            wait_us(espera);
            step_z = 0;
            wait_us(vel);   
            passo_atual++ ;
            if (botao_emergencia == 0)
            {
               flag_emergencia2 = 1;
               break; 
            }
           // pc.printf("Passo_local %i, %i  ", passo_atual, passo_ );
        } 
    } 
    return  passo_atual;
}    

//----------------------------------------------------------------------------------------------MAIN------------------------------------------------------------------------------------------------------------/
int main()
{   
    lcd.setCursor(TextLCD::CurOff_BlkOff);//desliga o cursor
    posicao_x = 0;
    posicao_y = 0; 
    posicao_z = 0;
    refe = 0  ; //0 ou 1 1= REFERENCIAMENTO 0 = MOVIMENTO DOS EIXOS
    troca_yz = 0; // 0 ou 1 0 = EIXO Y     1 = EIXO Z
    pos = 0;                   
    pc.baud(115200);
    pc.printf("hello WORLD!\r\n");
    enable_x = 1;//desliga os drivers
    enable_y = 1;//desliga os drivers
    enable_z = 1;//desliga os drivers
    aciona_pneu2 = 1 ; //desliga pneu
    aciona_pneu = 1 ; //desliga pneu
    vel = lista_vel[0];//velocidade inicial
    wait(0.25);
    while(1)
    {
        
        if (botao_emergencia == 1)
        {
            if (flag_emergencia == 1)
            {
                lcd.setCursor(TextLCD::CurOff_BlkOff);//desliga o cursor
                lcd.cls();
                menu = 0;
                menu = 1;
                menu_enter_2 = 0 ;
                flag_emergencia = 0;
            }       
            if (menu == 1 )
            {   
                lcd.cls();
                lcd.printf(" -Referenciamento\n");
                lcd.printf(" -Limpar Bico Ejetor");
                lcd.printf(" -Aplicar Cola\n");
                lcd.printf(" -Configuracoes\n");
                lcd.locate(0,linha);
                lcd.putc('~');
                    
                menu = 0;
            }// if menu = 1
            if (botao_cima == 1 and menu ==0)
            {   
                pc.printf("menu %d \r\n",menu);
                pc.printf("botao_cima \r\n");
                lcd.cls();
                lcd.printf(" -Referenciamento\n");
                lcd.printf(" -Limpar Bico Ejetor");
                lcd.printf(" -Aplicar Cola\n");
                lcd.printf(" -Configuracoes\n");
                linha--;
                pc.printf(" %d\r\n",linha);
                if (linha < 0)
                {
                    linha = 3;   
                }
                lcd.locate(0,linha);
                lcd.putc('~');
                    
                wait(0.2);
            }//IF botao_cima 
             //-------------------------------------------------------------------------------------BOTAO BAIXO MENU = 1 -----------------------------------------------------------------
            if (botao_baixo == 1 and menu ==0)
            {   
                pc.printf("menu %d\r\n",menu);
                pc.printf("botao_baixo \r\n");
                lcd.cls();
                lcd.printf(" -Referenciamento\n");
                lcd.printf(" -Limpar Bico Ejetor");
                lcd.printf(" -Aplicar Cola\n");
                lcd.printf(" -Configuracoes\n");
                if (linha > 2)
                {
                    linha = -1;   
                }
                linha++;
                pc.printf(" %d\r\n",linha);
                lcd.locate(0,linha);
                lcd.putc('~');   
                wait(0.2);
            }// if botao_baixo
            
            
            if (botao_enter == 1 and menu==0)
            {   
                pc.printf("botao_enter \r\n");
                pc.printf(" %d\r\n",linha);
                    
                if (linha ==0)
                {   
                    menu_enter =1; // REFERERENCIAMENTO
                    refe = 1;
                    wait(0.2);
                }
                if (linha == 1)
                {   
                    menu_enter = 2;//LIMPAR BI EJETOR
                }
                if (linha == 2)
                {   
                    menu_enter = 3;//Aplicar COla
                    linha =0;
                } 
                if (linha == 3)
                {   
                    menu_enter = 5;//Aplicar COla
                    linha =0;
                } 
               
                pc.printf(" %d\r\n",linha);
                wait(0.2);
            }// if bbotao_enter\
             //-------------------------------------------------------------------------------------LIMPAR BICO EJETOR -----------------------------------------------------------------
            if (menu_enter == 2)
            {       
                    lcd.cls();
                    lcd.printf("\n");
                    aciona_pneu = 0;//  liga pneumatica pressao
                    lcd.printf("     Limpando.\n");
                    aciona_pneu2 = 0;//  liga pneumatica pressao
                    wait(0.5);
                    lcd.cls();
                    lcd.printf("\n");
                    lcd.printf("     Limpando..\n");
                    aciona_pneu2 = 1;//  liga pneumatica pressao
                    wait(0.5);
                    lcd.cls();
                    lcd.printf("\n");
                    lcd.printf("     Limpando...\n");
                    aciona_pneu2 = 0;//  liga pneumatica pressao
                    wait(1);
                    lcd.cls();
                    aciona_pneu2 = 1;//  liga pneumatica pressao
                    lcd.printf("\n");
                    lcd.printf("     Bico Limpo!\n");
                    wait(2);
                    lcd.cls();
                    menu = 1;
                    menu_enter = 0;
                    
            }
            
            //-------------------------------------------------------------------------------------APLICAR COLA     MENU_ENTER = 3 -----------------------------------------------------------------
            if (menu_enter == 3)
            {       
                    linha = 0;
                    lcd.cls();
                    lcd.printf(" -Adicionar Pontos \n");
                    lcd.printf(" -Mod./Ver Pontos \n");
                    lcd.printf("\n");
                    lcd.printf(" Voltar        Colar\n");
                    lcd.locate(0,linha);
                    lcd.putc('~');
                    menu = 2;
                    menu_enter = 4;//para o refresh rate 
                    pc.printf("menu %d\r\n",menu);
            }// Aplicar Cola
            //-------------------------------------------------------------------------------------BOTAO CIMA -------------------------------------------------------------
            if (botao_cima == 1)
            {   
                if (menu == 2)
                {
                    pc.printf("menu %d\r\n",menu);
                    pc.printf("botao_cima menu 2\r\n");
                    lcd.cls();
                    lcd.printf(" -Adicionar Pontos \n");
                    lcd.printf(" -Mod./Ver Pontos \n");
                    lcd.printf("\n");
                    lcd.printf(" Voltar        Colar\n");
                    menu = 2;   
                    linha--;
                    pc.printf(" %d\r\n",linha);
                    if (linha < 0)
                    {
                        linha = 4;
                        lcd.locate(0,0);
                        lcd.putc(' ');
                        lcd.locate(14,linha);
                        lcd.putc('~');  
                    }
                    if(linha == 2)
                    {
                        linha = 1;
                    } 
                    lcd.locate(0,linha);
                    lcd.putc('~');
                    if (linha == 4)
                    {  
                        lcd.locate(0,3);
                        lcd.putc(' ');
                        lcd.locate(14,linha);
                        lcd.putc('~');    
                    }
                    wait(0.2);
                        
                }
                if (menu == 3 or menu == 4)//-----------------------------------------------------------------add pontos-BB-------------------------------------------------------------
                {   
                    
                    menu_enter_2 = 0;//para o refresh rate       
                    linha--;
                    if (linha == 1) 
                    {
                        linha = 3;   
                    }
                    if (linha == 2)
                    {
                        lcd.locate(0,linha + 1);
                        lcd.putc(' ');
                        lcd.locate(0,linha);
                        lcd.putc('~'); 
                    }
                    if (linha == 3)
                    {   
                        lcd.locate(0,linha - 1);
                        lcd.putc(' ');
                        lcd.locate(0,linha);
                        lcd.putc('~');
                    } 
                    
                    wait(0.2);
                }
                if (menu == 5)//-----------------------------------------------------------------Modificando Pontos---BC-----------------------------------------------------------
                {
                    if (i_p == 0)
                    {   
                        
                            
                        pc.printf(" %d\r\n",linha);
                        linha--;  
                        if (linha == 1)
                        {   
                            lcd.locate(10,linha+1);
                            lcd.putc(' ');
                            lcd.locate(0,3);
                            lcd.putc('~');    
                            linha = 4;
                        }
                        if (linha == 2)
                        {   
                            lcd.locate(10,linha + 1);
                            lcd.putc(' ');
                            lcd.locate(10,linha);
                            lcd.putc('~');    
                        }          
                        if (linha == 3)
                        {   
                            lcd.locate(0,linha);
                            lcd.putc(' ');
                            lcd.locate(10,linha);
                            lcd.putc('~');    
                        }
                        
                        wait(0.2);
                    }
                    if (i_p != 0 and i_p != ultimo_p -1)
                    {   
                        
                            
                        
                        
                       
                        linha--;  
                         printf("linha %d\r\n",linha);
                        if (linha == 1)//
                        {   
                            lcd.locate(10,linha+1);
                            lcd.putc(' ');
                            lcd.locate(0,2);
                            lcd.putc('~');    
                            linha = 5;
                        }
                        if (linha == 2)
                        {   
                            lcd.locate(10,linha + 1);
                            lcd.putc(' ');
                            lcd.locate(10,linha);
                            lcd.putc('~');    
                        }          
                        if (linha == 3)
                        {   
                            lcd.locate(0,linha);
                            lcd.putc(' ');
                            lcd.locate(10,linha);
                            lcd.putc('~');    
                        }
                        if (linha == 4)
                        {   
                            lcd.locate(0,2);
                            lcd.putc(' ');
                            lcd.locate(0,3);
                            lcd.putc('~');    
                        }
                        
                        wait(0.2);
                    }
                    if (i_p != 0 and i_p == ultimo_p -1)
                    {   
                       
                        linha--;  
                         pc.printf("linha %d\r\n",linha);
                        
                        if (linha == 2)
                        {   
                            lcd.locate(10,linha + 1);
                            lcd.putc(' ');
                            lcd.locate(0,linha);
                            lcd.putc('~'); 
                             linha = 5;   
                        }          
                        if (linha == 3)
                        {   
                            lcd.locate(0,linha);
                            lcd.putc(' ');
                            lcd.locate(10,linha);
                            lcd.putc('~');    
                        }
                        if (linha == 4)
                        {   
                            lcd.locate(0,2);
                            lcd.putc(' ');
                            lcd.locate(0,3);
                            lcd.putc('~');    
                        }
                        
                        wait(0.2);
                    }
                }
                if(menu == 6)//-----------------------------------------------------------------Configuracoes--------------------------------------------------------------
                {
                    pc.printf(" %d\r\n",linha);
                    
                    
                   
                    if (linha == 3) 
                    {
                        linha = 1;   
                    }       
                    linha--;
                    
                    if (linha == -1)
                    {   
                        lcd.locate(0,0);
                        lcd.putc(' ');
                        lcd.locate(0,3);
                        lcd.putc('~');
                        linha = 3;
                    } 
                    if (linha == 0)
                    {
                        lcd.locate(0,3);
                        lcd.putc(' ');
                        lcd.locate(0,0);
                        lcd.putc('~'); 
                        linha = 0;
                    }
                    wait(0.2);  
                }
            }//IF botao_cima 
             //-------------------------------------------------------------------------------------BOTAO BAIXO MENU = 2 ----BB-------------------------------------------------------------
            if (botao_baixo == 1)
            {   
                if (menu == 2)
                {
                    pc.printf("menu %d\r\n",menu);
                    pc.printf("botao_baixo menu 2\r\n");
                    lcd.cls();
                    lcd.printf(" -Adicionar Pontos \n");
                    lcd.printf(" -Mod./Ver Pontos \n");
                    lcd.printf("\n");
                    lcd.printf(" Voltar        Colar\n");
                    menu = 2;       
                      
                    if (linha > 3)
                    {
                        linha = -1;   
                    }
                        
                    pc.printf(" %d\r\n",linha);
                    linha++;
                    if(linha == 2)
                    {
                        linha = 3;
                    }            
                    lcd.locate(0,linha);
                    lcd.putc('~');
                    if (linha == 4)
                    {   
                        lcd.locate(0,linha-1);
                        lcd.putc(' ');
                        lcd.locate(14,linha);
                        lcd.putc('~');    
                    }
                    wait(0.2);
                }
                if (menu == 3 or menu == 4)//-----------------------------------------------------------------add pontos-BB-------------------------------------------------------------
                {   
                    if (linha == 3) 
                    {
                        linha = 1;   
                    }
                    menu_enter_2 = 0;//para o refresh rate       
                    linha++;
                     pc.printf("Botao Baixo\r\n");
                    pc.printf("menu%d   linha=%d\r\n",menu,linha);
                    if (linha == 3)
                    {   
                        lcd.locate(0,linha - 1);
                        lcd.putc(' ');
                        lcd.locate(0,linha);
                        lcd.putc('~');
                    } 
                    if (linha == 2)
                    {
                        lcd.locate(0,linha +1);
                        lcd.putc(' ');
                        lcd.locate(0,linha);
                        lcd.putc('~'); 
                    }
                    wait(0.2);
                }
                if (menu == 5)//-----------------------------------------------------------------Modificando Pontos---BB-----------------------------------------------------------
                {
                    if (i_p == 0)
                    {   
                        if (linha > 3)
                        {   
                            lcd.locate(0,3);
                            lcd.putc(' ');
                            lcd.locate(10,2);
                            lcd.putc('~');    
                            linha = 1;   
                        }
                            
                        pc.printf(" %d\r\n",linha);
                        linha++;            
                        if (linha == 3)
                        {   
                            lcd.locate(10,linha-1);
                            lcd.putc(' ');
                            lcd.locate(10,linha);
                            lcd.putc('~');    
                        }
                        if (linha == 4)
                        {   
                            lcd.locate(10,linha-1);
                            lcd.putc(' ');
                            lcd.locate(0,linha-1);
                            lcd.putc('~');    
                        }
                        wait(0.2);
                    }
                    if (i_p != 0 and i_p != ultimo_p -1)
                    {   
                        if (linha > 4)//"proximo"
                        {   
                            lcd.locate(0,2);
                            lcd.putc(' ');
                            lcd.locate(10,2);
                            lcd.putc('~');    
                            linha = 1;   
                        }
                            
                        pc.printf(" %d\r\n",linha);
                        linha++;            
                        if (linha == 3)//"Modificar"
                        {   
                            lcd.locate(10,linha-1);
                            lcd.putc(' ');
                            lcd.locate(10,linha);
                            lcd.putc('~');    
                        }
                        if (linha == 4)//"voltarr"
                        {   
                            lcd.locate(10,3);
                            lcd.putc(' ');
                            lcd.locate(0,3);
                            lcd.putc('~');    
                        }
                        if (linha == 5)//"Anterior"
                        {   
                            lcd.locate(0,3);
                            lcd.putc(' ');
                            lcd.locate(0,2);
                            lcd.putc('~');    
                        }
                        wait(0.2);
                    }
                    if (i_p != 0 and i_p == ultimo_p -1)
                    {   
                        if (linha == 5)
                        {
                            linha = 2;   
                        } 
                        
                        linha++;            
                        if (linha == 3)//"Modificar"
                        {   
                            lcd.locate(0,linha-1);
                            lcd.putc(' ');
                            lcd.locate(10,linha);
                            lcd.putc('~');    
                        }
                        if (linha == 4)//"voltarr"
                        {   
                            lcd.locate(10,3);
                            lcd.putc(' ');
                            lcd.locate(0,3);
                            lcd.putc('~');    
                        }
                       
                       if (linha == 5)//"Anterior"
                        {   
                            lcd.locate(0,3);
                            lcd.putc(' ');
                            lcd.locate(0,2);
                            lcd.putc('~');      
                        }
                            
                        pc.printf(" %d\r\n",linha);
                        wait(0.2);
                    }
                }
                if(menu == 6)//-----------------------------------------------------------------Configuracoes--BB------------------------------------------------------------
                {
                    pc.printf(" %d\r\n",linha);
                    
                    
                   if (linha == 0) 
                    {
                        linha = 2;   
                    }
                    if (linha == 3) 
                    {
                        linha = 0;   
                    }       
                    linha++;
                    
                    if (linha == 3)
                    {   
                        lcd.locate(0,0);
                        lcd.putc(' ');
                        lcd.locate(0,linha);
                        lcd.putc('~');
                    } 
                    if (linha == 1)
                    {
                        lcd.locate(0,3);
                        lcd.putc(' ');
                        lcd.locate(0,0);
                        lcd.putc('~'); 
                        linha = 0;
                    }
                    wait(0.2);  
                }
            }// if botao_baixo
             //-------------------------------------------------------------------------------------BOTAO ENTER MENU = 2 --BE---------------------------------------------------------------
            if (botao_enter == 1 )
            {   
                pc.printf("menu%d linha %d\r\n",menu,linha);
            
                if (menu == 2)
                {
                    pc.printf(" %d\r\n",linha);
                    if (linha ==0)
                    {   
                        //pc.printf("vai para PONTOS\r\n");
                        menu_enter_2 =1; // ADICIONAR PONTOS
                        menu = 0;
                        mover_motores = 1;
                    }
                    if (linha ==1)
                    {   
                        menu_enter_2 = 4; // MODIFICAR PONTOS
                        i_p = 0;//zerar 
                    }
                    if (linha == 4)//COLAR PONTOS
                    {   
                         pc.printf("Vai para funcao COlar Pontos\r\n");
                        menu = 2;//tela de "aplicar pontas"
                        colar_pontos = 1;//menu colar pontos
                        wait(0.2);
                    }
                    if (linha == 3)
                    {   
                        menu = 1 ;//VOltar
                        linha = 1;
                    }  
                    pc.printf(" %d\r\n",linha);
                    wait(0.2);
                }
                if (menu == 3)//Adicionado os pontos
                {   
                    if (linha == 2)//confirmar ponto
                        {   
                        
                            if ( flag_mod == 0)
                            {
                                pc.printf("flag_mod = 0 \r\n");
                                i_p++;
                                guardar_pontos = 1;// vai para o condicional "guardar Pontos" 
                                wait(0.1);
                            }
                            
                            
                            ultimo_p = i_p;
                            menu_enter_2 = 1 ;//Ponto Adicionado!
                            
                            linha = 0;
                            ponto = ponto + 10;
                            wait(0.2);
                            if( i_p > 1)
                            {
                                menu_enter_2 = 2;   
                            }
                            if ( flag_mod == 1)
                            {
                                pc.printf("flag_mod = 1 \r\n");
                                pontos_x[i_p] = posicao_x;
                                pontos_y[i_p] = posicao_y;
                                pontos_z[i_p] = posicao_z;
                                pc.printf("               Pontos X[%i]=%i Pontos Y[%i]=%i Pontos Z[%i]=%i \r\n",i_p, pontos_x[i_p],i_p, pontos_y[i_p ],i_p, pontos_z[i_p]); 
                                flag_mod = 0;//tira flag de modificar pontos
                                menu_enter_2 = 2;
                                wait(0.2);
                                 
                            }
                            
                            wait(0.2);
                        }
                    if (linha == 3)
                        {   
                            menu_enter = 3 ;//VOltar
                            linha = 0;
                            wait(0.2);
                        }
                }//menu = 3
                if (menu == 4)//------------------COla-BE
                {   
                    pc.printf("    -->COLA-BE:   flag_mod2 = %d\r\n",flag_mod2);
                    if (flag_mod2 == 0)
                    {
                        if (linha == 2)
                            {   
                                 pc.printf("           COla[%d] = 1\r\n",i_c);
                                menu_enter_2 = 1;
                                cola[i_c] = 1;
                            }
                        if (linha == 3)
                            {   
                                pc.printf("           COla[%d] = 0\r\n",i_c);
                                menu_enter_2 = 1 ;//VOltar
                                
                                cola[i_c] = 0;
                            }
                    }
                    if (flag_mod2 == 1)
                    {
                        pc.printf("       menu_enter = 3\r\n"); 
                        if (linha == 2)
                            {   
                                 pc.printf("           COla[%d] = 1\r\n",i_p-1);
                                menu_enter_2 = 1;
                                cola[i_p-1] = 1;
                            }
                        if (linha == 3)
                            {   
                                pc.printf("           COla[%d] = 0\r\n",i_p-1);
                                menu_enter_2 = 1 ;//VOltar
                                
                                cola[i_p-1] = 0;
                            }
                        menu_enter = 3;//volta para a tela de "add pontos"
                        wait(0.1);
                    }
                    flag_mod2 = 0;//tira flag de modificar pontos
                    wait(0.2);
                    flag_mod = 0;
                    i_c++;
                }//menu = 4
                if (menu == 5) //MODIFICANDO OS PONTOS-BE
                {
                    
                    if (i_p != 0)
                    {
                        if ( linha == 2)
                        {
                           i_p++;
                           menu_enter_2 = 4;
                           wait(0.2);
                        } 
                        if ( linha == 3)
                        {
                           menu_enter_2 = 1;
                           flag_mod = 1;
                           flag_mod2= 1;
                           pc.printf("Mod!");
                           wait(0.2);
                        }  
                        if ( linha == 4)
                        {
                           pc.printf("voltar!");
                           menu_enter = 3 ;//VOltar
                           linha = 1;
                           wait(0.2);
                        }
                        if ( linha == 5)
                        {
                           i_p--;
                           menu_enter_2 = 4;
                           wait(0.2);
                        } 
                    } 
                    if (i_p == 0)
                    {
                        if ( linha == 2)
                        {
                           i_p++;
                           menu_enter_2 = 4;
                           wait(0.2);
                        } 
                        if ( linha == 3)
                        {
                           menu_enter_2 = 1;
                           pc.printf("Mod!");
                           wait(0.2);
                        }  
                        if ( linha == 4)
                        {
                           pc.printf("Mod!");
                           menu_enter = 3 ;//VOltar
                           linha = 1;
                           wait(0.2);
                        } 
                    }  
                }
                if (menu == 6)//-----------------------------------------------------------------Configuracoes--------------------------------------------------------------
                {
                    if ( linha == 0)
                        {
                            i_v++;
                            if (i_v == 3)
                            {
                                i_v = 0;   
                            }
                            vel = lista_vel[i_v];
                            wait(0.2);
                            menu_enter = 5;
                            
                            
                        } 
                        if ( linha == 2)
                        {
                            lcd.locate(2,2);
                            lcd.putc(' ');
                            lcd.locate(3,2);
                            lcd.putc(' ');
                            lcd.locate(4,2);
                            lcd.putc(' ');
                            lcd.locate(2,2);
                            lcd.putc('N');
                            lcd.locate(3,2);
                            lcd.putc('a');
                            lcd.locate(4,2);
                            lcd.putc('o');
                        }  
                        if ( linha == 3)
                        {
                           pc.printf("Mod!");
                           menu = 1 ;//VOltar
                           linha = 1;
                           wait(0.2);   
                        }
                    
                }
                
            }// if bbotao_enter\
         //-------------------------------------------------------------------------------------ADICIONAR PONTOS -----------------------------------------------------------------
            if (menu_enter_2 == 1)
            {       
                    pc.printf("ADICIONAR PONTOS\r\n");
                    pc.printf("i_p = %d ", i_p);
                    lcd.cls();
                    linha = 2;
                    pontos[i_p] = ponto;
                    pc.printf("Ponto %d \r\n",i_p);
                    pc.printf("X:%d Y:%d Z:%d \r\n",posicao_x,posicao_y,posicao_z);
                    float posicao_x_f = passo_mm_xy(posicao_x);
                    float posicao_y_f = passo_mm_xy(posicao_y);
                    float posicao_z_f = passo_mm_z(posicao_z);
                    lcd.printf("Pontos %d \n",i_p);
                    lcd.printf("X:%.0f Y:%.0f Z:%.0f\n",posicao_x_f,posicao_y_f,posicao_z_f);
                    lcd.printf("  Confirmar\n");
                    lcd.printf("  Voltar\n");
                    lcd.locate(0,linha);
                    lcd.putc('~');
                    
                    
                      
                    menu = 3;
                    menu_enter_2 = 0;//para o refresh rate 
            }// Adiciona Pontos
            //-------------------------------------------------------------------------------------Cola nos pontos? -----------------------------------------------------------------
            if (menu_enter_2 == 2)
            {       
                    pc.printf("Cola pontos?\r\n");
                    lcd.cls();
                    linha = 2;
                    lcd.printf("Colar entre?\n");
                    pc.printf("flag_mod2 = %d\r\n",flag_mod2);
                    if ( flag_mod2 == 0)
                    {
                        lcd.printf(" P%i e P%i\n",i_p - 2,i_p - 1);
                    }
                    if ( flag_mod2 == 1)
                    {
                        lcd.printf(" P%i e P%i\n",i_p - 1,i_p);
                    }
                    lcd.printf("  Sim\n");
                    lcd.printf("  Nao\n");
                    lcd.locate(0,linha);
                    lcd.putc('~');
                    
                    
                    menu = 4;
                    menu_enter_2 = 0;//para o refresh rate 
            }// Adiciona Pontos
          //-------------------------------------------------------------------------------------MODIFICAR  PONTOS -----------------------------------------------------------------
            if (menu_enter_2 == 4)
            {       
                   
                    pc.printf("Modificar Pontos\r\n");
                    pc.printf("i_p = %d ", i_p);
                    lcd.cls();
                    linha = 2;
                    pontos[i_p] = ponto;
                    pc.printf("Pontos %d\r\n",i_p);
                    pc.printf("X:%d Y:%d Z:%d \r\n",pontos_x[i_p],pontos_y[i_p],pontos_z[i_p]);
                    float posicao_x_f = passo_mm_xy(pontos_x[i_p]);
                    float posicao_y_f = passo_mm_xy(pontos_y[i_p]);
                    float posicao_z_f = passo_mm_z(pontos_z[i_p]);
                    if (i_p != 0)
                    {   
                        pc.printf("i_c = %d ", i_c);
                        if ( cola[i_p - 1] == 1)
                        {
                        lcd.printf("Ponto %d    P%d->P%d=S",i_p,i_p-1 ,i_p);
                        lcd.printf("\n");
                        lcd.printf("X:%.0f Y:%.0f Z:%.0f\n",posicao_x_f,posicao_y_f,posicao_z_f);
                        }
                        if ( cola[i_p - 1] == 0)
                        {
                        lcd.printf("Ponto %d    P%d->P%d=N",i_p,i_p-1 ,i_p);
                        lcd.printf("\n");
                        lcd.printf("X:%.0f Y:%.0f Z:%.0f\n",posicao_x_f,posicao_y_f,posicao_z_f);
                        }
                    }
                    
                    if ( i_p == 0)
                    {   
                        
                        lcd.printf("Ponto 0 ");
                        lcd.printf("\n");
                        lcd.printf("X:%.0f Y:%.0f Z:%.0f\n",posicao_x_f,posicao_y_f,posicao_z_f);
                        lcd.printf("           Proximo\n");
                        lcd.printf(" Voltar    Modificar\n");
                        lcd.locate(10,linha);
                        lcd.putc('~');  
                    }
                    if (i_p != 0 and i_p != ultimo_p -1)
                    {
                        lcd.printf(" Anterior  Proximo\n");
                        lcd.printf(" Voltar    Modificar\n");
                        lcd.locate(10,linha);
                        lcd.putc('~');  
                    }
                    pc.printf("ultimo_p = %d \r\n",ultimo_p);
                    if (i_p != 0 and i_p == ultimo_p -1)
                    {
                        lcd.printf(" Anterior \n");
                        lcd.printf(" Voltar    Modificar\n");
                        lcd.locate(0,linha);
                        lcd.putc('~');  
                        linha = 5;
                    }
                      
                    menu = 5;
                    menu_enter_2 = 0;//para o refresh rate 
            }// Adiciona Pontos
        //----------------------------------------------------------------------------------------------Configuracoes--------------------------------------------------------------
            if ( menu_enter == 5)
            {
                    pc.printf("Configuracoes\r\n");
                    lcd.cls();
                    linha = 0;
                    lcd.printf(" -Vel:%d[mm/s]\n",vel);
                    //lcd.printf(" -Cola nos Pontos?\n");
                    //lcd.printf("   Sim \n");
                    lcd.printf(" \n");
                    lcd.printf("  \n");
                    lcd.printf(" Voltar\n");
                    lcd.locate(0,linha);
                    lcd.putc('~');
                    
                    
                    menu = 6;
                    menu_enter = 0;//para o refresh rate 
                    wait(0.1);
            }
        
           //-----------------------------------REFERENCIANDO-----------------------------------------------------------/  
            if(refe== 1) //comeca referenciamento    roda uma vez 
                {
                
                //pc.printf("refe == 1 \r\n");
                enable_x = 0;
                enable_y = 1;
                enable_z = 1;
                dir_x = 1;
                //---------------IHM----------
                lcd.cls();
                lcd.printf("  Referenciando...\n");
                wait(0.25);
                //-----------------------------
                
                move_inicial(dir_x,600,FimCursoX,0);
                enable_x = 1;
               // wait(2);
                if (FimCursoX == 1) 
                    {
                        pc.printf("Fim de Curso 1 X \r\n");
                        // refe X
                        enable_x = 0;
                        dir_x = !dir_x ;
                        movepara(dir_x,600,200,0);
                        enable_x = 1;
                        posicao_x = 1;
                        pc.printf("Fim de Curso 2 X \r\n");
                    }
                enable_x = 1;
                enable_y = 0;
                enable_z = 1;
                dir_y =1;
                move_inicial(dir_y,600,FimCursoY,1);
                enable_y = 1;
                if (FimCursoY == 1) 
                    {
                        pc.printf("Fim de Curso 1 Y \r\n");
                        // refe Y
                        enable_y = 0;
                        dir_y = !dir_y ;
                        movepara(dir_y,vel,200,1);
                        enable_y = 1;
                        refe= 0;
                        posicao_y = 1;
                       pc.printf("Fim de Curso 2 Y  \r\n");
                    }
                
                dir_z =1;
                enable_x = 1;
                enable_y = 1;
                enable_z = 0;
                move_inicial(dir_z,450,FimCursoZ,2);
                enable_z = 1;
                
                if (FimCursoZ == 1) 
                    {
                        pc.printf("Fim de Curso 1 Z \r\n");
                        // refe Y
                        enable_z = 0;
                        dir_z = !dir_z ;
                        movepara(dir_z,450,200,2);
                        enable_z = 1;
                        refe= 0;
                        posicao_z = 1;
                        pc.printf("Fim de Curso 2 Z  \r\n");
                        lcd.cls();
                        //---------------IHM----------
                        lcd.printf("Referenciamento\n");   
                        lcd.printf("Concluido!\n");
                        wait(1);
                        lcd.cls();
                        menu = 1;
                        //-----------------------------
                    }
                } 
            
            //---------------------------------------------------------------------------Drivers-------------------------------------------------------------------------------------------------------/  
           //---------------------------------------------------------------------------LOOP DA MAQUINA-------------------------------------------------------------------------------------------------------/  
            if (mover_motores == 1 and menu == 3 and flag_emergencia2 == 0) //fica preso no loop
            {   
                
                //pc.printf("refe == 0 \r\n");
                //Lendo JoyStick Analogico
                x = eixo_x.read();
                y = eixo_y.read();
                //pc.printf("Posicao/Vel X: %f Y: %f.\r\n", x, y);
                //Acionamento motor de Passo via Joystick
                //-----------------------------------------JOYSTICK X------------------------------------------------------/  
               
                while (x < 0.3f and flag_emergencia2 == 0)// X+
                {   enable_x = 0;
                    dir_x = 0;
                    //wait(espera);
                    x = eixo_x.read();
                    //pc.printf("x> \r\n");
                    if (botao_emergencia == 0)
                    {
                        flag_emergencia2 = 1;
                        break;   
                    }
                    if (dir_x == 0 and posicao_x < 25000) 
                    {
                        posicao_x = posicao_x + move(dir_x, vel,posicao_x,0) ;
                        // menu_enter_2 = 1;
                       
                    }
                    pc.printf("Posicao Passo X: %d. \r\n",posicao_x);
                    menu_enter_2 = 1;
                }
                while ( x > 0.7f and flag_emergencia2 == 0) //X-
                {   enable_x = 0;
                    dir_x = 1;
                    x = eixo_x.read();
                   // pc.printf("x < \r\n");
                  //  pc.printf("dir_x = %B \r\n",dir_x);
                   if (botao_emergencia == 0 )
                    {
                        flag_emergencia2 = 1;
                        break;   
                    }
                    if (dir_x == 1 and posicao_x > 0) 
                        {
                        posicao_x = posicao_x - move(dir_x, vel, posicao_x,0) ;
                        }
                    pc.printf("Posicao Passo X: %d. \r\n",posicao_x);
                     menu_enter_2 = 1;
                }
                if ( x > 0.3f and x < 0.73f)
                {
                    para();
                    // menu_enter_2 = 1; 
                }
                //-----------------------------------------JOYSTICK Y-------------------------------------------------------/  
                 if (troca_yz == 0)
                { 
                    while (y < 0.3f and flag_emergencia2 == 0) //Y+
                    {
                        enable_y = 0;
                        dir_y = 0;
                        y = eixo_y.read();
                        if (botao_emergencia == 0)
                        {
                            flag_emergencia2 = 1;
                            break;   
                        }
                        if (dir_y == 0 and posicao_y <26000) 
                            {
                            posicao_y = posicao_y + move(dir_y, vel,posicao_y,1) ;
                            }
                        pc.printf("Posicao Passo Y: %d. \r\n",posicao_y);
                         menu_enter_2 = 1;
                    }
                    while ( y > 0.7f and flag_emergencia2 == 0)//Y-
                    {      
                        enable_y = 0;
                        dir_y = 1;
                        y = eixo_y.read();
                        if (botao_emergencia == 0)
                        {
                            flag_emergencia2 = 1;
                            break;   
                        }
                        if (dir_y == 1 and posicao_y > 0) 
                            {
                            posicao_y = posicao_y - move(dir_y, vel, posicao_y,1) ;
                            }
                        pc.printf("Posicao Passo Y: %d. \r\n",posicao_y);
                        menu_enter_2 = 1;
                    
                    }
                    if ( y > 0.3f and y < 0.7f) 
                    {    
                        para_();
                       // menu_enter_2 = 1;
                    } 
                }
                //-----------------------------------------JOYSTICK Y PARA MEXER O Z------------------------------------------------------/  
                if ( troca_yz == 1)
                {
                    while (y < 0.3f and flag_emergencia2 == 0) //Z-
                    {
                        enable_z = 0;
                        dir_z = 1;
                        y = eixo_y.read();
                        if (botao_emergencia == 0)
                        {
                            flag_emergencia2 = 1;
                            break;   
                        }
                        if (dir_z == 1 and posicao_z > 0) 
                        {
                           posicao_z = posicao_z - move(dir_z, 500,posicao_z,2) ;
                        }
                         pc.printf("Posicao Passo Z: %d. \r\n",posicao_z);
                          menu_enter_2 = 1;
                    }
                    while ( y > 0.7f and flag_emergencia2 == 0)//Z+
                    {      
                        enable_z = 0;
                        dir_z = 0;
                        y = eixo_y.read();
                        if (botao_emergencia == 0)
                        {
                            flag_emergencia2 = 1;
                            break;   
                        }
                        if (dir_z == 0 and posicao_z < 2000) 
                        {
                             posicao_z = posicao_z + move(dir_z, 500, posicao_z,2) ; 
                        }
                        pc.printf("Posicao Passo Z: %d. \r\n",posicao_z);
                         menu_enter_2 = 1;
                        
                    }
                    if ( y > 0.3f and y < 0.7f) 
                    {    
                        para_();
                        //menu_enter_2 = 1;
                    }
                }//fim troca_yz
                //-----------------------------------------BOTAO ANALOGICO PARA TROCAR O EIXO Z/Y --------------------------------------------/  
                
                if (botao_analog == 0)
                {   troca_yz = !troca_yz; //troca Y/Z
                    
                    pc.printf("ZY");
                    lcd.cls();
                    if (troca_yz == 1)
                    {
                        lcd.printf(" Eixo Z Selecionado \n");
                    } 
                    if (troca_yz == 0)
                    {
                        lcd.printf(" Eixo Y Selecionado \n");
                    } 
                    wait(0.8);
                    menu_enter_2 = 1;
                }
                
                //-----------------------------------------GUARDAR PONTOS (BOTAO) --------------------------------------------/  
                if ((guardar_pontos == 1 or botaoC == 0) and posicao_x >= 0 and posicao_y >= 0 and posicao_z >= 0 )
                {   //-------------------------------------------------X--------------------------------/
                
                    pc.printf("GUARDAR PONTOS\r\n");
                    if ( i_x != 0 ) 
                    {
                        pontos_x[i_x] = posicao_x;
                        //pc.printf("               Ponto[%i] Passo: %i \r\n",i_x,pontos_x[i_x]);  
                        i_x++; 
                    }
                    if ( i_x == 0 ) 
                    {
                        pontos_x[i_x] = posicao_x;
                        //pc.printf("               Ponto[%i] Passo: %i \r\n",i_x,pontos_x[i_x]);  
                        i_x++; 
                    }
                    
                    /*if (posicao_x != pontos_x[i_x-1]) 
                    {
                        pontos_x[i_x] = posicao_x;
                       // pc.printf("               Ponto[%i] Passo: %i \r\n",i_x,pontos_x[i_x]);  
                        i_x++;
                    }*/
                    
                    //-------------------------------------------------Y--------------------------------/
                    
                     if ( i_y != 0 ) 
                    {
                        pontos_y[i_y] = posicao_y;
                        //pc.printf("               Ponto[%i] Passo: %i \r\n",i_y,pontos_y[i_y]);  
                        i_y++; 
                    }
                    if ( i_y == 0 ) 
                    {
                        pontos_y[i_y] = posicao_y;
                        //pc.printf("               Ponto[%i] Passo: %i \r\n",i_y,pontos_y[i_y]);  
                        i_y++; 
                    }
                    /*if (posicao_y != pontos_y[i_y-1]) 
                    {
                        pontos_y[i_y] = posicao_y;
                        //pc.printf("               Ponto[%i] Passo: %i \r\n",i_y,pontos_y[i_y]);  
                        i_y++;
                    }*/
                   //  pc.printf("               Pontos X[%i] Y[%i] Passo X: %i Passo Y: %i\r\n",i_x,i_y, pontos_x[i_x -1],pontos_y[i_y -1]); 
                    
                    //-------------------------------------------------Z--------------------------------/
                    
                     if ( i_z != 0 ) 
                    {
                        pontos_z[i_z] = posicao_z;
                        //pc.printf("               Ponto[%i] Passo: %i \r\n",i_z,pontos_y[i_z]);  
                        i_z++; 
                    }
                    if ( i_z == 0 ) 
                    {
                        pontos_z[i_z] = posicao_z;
                     //   pc.printf("               Ponto[%i] Passo: %i \r\n",i_z,pontos_z[i_z]);  
                        i_z++; 
                    }
                 /*   if (posicao_z != pontos_z[i_z-1]) 
                    {
                        pontos_y[i_z] = posicao_z;
                        //pc.printf("               Ponto[%i] Passo: %i \r\n",i_z,pontos_y[i_z]);  
                        i_z++;
                    }*/
                     pc.printf("               Pontos X[%i]=%i Pontos Y[%i]=%i Pontos Z[%i]=%i \r\n",i_x, pontos_x[i_x -1],i_y, pontos_y[i_y -1],i_z, pontos_z[i_z -1]); 
                     guardar_pontos = 0;
                     wait(0.5);             
                }
            }//end mover_motores == 1 and menu == 3
    
            if (mover_motores == 1 and menu == 2)
            {
             //-----------------------------------------IR PARA OS PONTOS GUARDADOS (BOTAO)  -----------------------------------------/  
                
                if (colar_pontos == 1 or botaoA == 0) 
                {   
                
                    lcd.cls();
                    lcd.printf("Aplicando Cola!\n");
                    pc.printf("colar pontos funcao! \r\n");
                    aciona_pneu = 0;//liga a pressao da valvula
                    for(int h = 0; h < (i_z); h++)
                    {  
                    
                        //-----------------------------------------Aciona a pneumatica -----------------------------------------/  
                        if (cola[h - 1] == 1)
                        {
                            aciona_pneu2 = 0;//abre valvula    
                            
                        }
                        
                        wait(1);
                        pc.printf(" Indo para os Pontos \r\n");
                        //-----------------------------------------pontos X -----------------------------------------/  
                        pc.printf(" Pontos X \r\n");
                        
                        int set_point_x = pontos_x[h] - posicao_x; //o quanto de passos que o motor ira dar para chegar ao ponto desejado
                        //pc.printf("SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point, pontos_x[h],h);
                         if (set_point_x != 0) //o ponto atual é menor do que o desejado
                        { 
                            enable_x = 0;
                            
                        }
                        
                        if (set_point_x == 0) //o ponto atual é menor do que o desejado
                        { 
                            enable_x = 1;
                            enable_y = 1;
                            enable_z = 1;
                        }
                        if (set_point_x > 0) //o ponto atual é menor do que o desejado
                        { //  pc.printf("maior q 0 \r\n");
                          //  pc.printf("            SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point, pontos_x[h],h);
                            dir_x = 0;
                            posicao_x = posicao_x + movepara(dir_x,vel,set_point_x,0);
                        }
                        
                        if (set_point_x < 0) // o ponto atual esta a frente do desejado
                        { // pc.printf("menor q 0 \r\n");
                           // pc.printf("            SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point, pontos_x[h],h);  
                            dir_x = 1;
                            posicao_x = posicao_x - movepara(dir_x,vel,set_point_x,0);
                        }
                        //enable_x = 1 ;//desligar o motor na espera
                        //pc.printf("Posicao Passo: %d. \r\n",posicao_x); 
                       // wait(1); //espera   para ir ao proximo ponto
                     
                        //-----------------------------------------pontos y -----------------------------------------/  
                        pc.printf(" Pontos Y \r\n");
                        int set_point_y = pontos_y[h] - posicao_y; //o quanto de passos que o motor ira dar para chegar ao ponto desejado
                        
                        //pc.printf("SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h);
                        if (set_point_y != 0) //o ponto atual é menor do que o desejado
                        { 
                            enable_x = 1;
                            enable_y = 0;
                            enable_z = 1;
                        }
                        if (set_point_y == 0) //o ponto atual é menor do que o desejado
                        { 
                            enable_x = 1;
                            enable_y = 1;
                            enable_z = 1;
                        }
                        if (set_point_y > 0) //o ponto atual é menor do que o desejado
                        {   //pc.printf("maior q 0 \r\n");
                           // pc.printf("            SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h);
                            dir_y = 0;
                            posicao_y = posicao_y + movepara(dir_y,vel,set_point_y,1);
                        }
                        
                        if (set_point_y < 0) // o ponto atual esta a frente do desejado
                        {  // pc.printf("menor q 0 \r\n");
                            //pc.printf("            SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h);  
                            dir_y = 1;
                            posicao_y = posicao_y - movepara(dir_y,vel,set_point_y,1);
                        }
                        //enable_y = 1 ;//desligar o motor na espera
                    // pc.printf("Posicao Passo X: %d       Passo Y: %d . \r\n",posicao_x,posicao_y); 
                       // wait(1); //espera 2 segundos para ir ao proximo ponto
                         //-----------------------------------------pontos z -----------------------------------------/  
                         pc.printf(" Pontos Z \r\n");
                         
                        int set_point_z = pontos_z[h] - posicao_z; //o quanto de passos que o motor ira dar para chegar ao ponto desejado
                        //pc.printf("SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h);
                       if (set_point_z != 0) //o ponto atual é menor do que o desejado
                        { 
                            enable_x = 1;
                            enable_y = 1;
                            enable_z = 0;
                        }
                        if (set_point_z == 0) //o ponto atual é menor do que o desejado
                        { 
                            enable_x = 1;
                            enable_y = 1;
                            enable_z = 1;
                        }
                        if (set_point_z > 0) //o ponto atual é menor do que o desejado
                        {   //pc.printf("maior q 0 \r\n");
                           // pc.printf("            SetPoint:%i pontos_z[h]:%i h:%i \r\n",set_point_z, pontos_z[h],h);
                            dir_z = 0; //vai para baixo 
                            posicao_z = posicao_z  + movepara(dir_z,vel,set_point_z,2);
                        }
                        
                        if (set_point_z < 0) // o ponto atual esta a frente do desejado
                        {  // pc.printf("menor q 0 \r\n");
                            //pc.printf("            SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h); 
                             
                            dir_z = 1; //vai para cima
                            posicao_z = posicao_z - movepara(dir_z,vel,set_point_z,2);
                        }
                        //enable_y = 1 ;//desligar o motor na espera
                        pc.printf("Posicao[%d] Passo X: %d       Passo Y: %d        Passo Z: %d. \r\n",h,posicao_x,posicao_y,posicao_z); 
                        colar_pontos = 0;
                        
                       // wait(1); //espera 2 segundos para ir ao proximo ponto
                        
                        aciona_pneu2 = 1;//fecha valvula
                    
                    
                    }//loop for
                    enable_x = 1;
                    enable_y = 1;
                    enable_z = 1;
                    aciona_pneu = 1;//desliga a pressao da valvula
                    pc.printf("Acabou rotina aplicador de cola\n");
                    if (botao_emergencia == 1)
                    {
                        lcd.cls();
                        lcd.printf("Finalizado!\n");
                        wait(1);
                        menu_enter = 3;//volta para o menu
                        linha = 3;
                    }
                }//if botaoA 
           
            }// end mover_motores == 1 and menu == 2
              
        }//if botao emergencia == 1    
        if ((botao_emergencia == 0 and flag_emergencia == 0) or flag_emergencia2 == 1)
        {
            lcd.cls();
            lcd.printf("Botao Emergencia!\n");
            lcd.setCursor(TextLCD::CurOff_BlkOff);//desliga o cursor
            refe = 0;
            flag_emergencia = 1;
            flag_emergencia2 = 0;
            linha = 1;
        }
    }//while 1    
}//main