testando

Dependencies:   mbed TextLCD2

main_PM.cpp

Committer:
Hiroball
Date:
2020-06-01
Revision:
61:be02d7d4e208
Parent:
60:e2c632e8dee1
Child:
63:32ba7c4becfc

File content as of revision 61:be02d7d4e208:

//local para inclusao de bibliotecas
#include "mbed.h"
#include "TextLCD.h"
#include "funcoes_ihm.h"
#include "classe.h"
#include <stdio.h>
#include <string>

//local para a declaracao de varioveis
float t_motor = 0.002;      //delay entre o acionamento de uma bobina do motor e a outra
float t_teclado = 0.01;     //delay entre a leitura de um botão do teclado, necessário para que um click nao gere mais de uma saída
int hor[] = {12,6,3,9};     //valores que, ao serem convertidos em binário, geram a sequência de acionamento do motor no sentido horário enviando a sequência de 0's e 1's às bobinas
int antihor[] = {3,6,12,9}; //valores que, ao serem convertidos em binário, geram a sequência de acionamento do motor no sentido anti-horário enviando a sequência de 0's e 1's às bobinas
int parado[] = {0,0,0,0};   //valores enviados às bobinas do motor para deixá-lo parado
char tecla;                 //variável que guarda a tecla apertada no teclado
float coord_x = 0;          //variável que guardará a posição linear do eixo x, ela é incrementada com a conta do deslocamento linear dado um deslocamento angular sempre que o eixo é movimentado depois do referencimaneto
float coord_y = 0;          //variável que guardará a posição linear do eixo y, ela é incrementada com a conta do deslocamento linear dado um deslocamento angular sempre que o eixo é movimentado depois do referencimaneto
float coord_z = 0;          //variável que guardará a posição linear do eixo z, ela é incrementada com a conta do deslocamento linear dado um deslocamento angular sempre que o eixo é movimentado depois do referencimaneto
int est_x = 0;              //variável que indicará o estado do eixo x, pemitindo ou não que ele possa ser avançado depois de atingir o fim de curso
int est_y = 0;              //variável que indicará o estado do eixo y, pemitindo ou não que ele possa ser avançado depois de atingir o fim de curso
int est_z = 0;              //variável que indicará o estado do eixo z, pemitindo ou não que ele possa ser avançado depois de atingir o fim de curso

//pinos usados pelos botoes de fim de curso
DigitalIn fdc_x(PC_10);
DigitalIn fdc_y(PC_11);
DigitalIn fdc_z(PC_12);

//Iterrupcao botao de emergência
InterruptIn interrupcao(PC_14);

//pinos do rele, saida digital para acionar o rele se necessario, dada uma entrada no pino da emergencia 
DigitalOut rele1(PC_5);
DigitalOut rele2(PB_9);

//botoes para movimentacao eixo a eixo
DigitalIn x_mais(PA_0);
DigitalIn x_menos(PA_1);
DigitalIn y_mais(PC_0);
DigitalIn y_menos(PC_1);
DigitalIn z_mais(PC_2);
DigitalIn z_menos(PC_3);

//pinos da placa usados na biblioteca do LCD
//TextLCD lcd(D4, D5, D6, D7, D8, D9); 

//pinos do teclado
DigitalIn b(PC_4);
DigitalIn a(PB_0);
DigitalIn t_0(PC_13);
DigitalIn t_1(PB_7);
DigitalIn t_2(PD_2);
DigitalIn t_3(PA_4);
DigitalIn t_4(PB_12);
DigitalIn t_5(PB_15);
DigitalIn t_6(PA_7);
DigitalIn t_7(PB_14);
DigitalIn t_8(PA_6);
DigitalIn t_9(PB_13);

//pinos de saída para os motores
//eixo x
BusOut eixox(PA_15,PA_14,PA_13,PA_12);
//eixo y
BusOut eixoy(PA_11,PA_10,PB_2,PB_1);
//eixo z
BusOut eixoz(PC_9,PC_8,PB_8,PC_6);

//funcao para receber inputs do teclado
char pega_tecla(){
        if (b == 0)return ('A');
        if (a == 0)return('B');
        if (t_0 == 0)return('0');
        if (t_1 == 0)return('1');
        if (t_2 == 0)return('2');
        if (t_3 == 0)return('3');
        if (t_4 == 0)return('4');
        if (t_5 == 0)return('5');
        if (t_6 == 0)return('6');
        if (t_7 == 0)return('7');
        if (t_8 == 0)return('8');
        if (t_9 == 0)return('9');
        return('k');}

//funcao de movimentacao dos motores
void mov_x_menos(){for(int i = 0; i < 4; i++){eixox = antihor[i];wait(t_motor);coord_x -= (5.625*5/32)/360;est_x = 0;}}
void mov_y_menos(){for(int i = 0; i < 4; i++){eixoy = antihor[i];wait(t_motor);coord_y -= (5.625*5/32)/360;est_y = 0;}}
void mov_z_menos(){for(int i = 0; i < 4; i++){eixoz = antihor[i];wait(t_motor);coord_z -= (5.625*5/32)/360;est_z = 0;}}
void mov_x_mais() {for(int i = 0; i < 4; i++){eixox =     hor[i];wait(t_motor);coord_x += (5.625*5/32)/360;est_x = 0;}}
void mov_y_mais() {for(int i = 0; i < 4; i++){eixoy =     hor[i];wait(t_motor);coord_y += (5.625*5/32)/360;est_y = 0;}}
void mov_z_mais() {for(int i = 0; i < 4; i++){eixoz =     hor[i];wait(t_motor);coord_z += (5.625*5/32)/360;est_z = 0;}}

//Funcao de interrupcao
void emergencia(){TextLCD lcd(D4, D5, D6, D7, D8, D9); 
        rele1 = 0;
        eixox = 0b0000;
        eixoy = 0b0000;
        eixoz = 0b0000;
        lcd.cls();
        lcd.printf("Botao Emergencia");
        lcd.locate(0,1);
        lcd.printf("    acionado    ");
        lcd.locate(0,2);
        lcd.printf("Operacao pausada");
        wait(5);}

//Funcao de zeramento 

void zeramento(){
    while (fdc_x != 0){for(int i = 0; i < 4; i++){eixox = hor[i];wait(t_motor);est_x = 1;}}
    while (fdc_y != 0){for(int i = 0; i < 4; i++){eixoy = hor[i];wait(t_motor);est_y = 1;}}
    while (fdc_z != 0){for(int i = 0; i < 4; i++){eixoz = hor[i];wait(t_motor);est_z = 1;}}}

//Variaveis para operacao IHM
using std::string;
string status_tela = "zeramento";
int programa = 0;

float pos_x_pega = 0;
float pos_y_pega = 0;
float medida_lado_pega=0;
float volume_pega = 0;
int tipo_pega=0;

float dimensao_solta=0;

float volume_solta_1=0;
float volume_solta_2=0;
float volume_solta_3=0;
float volume_solta_4=0;
float volume_solta_5=0;
float volume_solta_6=0;
float volume_solta_7=0;
float volume_solta_8=0;
float volume_solta_9=0;

float pos_x_solta=0;
float pos_y_solta=0;

//main

int main() {
        interrupcao.fall(&emergencia);    
        int volume;
        int volume_solta;
        int diametro_solta;
        int diametro;
        int comprimento_quad;
        bool continuar;
        int multiplicador = 10;
        TextLCD lcd(D4, D5, D6, D7, D8, D9); 
        lcd.printf("Bem-vindo ao Pipemax");
        lcd.locate(0,1);
        lcd.printf("o seu sistema");
        lcd.locate(0,2);
        lcd.printf("automatizado");
        lcd.locate(0,3);
        lcd.printf("de pipetagem");
        wait(3);
        lcd.cls();
        lcd.printf("Por favor, aceite");
        lcd.locate(0,1);
        lcd.printf("o zeramento do seu");
        lcd.locate(0,2);
        lcd.printf("sistema");
        lcd.locate(0,3);
        lcd.printf("A - proximo");         
    while(1) {
        tecla = pega_tecla();         
        printf("\n%s",status_tela);
        printf("\n%c",tecla);
        if(tecla == 'A' && status_tela == "zeramento"){
            zeramento();
            status_tela = "inicio";
            funcao_inicio();}

        if (x_mais == 0 && est_x == 1){for(int i = 0; i < 4; i++){eixox = parado[i];wait(t_motor);coord_x += 0;lcd.cls();lcd.printf("Limite de x atingido");}}
        if (y_mais == 0 && est_y == 1){for(int i = 0; i < 4; i++){eixoy = parado[i];wait(t_motor);coord_y += 0;lcd.cls();lcd.printf("Limite de y atingido");}}
        if (z_mais == 0 && est_z == 1){for(int i = 0; i < 4; i++){eixoz = parado[i];wait(t_motor);coord_z += 0;lcd.cls();lcd.printf("Limite de z atingido");}}     
                 
//        while(x_menos == 0){mov_x_menos();
//            lcd.cls();      lcd.printf("X: %4.1f", coord_x);
//            lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y);
//            lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);}
            
        while(y_menos == 0){mov_y_menos();
            lcd.cls();      lcd.printf("X: %4.1f", coord_x);
            lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y);
            lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);}
            
        while(z_menos == 0){mov_z_menos();
            lcd.cls();      lcd.printf("X: %4.1f", coord_x);
            lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y);
            lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);}

//        while(x_mais == 0){mov_x_mais();
//            lcd.cls();      lcd.printf("X: %4.1f", coord_x);
//            lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y);
//            lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);}
            
        while(y_mais == 0){mov_y_mais();
            lcd.cls();      lcd.printf("X: %4.1f", coord_x);
            lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y);
            lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);}

        while(z_mais == 0){mov_z_mais();
            lcd.cls();      lcd.printf("X: %4.1f", coord_x);
            lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y);
            lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);}

        if(x_mais && x_menos && y_mais && y_menos && z_mais && z_menos != 0){
            for(int i = 0; i < 4; i++){eixox = parado[i];}
            for(int i = 0; i < 4; i++){eixoy = parado[i];}
            for(int i = 0; i < 4; i++){eixoz = parado[i];}}
    
        tecla = pega_tecla();
        if(tecla =='1' && status_tela == "inicio"){
            funcao_pega1();
            wait(1);
            funcao_pega2();
            status_tela = "novo";}
        else if(tecla == '2' && status_tela == "inicio"){
            funcao_salvo1();
            wait(1);
            funcao_salvo2();
            status_tela = "salvo";}
        
        tecla = pega_tecla();    
        if(tecla =='1' && status_tela =="salvo"){
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2();
            programa = 1;
            status_tela = "salvo_confirmacao";}
        else if(tecla =='2' && status_tela =="salvo"){
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2();
            programa = 2;
            status_tela = "salvo_confirmacao";}
        else if(tecla =='3' && status_tela =="salvo"){
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2();
            programa = 3;
            status_tela = "salvo_confirmacao";}
        else if(tecla =='4' && status_tela =="salvo"){
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2();
            programa = 4;
            status_tela = "salvo_confirmacao";}
        else if(tecla =='5' && status_tela =="salvo"){
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2();
            programa = 5;
            status_tela = "salvo_confirmacao";}
        else if(tecla =='6' && status_tela =="salvo"){
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2();
            programa = 6;
            status_tela = "salvo_confirmacao";}
        else if(tecla =='B' && status_tela =="salvo"){
            funcao_inicio();
            status_tela = "inicio";}      
        
        tecla = pega_tecla();    
        if(tecla =='1' && status_tela =="salvo_confirmacao"){  
            funcao_salvo_agree_pos_aviso();
            wait(3);
            //posicionar no local da pega salvo; (motor -> programa.pos_x_pega e motor -> programa.pos_y_pega)
            funcao_salvo_agree_pos_certo();
            status_tela="salvo_pos_certo_pega" ;}
        else if(tecla =='2' && status_tela =="salvo_confirmacao"){
             funcao_salvo_agree_solta_aviso();
             wait(3);
             //posicionar no local de solta para confirmação; (motor -> programa.pos_x_solta e motor -> programa.pos_y_solta)
             funcao_salvo_agree_pos_certo();
             status_tela = "salvo_pos_certo_solta";}
        else if(tecla =='3' && status_tela =="salvo_confirmacao"){
             funcao_salvo_agree_pega_vol();
             //programação de volume igual da de cima (programa.vol_pega)
             status_tela="salvo_conf_vol_pega";}     
        else if(tecla =='4' && status_tela =="salvo_confirmacao"){
             funcao_salvo_agree_solta_vol();
             //volumes configurados por cada pipeta. (programa.vol_solta_pipeta)
             status_tela="salvo_conf_vol_solta";}
        else if(tecla =='B' && status_tela =="salvo_confirmacao"){ 
            funcao_salvo1();
            wait(1);
            funcao_salvo2();
            programa = 1;
            status_tela = "salvo";}   
            
        tecla = pega_tecla(); 
        if(tecla =='1' && status_tela =="salvo_pos_certo_pega"){
            funcao_salvo_agree1();
            lcd.locate(18,1);lcd.printf("OK");
            wait(1);
            funcao_salvo_agree2();
            status_tela = "salvo_confirmacao";
            }//salva essa posição como correta
        else if(tecla =='2' && status_tela =="salvo_pos_certo_pega"){}
        else if(tecla =='B' && status_tela =="salvo_pos_certo_pega"){             
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2(); 
            status_tela = "salvo_confirmacao";}  
            
        if(tecla =='A' && status_tela =="salvo_conf_vol_pega"){
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2();
            lcd.locate(18,1);lcd.printf("OK");
            status_tela = "salvo_confirmacao";
            }//salva essa posição como correta
        else if(tecla =='B' && status_tela =="salvo_conf_vol_pega"){             
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2(); 
            status_tela = "salvo_confirmacao";}  
            
        if(tecla =='1' && status_tela =="salvo_pos_certo_solta"){
            funcao_salvo_agree1();
            lcd.locate(18,2);lcd.printf("OK");
            wait(1);
            funcao_salvo_agree2();
            status_tela = "salvo_confirmacao";
            }//salva essa posição como correta
        else if(tecla =='2' && status_tela =="salvo_pos_certo_solta"){}
        else if(tecla =='B' && status_tela =="salvo_pos_certo_solta"){             
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2(); 
            status_tela = "salvo_confirmacao";}      
            
        if(tecla =='A' && status_tela =="salvo_conf_vol_solta"){
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2();
            lcd.locate(18,2);lcd.printf("OK");    
            status_tela = "salvo_confirmacao";        
            }//salva essa posição como correta
        else if(tecla =='2' && status_tela =="salvo_conf_vol_solta"){}
        else if(tecla =='B' && status_tela =="salvo_conf_vol_solta"){             
            funcao_salvo_agree1();
            wait(1);
            funcao_salvo_agree2(); 
            status_tela = "salvo_confirmacao";}          
                      
        tecla = pega_tecla();    
        if(tecla =='1' && status_tela =="novo"){
            funcao_pega_forma();
            status_tela ="forma";}
            
        else if(tecla =='2' && status_tela == "novo"){
            volume = 0;
            printf("\n%c",pega_tecla());
            funcao_pega_volume(); //!!!!!!!!!!!!!!!!!!!!!!!!!!!WTFFFFF
            status_tela = "volume";
            continuar = 1;
            multiplicador = 10;
            while(continuar){
                printf("\n%c",pega_tecla()); 
                tecla = pega_tecla();
                lcd.locate(6,1);
                wait(1);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    volume = multiplicador*volume + ((int)tecla-48);    
                    lcd.printf("%c", tecla);
                }
                else if(tecla == 'A'){
                    lcd.locate(0,2);
                    printf("Volume inputado!");
                    continuar = 0;
                    wait(1);
                }
                else if(tecla=='B'){
                    funcao_pega1();
                    wait(1);
                    funcao_pega2();
                    status_tela = "novo";
                    continuar = 0;
                }
            }   
        }
        else if(tecla == '3' && status_tela == "novo"){
            funcao_pega_pos_x();
            pos_x_pega = 12.5;
            status_tela = "pos_x";}
        else if(tecla == 'B' && status_tela == "novo"){
            funcao_inicio();
            status_tela = "inicio";}
        else if(tecla == '1' && status_tela == "salvo"){
            funcao_salvo_agree1();
            status_tela = "confirmacao";}
        else if(tecla =='2' && status_tela == "salvo"){
            funcao_salvo_agree1();
            status_tela = "confirmacao";}
        else if(tecla =='B' && status_tela == "salvo"){
            funcao_inicio();
            status_tela = "inicio";}
            
        tecla = 'F';
        wait(1);
        tecla = pega_tecla();    
        if(tecla == '1' && status_tela == "forma"){
            funcao_pega_forma_quad();
            tipo_pega = 1;
            tecla = pega_tecla();
            wait(1);
            status_tela ="forma_quad";
            continuar = 1;
            comprimento_quad = 0;
            while(continuar){
                printf("\n%c",pega_tecla()); 
                tecla = pega_tecla();
                wait(1);
                lcd.locate(0,2);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    comprimento_quad = multiplicador*comprimento_quad + ((int)tecla - 48);
                    lcd.printf("%c",tecla);
                }
                else if(tecla == 'A'){
                    continuar = 0;
                    printf("Comprimento inputado!");
                    printf("\nComprimento: %d", comprimento_quad);
                }
                else if(tecla=='B'){
                    funcao_pega_forma();
                    status_tela = "forma";
                    continuar = 0;}
                }
            }
        else if(tecla == '2' && status_tela == "forma"){
            funcao_pega_forma_red();
            tipo_pega = 2;
            tecla = pega_tecla();
            wait(1);
            continuar = 1;
            diametro = 0;
            status_tela = "forma_red";
            while(continuar){
                tecla = pega_tecla();
                wait(1);
                lcd.locate(0,2);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    diametro = multiplicador*diametro + ((int)tecla - 48);
                    lcd.printf("%c",tecla);
                }
                else if(tecla == 'A'){
                    continuar = 0;
                    printf("Diametro inputado!");
                    printf("Diametro: %d", diametro);
                }
                else if(tecla=='B'){
                    funcao_pega_forma();
                    status_tela = "forma";
                    continuar = 0;}
            }
        }
        else if(tecla == 'B' && status_tela == "forma"){
            funcao_pega1();
            wait(1);
            funcao_pega2();
            status_tela = "novo";}
        
        tecla = pega_tecla();
        if(tecla == 'A' && status_tela == "forma_quad"){
            funcao_pega1();
            medida_lado_pega = 10;
            if(pos_y_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(medida_lado_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(1);
            funcao_pega2();
            if(volume_pega !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            status_tela ="novo";}
        else if(tecla == 'B' && status_tela == "forma_quad"){
            funcao_pega_forma();
            status_tela = "forma";}
        else if(tecla == 'A' && status_tela == "forma_red"){
            medida_lado_pega = 10;
            funcao_pega1();
            if(pos_y_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(medida_lado_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(1);
            funcao_pega2();
            if(volume_pega !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            status_tela ="novo";}
        else if(tecla == 'B' && status_tela == "forma_red"){
            funcao_pega_forma();
            status_tela = "forma";}
        else if(tecla == 'A' && status_tela == "volume"){
            funcao_pega1();
            volume_pega = 12;
            if(pos_y_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(medida_lado_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(1);
            funcao_pega2();
            if(volume_pega !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            status_tela ="novo";}
        else if( tecla == 'B' && status_tela == "volume"){
            funcao_pega_forma();
            status_tela = "forma";}
        else if(tecla == 'A' && status_tela == "pos_x"){
            funcao_pega_pos_y();  //colocar programacao que contem o posicionamento do eixo y
            pos_y_pega = 12.5;
            status_tela = "pos_y";}
        else if(tecla == 'B' && status_tela == "pos_x"){
            funcao_pega_forma();
            status_tela = "forma";}
            
        tecla = pega_tecla();    
        if(tecla == 'A' && status_tela == "pos_y"){
            funcao_pega1();
            if(pos_y_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(medida_lado_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(1);
            funcao_pega2();
            if(volume_pega !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            wait(1);
            status_tela ="novo";}
        else if(tecla == 'B' && status_tela == "pos_y"){
            funcao_pega_forma();
            status_tela = "forma";}
            
            
        tecla=pega_tecla(); 
         if(pos_x_pega!=0 && pos_y_pega!=0 && medida_lado_pega!=0 && volume_pega !=0 && tipo_pega!=0 && status_tela == "novo"){
            funcao_solta1();
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            wait(3);
            status_tela="solta";}
        
        tecla=pega_tecla(); 
        if(tecla == '1' && status_tela == "solta"){
            funcao_solta_dimensao();
            continuar = 1;
            diametro_solta = 0;
            status_tela="solta_dimensao";
            lcd.locate(0,2);
            while(continuar){
                tecla = pega_tecla();
                wait(1);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    diametro_solta = multiplicador*diametro_solta + ((int)tecla - 48);
                    lcd.printf("%c",tecla);
                }
                else if(tecla == 'A'){
                    printf("Diametro do solta inputado!");
                    printf("Diametro do solta: %d", diametro_solta);
                    continuar = 0;
                }
                else if(tecla=='B'){
                    funcao_pega_forma();
                    status_tela = "solta";
                    funcao_solta1();
                    wait(3);
                    funcao_solta2();
                    continuar = 0;}
                }
        }

        else if(tecla == '2' && status_tela == "solta"){
            funcao_solta_vol();
            volume_solta = 0;
            continuar = 1;
            status_tela="solta_vol";
            lcd.locate(0,2);
            while(continuar){
                tecla = pega_tecla();
                wait(1);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    volume_solta = multiplicador*volume_solta + ((int)tecla - 48);
                    lcd.printf("%c",tecla);
                }
                else if(tecla == 'A'){
                    printf("Volume solta inputado!");
                    printf("Volume: %d", volume_solta);
                    continuar = 0;
                }
                else if(tecla=='B'){
                    funcao_pega_forma();
                    status_tela = "solta";
                    continuar = 0;
                    funcao_solta1();
                    wait(3);
                    funcao_solta2();
                    }
                }
            }
        else if(tecla == '3' && status_tela == "solta"){
            funcao_solta_pos_x();
            status_tela="solta_pos_x";
            continuar = 1;
            while(continuar){
                 while(x_menos == 0){mov_x_menos();
                    lcd.cls();      
                    lcd.printf("X: %4.1f", coord_x);}
                 while(x_mais == 0){mov_x_mais();
                    lcd.cls();
                    lcd.printf("X: %4.1f", coord_x);}
                if(tecla=='A'){
                    continuar = 0;
                    printf("Posicao de x salva!");
                    printf("Posicao X: %4.1f", coord_x);
                }
            }
        }   
        else if(tecla == 'B' && status_tela == "solta"){
            funcao_pega1();
            if(pos_y_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(medida_lado_pega !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(1);
            funcao_pega2();
            if(volume_pega !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            status_tela="inicio";
            }
        
        tecla=pega_tecla();
        if(tecla=='A' && status_tela=="solta_dimensao"){
            dimensao_solta = 10;
            funcao_solta1();
            if(pos_y_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(dimensao_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            wait(3);
            status_tela="solta";   
            }
        else if(tecla=='B' && status_tela=="solta_dimensao"){
            funcao_solta1();
            if(pos_y_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(dimensao_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            wait(3);
            status_tela="solta";     
            }
        if(tecla=='1' && status_tela=="solta_vol"){
            funcao_solta_vol_igual();
            status_tela="solta_vol_igual";
            }
        else if(tecla=='2' && status_tela=="solta_vol"){
            funcao_solta_vol_cada();
            status_tela="solta_vol_dif";
            }
        else if(tecla=='B' && status_tela=="solta_vol"){
            funcao_solta1();
                if(pos_y_solta !=0){
                lcd.locate(18,1);lcd.printf("OK");   
                }
                if(dimensao_solta !=0){
                lcd.locate(18,1);lcd.printf("OK");
                }
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            wait(3);
            status_tela="solta";  
            }
        if(tecla=='A' && status_tela=="solta_pos_x"){
            funcao_solta_pos_y();
            pos_x_solta = 10;
            status_tela="solta_pos_y";
            }
        else if(tecla=='B' && status_tela=="solta_pos_x"){
            funcao_solta1();
            if(pos_y_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(dimensao_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            wait(3);
            status_tela="solta";  
            }  
            
        tecla=pega_tecla();
        if(tecla=='A' && status_tela=="solta_vol_igual"){
            volume_solta_1=10;
            volume_solta_2=10;
            volume_solta_3=10;
            volume_solta_4=10;
            volume_solta_5=10;
            volume_solta_6=10;
            volume_solta_7=10;
            volume_solta_8=10;
            volume_solta_9=10;
            
            funcao_solta1();
        if(pos_y_solta !=0){
        lcd.locate(18,1);lcd.printf("OK");   
        }
        if(dimensao_solta !=0){
        lcd.locate(18,1);lcd.printf("OK");
        }
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            wait(3);
            status_tela="solta";}
        else if(tecla=='B' && status_tela=="solta_vol_igual"){
            funcao_solta_vol();
            status_tela="solta_vol";
            }
        if(tecla=='1' && status_tela=="solta_vol_dif"){
            volume_solta_1=10;
            lcd.locate(12,0);lcd.printf("10");
            }
        if(tecla=='2' && status_tela=="solta_vol_dif"){
            volume_solta_2=20;
            lcd.locate(15,0);lcd.printf("20");
            }
        if(tecla=='3' && status_tela=="solta_vol_dif"){
            volume_solta_3=30;
            lcd.locate(18,0);lcd.printf("30");
            }
        if(tecla=='4' && status_tela=="solta_vol_dif"){
            volume_solta_4=40;
            lcd.locate(12,1);lcd.printf("40");
            }
        if(tecla=='5' && status_tela=="solta_vol_dif"){
            volume_solta_5=50;
            lcd.locate(15,1);lcd.printf("50");
            }
        if(tecla=='6' && status_tela=="solta_vol_dif"){
            volume_solta_6=60;
            lcd.locate(18,1);lcd.printf("60");
            }
        if(tecla=='7' && status_tela=="solta_vol_dif"){
            volume_solta_7=70;
            lcd.locate(12,2);lcd.printf("70");
            }
        if(tecla=='8' && status_tela=="solta_vol_dif"){
            volume_solta_8=80;
            lcd.locate(15,2);lcd.printf("80");
            }
        if(tecla=='9' && status_tela=="solta_vol_dif"){
            volume_solta_9=90;
            lcd.locate(18,2);lcd.printf("90");
            }
        if(tecla=='A' && status_tela=="solta_vol_dif"){
            funcao_solta1();
            if(pos_y_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(dimensao_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            wait(3);
            status_tela="solta"; 
            }
        else if(tecla=='B' && status_tela=="solta_vol_dif"){
            funcao_solta_vol();
            status_tela="solta_vol";
            }
        if(tecla=='A' && status_tela=="solta_pos_y"){
            funcao_solta1();
            if(pos_y_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(dimensao_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            pos_y_solta = 10;
            wait(3);
            status_tela="solta"; 
            }
         else if(tecla=='B' && status_tela=="solta_pos_y"){
            funcao_solta1();
            if(pos_y_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");   
            }
            if(dimensao_solta !=0){
            lcd.locate(18,1);lcd.printf("OK");
            }
            wait(3);
            funcao_solta2();
            if(volume_solta_9 !=0){
            lcd.locate(18,0);lcd.printf("OK");    
            }
            pos_y_solta = 10;
            wait(3);
            status_tela="solta"; 
            }
        
        if(pos_x_solta!=0 && pos_y_solta!=0 && volume_solta_9!=0 && dimensao_solta!=0 && status_tela=="solta"){
           funcao_acomp();
           status_tela="acompanhamento"; 
            };
      }
}