testando

Dependencies:   mbed TextLCD2

main_PM.cpp

Committer:
Hiroball
Date:
2020-06-09
Revision:
93:6c26c27bdd95
Parent:
92:98f159ff780d
Child:
94:0b6ac1cdab84

File content as of revision 93:6c26c27bdd95:

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

//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.15;     //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; 
float normal_z = 100;         //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
float altura_solta = 50;
string est_ihm = "novo";
//pinos usados pelos botoes de fim de curso
InterruptIn fdc_x(PC_10);
InterruptIn fdc_y(PC_11);
InterruptIn fdc_z(PC_12);

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

//pinos do rele, saida digital para acionar o rele se necessario
//dada uma entrada no pino da emergencia ou um comando de acionamento da pipeta
DigitalOut pipeta(PC_5, 1);
DigitalOut rele2(PB_9, 1);

//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 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');}
        
//funcoes de fim de curso por interrupção
void lim_x(){for(int i = 0; i < 4; i++){TextLCD lcd(D4, D5, D6, D7, D8, D9);
            eixox = parado[i];wait(t_motor);
            lcd.cls();lcd.printf("Limite de x atingido");
            lcd.locate(0,2);lcd.printf("Pressione 0 para continuar");
            est_x = 1;}}

void lim_y(){for(int i = 0; i < 4; i++){TextLCD lcd(D4, D5, D6, D7, D8, D9);
            eixoy = parado[i];wait(t_motor);
            lcd.cls();lcd.printf("Limite de y atingido");
            lcd.locate(0,2);lcd.printf("Pressione 0 para continuar");
            est_y = 1;}}

void lim_z(){for(int i = 0; i < 4; i++){TextLCD lcd(D4, D5, D6, D7, D8, D9);
            eixoz = parado[i];wait(t_motor);
            lcd.cls();lcd.printf("Limite de z atingido");
            lcd.locate(0,2);lcd.printf("Pressione 0 para continuar");
            est_z = 1;}}
void reseta_eixo(){est_x = 0;est_y = 0;est_z = 0;}

//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;}}
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;}}
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;}}

void go_to_posicao(float posicao_x, float posicao_y){
    while(coord_x < posicao_x){ //posicionar no local da pega salvo; - se for menor o valor da referencia, gira no sentido horário para aumentar
            mov_x_mais();                
         }  
     while(coord_x > posicao_x){ //posicionar no local da pega salvo; - se for maior o valor da referencia, gira no sentido antihorário para diminuir
        mov_x_menos();
   }
    while(coord_y < posicao_y){ //posicionar no local da pega salvo; - se for menor o valor da referencia, gira no sentido horário para aumentar
        mov_y_mais();                
    }  
    while(coord_y > posicao_y){ //posicionar no local da pega salvo; - se for maior o valor da referencia, gira no sentido antihorário para diminuir
        mov_y_menos();    
   };
}

float calcula_altura(int forma_do_pega, int dimensao, float v, int contador){
    if(forma_do_pega==1){//quad
        return (v-contador)/(dimensao*dimensao)*0.001-4;
   }
   else if(forma_do_pega==2){//red
        return ((v-contador)/(PI*(dimensao/2)*(dimensao/2))*0.001-4);
   };
}

void go_to_z(float posicao_z){
    while(coord_z < posicao_z){ //posicionar no local da pega salvo; - se for menor o valor da referencia, gira no sentido horário para aumentar
                mov_z_mais();                
             }  
     while(coord_z > posicao_z){ //posicionar no local da pega salvo; - se for maior o valor da referencia, gira no sentido antihorário para diminuir
        mov_z_menos();
   }
}

//Função que troca de tela
void troca_tela(bool cond, void telas1(), void telas2(), float valort11, float valort12, float valort21, float valort22, int argumento){
    TextLCD lcd(D4, D5, D6, D7, D8, D9);
    while(cond){
        telas1();
        if(argumento == 1){
            if(valort11 !=0){
                lcd.locate(18,1);
                lcd.printf("OK");
            }
        }
        else if(argumento >= 2){
            if(valort11!=0){
                lcd.locate(18,1);lcd.printf("OK");   
            }
            if(valort12 !=0){
                lcd.locate(18,2);lcd.printf("OK");
            }
        }
        wait(2);
        telas2();
        if(argumento == 3){
              if(valort21!=0){
                lcd.locate(18,1);lcd.printf("OK");   
            } 
        }
        else if(argumento == 4){
            if(valort21!=0){
                lcd.locate(18,1);lcd.printf("OK");   
            }
            if(valort22 !=0){
                lcd.locate(18,2);lcd.printf("OK");
            }
        }
        wait(2);
        tecla = pega_tecla();
        if(tecla!='k'){
            printf("entrou no if");
            cond = 0;
        }  
    };
}
//Funcao que será chamada na interrupcao da queda do botao de emergencia
void emergencia(){TextLCD lcd(D4, D5, D6, D7, D8, D9); 
        rele2 = 0; //desligamento eletrico dos motores   
        eixox = 0b0000; //desligamento do motor do eixo x a partir do zeramento do estado de todas as suas bobinas
        eixoy = 0b0000; //desligamento do motor do eixo x a partir do zeramento do estado de todas as suas bobinas
        eixoz = 0b0000; //desligamento do motor do eixo x a partir do zeramento do estado de todas as suas bobinas
        lcd.cls();lcd.printf("EMERGENCIA ACIONADA"); //aviso da situacao de emergencia da maquina
        lcd.locate(0,1);lcd.printf("Desarme o botao");
        lcd.locate(0,2);lcd.printf("e pressione B para");
        lcd.locate(0,3);lcd.printf("prosseguir");
        wait(1);}

//Funcao de zeramento, chamada assim que a maquina liga e impede que o codigo entre no while(1) enquanto nao for 100% executada.
//Ela aciona os motores ate que o fim de curso seja atingido e pressionado, além de zerar todas as coordenadas dos eixos quando os fins de curso são acionados.
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"; //variavel para guardar o estado atual da tela e situar o programa, juntamente aos botoes apertados, a respeito de onde ele está.
                                  //Neste sentido, ao longo de todo o programa, esta variavel sera usada seguindo a lógica de "se estou na tela x e o usuario apertou o botao
                                  //y, vou para a tela z"
int programa = 0;    //A variável programa remete a que programa salvo o usuário deseja acessar 

//Informações sobre o pega a serem armazenadas no array do programa que está sendo construido pelo usuário
float pos_x_pega[30];
float pos_y_pega [30];
float medida_lado_pega[30];
float volume_pega[30];
int tipo_pega[30];
int nome_programa[30];

//parametros que são de confirmação
int confirmacao_vol_solta[30];
int confirmacao_vol_pega[30];
int confirmacao_pos_solta[30];
int confirmacao_pos_pega[30];

//Informações sobre os solta's a serem armazenadas no array do programa que está sendo construido pelo usuário
float dimensao_solta[30];
float volume_solta_1[30];
float volume_solta_2[30];
float volume_solta_3[30];
float volume_solta_4[30];
float volume_solta_5[30];
float volume_solta_6[30];
float volume_solta_7[30];
float volume_solta_8[30];
float volume_solta_9[30];
float pos_x_solta[30];
float pos_y_solta[30];

//Função que coloca OK nas telas de salvo_agree1()
void ok_agree1(){
    TextLCD lcd(D4, D5, D6, D7, D8, D9);
    if(confirmacao_pos_pega[programa] != 0){ 
         lcd.locate(18,1);lcd.printf("OK");   
    }
    if(confirmacao_pos_solta[programa] != 0){
         lcd.locate(18,2);lcd.printf("OK");
    }
}

//Função que coloca OK nas telas de salvo_agree2()
void ok_agree2(){
    TextLCD lcd(D4, D5, D6, D7, D8, D9);
    if(confirmacao_vol_pega[programa] != 0){ //
         lcd.locate(18,1);lcd.printf("OK");   
    }
    if(confirmacao_vol_solta[programa] != 0){
         lcd.locate(18,2);lcd.printf("OK");
    }
}

//main
int main() {
        interrupcao.fall(&emergencia);
        fdc_x.fall(&lim_x);
        fdc_y.fall(&lim_y);
        fdc_z.fall(&lim_z);
        fdc_x.rise(&reseta_eixo);
        fdc_y.rise(&reseta_eixo);
        fdc_z.rise(&reseta_eixo);    
        int volume; //variaveis que precisam ser construídas de modo global
        int volume_solta;
        int diametro_solta;
        int diametro;
        int comprimento_quad;
        bool continuar;
        int multiplicador = 10;
        TextLCD lcd(D4, D5, D6, D7, D8, D9); //Pinos para ligar o display à NUCLEO
        
        //Tela inicial 
        lcd.printf("Bem-vindo ao Pipemax");
        lcd.locate(3,1);
        lcd.printf("o seu sistema");
        lcd.locate(4,2);
        lcd.printf("automatizado");
        lcd.locate(3,3);
        lcd.printf("de pipetagem");
        wait(3);
        lcd.cls();
        //tela de espera do zeramento do sistema, enquanto ele não for aceito, a maquina nao pode operar
        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");    
             
    //Loop principal
    while(1) {
        printf("\n%s",est_ihm);
        rele2 = 1; 
        tecla = pega_tecla();//Variável que guarda o valor da tecla apertada, é chamada diversas vezes ao longo do código
                             //para atualizar o valor mais rapidamente e sempre que necessário       
        
        //Teste para analisar se os valores estão corretos através do monitor serial
        printf("\n%s",status_tela);
        printf("\n%c",tecla);
        
        //O zeramento só é feito se confirmado apertando a tecla 'A'
        if(tecla == 'A' && status_tela == "zeramento"){
            zeramento();
            status_tela = "inicio";
            funcao_inicio();}

        //Caso nenhum botão esteja apertado, os motores devem permanecer parados
        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();//Atualiza a variável tecla
        
        //Ações para a tela inicial
        if(tecla == '1' && status_tela == "inicio"){
            est_ihm = "pega";
            continuar = 1; //Condição de funcionamento do loop abaixo
            status_tela = "novo";
            troca_tela(continuar, funcao_pega1, funcao_pega2, medida_lado_pega[programa], volume_pega[programa], pos_y_pega[programa],0,3);
        }

        else if(tecla == '2' && status_tela == "inicio"){   //Ações para a tela inicial quando o usuário seleciona programas salvos
            continuar = 1;
            while(continuar){
                funcao_salvo1();
                if(nome_programa[1] != 0){lcd.locate(2,0);lcd.printf("%d",nome_programa[1]);}
                if(nome_programa[2] != 0){lcd.locate(2,1);lcd.printf("%d",nome_programa[2]);}
                if(nome_programa[3] != 0){lcd.locate(2,2);lcd.printf("%d",nome_programa[3]);}
                wait(2);
                funcao_salvo2();
                if(nome_programa[4] != 0){lcd.locate(2,0);lcd.printf("%d",nome_programa[4]);}
                if(nome_programa[5] != 0){lcd.locate(2,1);lcd.printf("%d",nome_programa[5]);}
                if(nome_programa[6] != 0){lcd.locate(2,2);lcd.printf("%d",nome_programa[6]);}
 
                wait(2);
                tecla = pega_tecla();
                if(tecla!='k'){
                    continuar = 0;
                }
            }
            status_tela = "salvo";
            est_ihm = "salvo";}
    if(est_ihm == "salvo"){
    //Ações para a tela de salvamento
    //A variável programa remete a que programa salvo o usuário deseja acessar 
        tecla = pega_tecla();    
        if(tecla =='1' && status_tela =="salvo"){
            continuar = 1;
            status_tela = "salvo_confirmacao";
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            programa = 1; 
            }
        else if(tecla =='2' && status_tela =="salvo"){
            status_tela = "salvo_confirmacao";
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            programa = 2;
            }
        else if(tecla =='3' && status_tela =="salvo"){
            continuar = 1;
            status_tela = "salvo_confirmacao";
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            programa = 3;
            }
        else if(tecla =='4' && status_tela =="salvo"){
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            programa = 4;
            status_tela = "salvo_confirmacao";}
        else if(tecla =='5' && status_tela =="salvo"){
            continuar = 1;
            status_tela = "salvo_confirmacao";
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            programa = 5;
            }
        else if(tecla =='6' && status_tela =="salvo"){
            continuar = 1;
            status_tela = "salvo_confirmacao";
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            programa = 6;
            }
        else if(tecla =='B' && status_tela =="salvo"){
            status_tela = "inicio";
            continuar = 1;
            funcao_inicio();
            }      
        
        tecla = pega_tecla();//Atualiza a variável tecla
        
        //Ações para a tela de salvo_confirmação
        if(tecla =='1' && status_tela =="salvo_confirmacao"){  
            funcao_salvo_agree_pos_aviso(); //Tela de aviso ao usuário que a pega se deslocará na posição aduequada
            wait(3);
            status_tela = "salvo_confirmacao_pega_agree";
            }
        
        //Ações para a tela salvo_confirmação_pega_agree
        if(tecla == 'A' && status_tela =="salvo_confirmacao_pega_agree"){
            while(coord_x < pos_x_pega[programa]){ //posicionar no local da pega salvo; - se for menor o valor da referencia, gira no sentido horário para aumentar
                mov_x_mais();                
            }  
            while(coord_x > pos_x_pega[programa]){ //posicionar no local da pega salvo; - se for maior o valor da referencia, gira no sentido antihorário para diminuir
                mov_x_menos();    
            }  
            while(coord_y < pos_y_solta[programa]){ //posicionar no local da pega salvo; - se for menor o valor da referencia, gira no sentido horário para aumentar
                mov_y_mais();                
            }  
            while(coord_y > pos_y_solta[programa]){ //posicionar no local da pega salvo; - se for maior o valor da referencia, gira no sentido antihorário para diminuir
                mov_y_menos();    
            }      
            funcao_salvo_agree_pos_certo(); //Tela para o usuário confirmar se é essa a posição de fato da pega 
            status_tela="salvo_pos_certo_pega" ;}
        else if(tecla == 'B' && status_tela=="salvo_confirmacao_pega_agree"){
            continuar = 1;
            status_tela = "salvo_confirmacao";
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            programa = 1;
            }
        else if(tecla =='2' && status_tela =="salvo_confirmacao"){
             continuar = 1;
             status_tela = "salvo_confirmacao_solta_agree";
             funcao_salvo_agree_solta_aviso();   //posicionar no local de solta para confirmação; (motor -> programa.pos_x_solta e motor -> programa.pos_y_solta)
             wait(3);
            }
        
        //Ações para a tela confirmação_solta_agree
        if(tecla == 'A' && status_tela =="salvo_confirmacao_solta_agree"){  
             while(coord_x < pos_x_solta[programa]){ //posicionar no local da pega salvo; - se for menor o valor da referencia, gira no sentido horário para aumentar
                mov_x_mais();                
             }  
             while(coord_x > pos_x_solta[programa]){ //posicionar no local da pega salvo; - se for maior o valor da referencia, gira no sentido antihorário para diminuir
                mov_x_menos();    
             }   
             while(coord_y < pos_y_solta[programa]){ //posicionar no local da pega salvo; - se for menor o valor da referencia, gira no sentido horário para aumentar
                mov_y_mais();                
             }  
             while(coord_y > pos_y_solta[programa]){ //posicionar no local da pega salvo; - se for maior o valor da referencia, gira no sentido antihorário para diminuir
                mov_y_menos();    
             }     
             funcao_salvo_agree_pos_certo();
             status_tela = "salvo_pos_certo_solta";}            
        else if(tecla == 'B' && status_tela=="salvo_confirmacao_solta_agree"){
            funcao_salvo1();
            if(nome_programa[1] != 0){lcd.locate(2,0);lcd.printf("%d",nome_programa[1]);}
            if(nome_programa[2] != 0){lcd.locate(2,1);lcd.printf("%d",nome_programa[2]);}
            if(nome_programa[3] != 0){lcd.locate(2,2);lcd.printf("%d",nome_programa[3]);}
            wait(1);
            funcao_salvo2();
            if(nome_programa[4] != 0){lcd.locate(2,0);lcd.printf("%d",nome_programa[4]);}
            if(nome_programa[5] != 0){lcd.locate(2,1);lcd.printf("%d",nome_programa[5]);}
            if(nome_programa[6] != 0){lcd.locate(2,2);lcd.printf("%d",nome_programa[6]);}
 
            programa = 1;
            status_tela = "salvo";}     
        else if(tecla =='3' && status_tela =="salvo_confirmacao"){
             funcao_salvo_agree_pega_vol();   //Função que imprime na tela do usuário que ele deve dar entreda no volume
             continuar = 1;
             multiplicador = 10;
             lcd.locate(6,1); 
            while(continuar){ // Pega o valor imputado pelo usuário
                printf("\n%c",pega_tecla()); 
                tecla = pega_tecla();
                wait(t_teclado);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    volume = multiplicador*volume + ((int)tecla-48); //  
                    lcd.printf("%c", tecla);
                }
                else if(tecla == 'A'){
                    volume_pega[programa]=volume;  //recebe o valor que o usuário colocou no volume.
                    lcd.locate(0,2);
                    printf("Volume inputado!");
                    continuar = 0;
                    confirmacao_vol_pega[programa]=1;
                    wait(1);
                }
            }                                 
            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)
             lcd.locate(1,0);lcd.printf("%4.1f",volume_solta_1[programa]);
             lcd.locate(8,0);lcd.printf("%4.1f",volume_solta_2[programa]);
             lcd.locate(16,0);lcd.printf("%4.1f",volume_solta_3[programa]);
             
             lcd.locate(1,1);lcd.printf("%4.1f",volume_solta_4[programa]);
             lcd.locate(8,1);lcd.printf("%4.1f",volume_solta_5[programa]);
             lcd.locate(16,1);lcd.printf("%4.1f",volume_solta_6[programa]);
             
             lcd.locate(1,2);lcd.printf("%4.1f",volume_solta_7[programa]);
             lcd.locate(8,2);lcd.printf("%4.1f",volume_solta_8[programa]);
             lcd.locate(16,2);lcd.printf("%4.1f",volume_solta_9[programa]);                     
             status_tela="salvo_conf_vol_solta";}
        else if(tecla =='B' && status_tela =="salvo_confirmacao"){ 
            funcao_salvo1();
            if(nome_programa[1] != 0){lcd.locate(2,0);lcd.printf("%d",nome_programa[1]);}
            if(nome_programa[2] != 0){lcd.locate(2,1);lcd.printf("%d",nome_programa[2]);}
            if(nome_programa[3] != 0){lcd.locate(2,2);lcd.printf("%d",nome_programa[3]);}

            wait(1);
            funcao_salvo2();
            if(nome_programa[4] != 0){lcd.locate(2,0);lcd.printf("%d",nome_programa[4]);}
            if(nome_programa[5] != 0){lcd.locate(2,1);lcd.printf("%d",nome_programa[5]);}
            if(nome_programa[6] != 0){lcd.locate(2,2);lcd.printf("%d",nome_programa[6]);}
 
            programa = 1;
            status_tela = "salvo";}   
        
        tecla = pega_tecla(); //Atualiza a variável tecla
        
        //Ações para a tela de salvo_pos_certo_pega
        if(tecla =='1' && status_tela =="salvo_pos_certo_pega"){
            confirmacao_pos_pega[programa]=1;
            status_tela = "salvo_confirmacao";
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            }//salva essa posição como correta
        else if(tecla =='2' && status_tela =="salvo_pos_certo_pega"){ //Caso o usuário queria ajustar o posicionamento
            lcd.cls();
            funcao_pega_pos_x();
            lcd.printf("Ponha a pega em  x/y");
            lcd.locate(0,3);
            lcd.printf("      B-Voltar      ");
            continuar = 1; //Inicia o loop de posicionamento
            while(continuar){
                 tecla = pega_tecla(); // pegla a tecla apertada pelo usuário para sair do loop
                 if(x_menos == 0){mov_x_menos(); // Movimenta o eixo conforme o botão selecionado
                    lcd.cls();      
                    lcd.printf("X: %4.1f", coord_x);}  //Printa para o usuário isso
                 else if(x_mais == 0){mov_x_mais();   // Movimenta o eixo conforme o botão selecionado
                    lcd.cls();
                    lcd.printf("X: %4.1f", coord_x);}  //Printa para o usuário isso
                else if(y_menos == 0){mov_y_menos();  //Movimenta o eixo conforme o botão selecionado
                    lcd.cls();      
                    lcd.printf("Y: %4.1f", coord_y);} //Printa para o usuário isso
                else if(y_mais == 0){mov_y_mais(); // Movimenta o eixo conforme o botão selecionado
                    lcd.cls();      
                    lcd.printf("Y: %4.1f", coord_y);} //Printa para o usuário isso
                if(tecla=='A'){
                    pos_x_pega[programa] = coord_x;
                    pos_y_pega[programa] = coord_y;
                    lcd.cls();
                    lcd.printf("Posicao de x e y salva!");
                    lcd.locate(0,1);
                    lcd.printf("Posicao X: %4.1f", coord_x);
                    lcd.locate(0,2);
                    lcd.printf("Posicao Y: %4.1f", coord_y);
                    status_tela = "salvo_confirmacao";
                    confirmacao_pos_pega[programa]=1;
                    troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
                }
            }
        }
        else if(tecla =='B' && status_tela =="salvo_pos_certo_pega"){             
            status_tela = "salvo_confirmacao";
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
        }  
        
        
        //Ações para a tela salvo_conf_vol_pega
        if(tecla =='A' && status_tela =="salvo_conf_vol_pega"){
            confirmacao_vol_pega[programa]=1;
            status_tela = "salvo_confirmacao";
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            }//salva essa posição como correta
        else if(tecla =='B' && status_tela =="salvo_conf_vol_pega"){             
            status_tela = "salvo_confirmacao";
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            }  
        
        //Ações para a tela de salvo_pos_certo_solta
        if(tecla =='1' && status_tela =="salvo_pos_certo_"){
            confirmacao_vol_solta[programa]=1; //Tag que indica que o usuário confirmou a posição salva
            status_tela = "salvo_confirmacao";
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
            }//salva essa posição como correta
        else if(tecla =='2' && status_tela =="salvo_pos_certo_solta"){
            lcd.cls();
            funcao_solta_pos_x();
            lcd.printf("Ponha a pega em x/y");
            lcd.locate(0,3);
            lcd.printf("      B-Voltar      ");
            continuar = 1; //Inicia o loop de posicionamento
            while(continuar){
                 tecla = pega_tecla(); // pegla a tecla apertada pelo usuário para sair do loop
                 if(x_menos == 0){mov_x_menos(); // Movimenta o eixo conforme o botão selecionado
                    lcd.cls();      
                    lcd.printf("X: %4.1f", coord_x);}  //Printa para o usuário isso
                 else if(x_mais == 0){mov_x_mais();   // Movimenta o eixo conforme o botão selecionado
                    lcd.cls();
                    lcd.printf("X: %4.1f", coord_x);}  //Printa para o usuário isso
                else if(y_menos == 0){mov_y_menos();  //Movimenta o eixo conforme o botão selecionado
                    lcd.cls();      
                    lcd.printf("Y: %4.1f", coord_y);} //Printa para o usuário isso
                else if(y_mais == 0){mov_y_mais(); // Movimenta o eixo conforme o botão selecionado
                    lcd.cls();      
                    lcd.printf("Y: %4.1f", coord_y);} //Printa para o usuário isso
                if(tecla=='A'){
                    pos_x_solta[programa] = coord_x;
                    pos_y_solta[programa] = coord_y;
                    lcd.cls();
                    lcd.printf("Posicao de x e y salva!");
                    lcd.locate(0,1);
                    lcd.printf("Posicao X: %4.1f", coord_x);
                    lcd.locate(0,2);
                    lcd.printf("Posicao Y: %4.1f", coord_y);
                    status_tela = "salvo_confirmacao";
                    confirmacao_pos_solta[programa]=1; //Flag que mostra que o usuário setou a posição conforme ele queria e está confirmado.
                    troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);
                    continuar = 0;
                }
            }
        }
        else if(tecla =='B' && status_tela =="salvo_pos_certo_solta"){             
            status_tela = "salvo_confirmacao";
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);}      
        
        //Ações para a tela salvo_conf_vol_solta
        if(tecla =='A' && status_tela =="salvo_conf_vol_solta"){
            confirmacao_vol_solta[programa]=1; 
            status_tela = "salvo_confirmacao";   
            continuar = 1;
            troca_tela(continuar, funcao_salvo_agree1, funcao_salvo_agree2, confirmacao_pos_pega[programa], confirmacao_pos_solta[programa],confirmacao_vol_pega[programa],confirmacao_vol_solta[programa],4);     
            }//salva essa posição como correta
        else if(tecla =='B' && status_tela =="salvo_conf_vol_solta"){
            funcao_salvo_vol_solta_modifica();
            wait(5);
            funcao_salvo_agree_solta_vol();
             lcd.locate(1,0);lcd.printf("%d",volume_solta_1[programa]);
             lcd.locate(8,0);lcd.printf("%d",volume_solta_2[programa]);
             lcd.locate(16,0);lcd.printf("%d",volume_solta_3[programa]);
             
             lcd.locate(1,1);lcd.printf("%d",volume_solta_4[programa]);
             lcd.locate(8,1);lcd.printf("%d",volume_solta_5[programa]);
             lcd.locate(16,1);lcd.printf("%d",volume_solta_6[programa]);
             
             lcd.locate(1,2);lcd.printf("%d",volume_solta_7[programa]);
             lcd.locate(8,2);lcd.printf("%d",volume_solta_8[programa]);
             lcd.locate(16,2);lcd.printf("%d",volume_solta_9[programa]);
             bool cleber = 1;
            while(cleber){
                tecla = pega_tecla();
                if(tecla != 'A'){
                if(tecla == '1' && status_tela=="salvo_conf_vol_solta"){
                     printf("entrou if 1 salvo_conf");
                     volume = 0;
                     continuar = 1;
                     lcd.locate(3,0); 
                     lcd.printf("\r");
                     lcd.locate(3,0);
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            if(volume<100)
                            {
                                volume = multiplicador*volume + ((int)tecla-48);//((int)tecla-48) é o valor real da tecla pressionada em inteiro    
                                lcd.printf("%c", tecla);
                            }
                        }
                        else if(tecla == 'A'){
                            volume_solta_1[programa]=volume;
                        }
                    }
                }
                else if(tecla=='2' && status_tela=="salvo_conf_vol_solta"){
                     volume = 0;
                     continuar = 1;
                     multiplicador = 10;
                     lcd.locate(8,0); 
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            volume = multiplicador*volume + ((int)tecla-48);    
                            lcd.printf("%c", tecla);
                        }
                        else if(tecla == 'A'){
                            volume_solta_2[programa]=volume;
                        }
                    }
                }
                else if(tecla=='3' && status_tela=="salvo_conf_vol_solta"){
                     volume = 0;
                     continuar = 1;
                     multiplicador = 10;
                     lcd.locate(13,0); 
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            volume = multiplicador*volume + ((int)tecla-48);    
                            lcd.printf("%c", tecla);
                        }
                        else if(tecla == 'A'){
                            volume_solta_3[programa]=volume;
                        }
                    }
                }
                else if(tecla=='4' && status_tela=="salvo_conf_vol_solta"){
                     volume = 0;
                     continuar = 1;
                     multiplicador = 10;
                     lcd.locate(3,1); 
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            volume = multiplicador*volume + ((int)tecla-48);    
                            lcd.printf("%c", tecla);
                        }
                        else if(tecla == 'A'){
                            volume_solta_4[programa]=volume;
                        }
                    }
                }
                else if(tecla=='5' && status_tela=="salvo_conf_vol_solta"){
                     volume = 0;
                     continuar = 1;
                     multiplicador = 10;
                     lcd.locate(8,1); 
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            volume = multiplicador*volume + ((int)tecla-48);    
                            lcd.printf("%c", tecla);
                        }
                        else if(tecla == 'A'){
                            volume_solta_5[programa]=volume;
                        }
                    }
                }
                else if(tecla=='6' && status_tela=="salvo_conf_vol_solta"){
                     volume = 0;
                     continuar = 1;
                     multiplicador = 10;
                     lcd.locate(13,1); 
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            volume = multiplicador*volume + ((int)tecla-48);    
                            lcd.printf("%c", tecla);}
                        else if(tecla == 'A'){
                             volume_solta_6[programa]=volume;
                            }
                        }
                    }
                else if(tecla=='7' && status_tela=="salvo_conf_vol_solta"){
                     volume = 0;
                     continuar = 1;
                     multiplicador = 10;
                     lcd.locate(3,2); 
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            volume = multiplicador*volume + ((int)tecla-48);    
                            lcd.printf("%c", tecla);
                        }
                        else if(tecla == 'A'){
                            volume_solta_7[programa]=volume;
                        }
                    }
                }
                else if(tecla=='8' && status_tela=="salvo_conf_vol_solta"){
                     volume = 0;
                     continuar = 1;
                     multiplicador = 10;
                     lcd.locate(8,2); 
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            volume = multiplicador*volume + ((int)tecla-48);    
                            lcd.printf("%c", tecla);
                        }
                        else if(tecla == 'A'){
                            volume_solta_8[programa]=volume;
                        }
                    }
                }
                else if(tecla=='9' && status_tela=="salvo_conf_vol_solta"){
                     volume = 0;
                     continuar = 1;
                     multiplicador = 10;
                     lcd.locate(13,2); 
                    while(continuar){ // Pega o valor imputado pelo usuário
                        printf("\n%c",pega_tecla()); 
                        tecla = pega_tecla();
                        wait(t_teclado);
                        if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                            volume = multiplicador*volume + ((int)tecla-48);    
                            lcd.printf("%c", tecla);
                        }
                        else if(tecla == 'A'){
                            volume_solta_9[programa]=volume;
                        }
                    }
                }
                }//fim do if (tecla !=A)
                else if(tecla == 'A'){cleber = 0;}
                }//fim do while(cleber)
                confirmacao_vol_solta[programa]=1;}//fim do else if(tecla =='B' && status_tela =="salvo_conf_vol_solta")
        tecla = pega_tecla(); 

        if(confirmacao_vol_solta[programa]==1 && confirmacao_vol_pega[programa]==1 && confirmacao_pos_pega[programa]==1 && confirmacao_pos_solta[programa]==1){
            funcao_acomp();
            status_tela="acompanhamento";
            est_ihm = "exec";}
        } //fim if(est_ihm)
        
        if(est_ihm == "pega"){
        //Ações para a tela novo
        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(); // Função que permite a entreda do valor de volume pelo usuário
            status_tela = "volume";
            continuar = 1;
            lcd.locate(6,1);
            while(continuar){
                printf("\n%c",pega_tecla()); 
                tecla = pega_tecla();
                wait(t_teclado);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    volume = multiplicador*volume + ((int)tecla-48);    
                    lcd.printf("%c", tecla);
                }
                else if(tecla == 'A'){
                    volume_pega[programa] = volume;
                    lcd.locate(0,2);
                    printf("Volume inputado!");
                    continuar = 0;
                    wait(1);
                }
                else if(tecla=='B'){
                    funcao_pega1();
                    if(medida_lado_pega !=0){
                        lcd.locate(18,1);lcd.printf("OK");   
                    }
                    if(volume_pega !=0){
                        lcd.locate(18,2);lcd.printf("OK");
                    }
                    wait(1);
                    funcao_pega2();
                    if(pos_y_pega[programa] !=0){
                        lcd.locate(18,1);lcd.printf("OK");    
                    }
                    status_tela = "novo";
                    continuar = 0;
                }
            }   
        }
        else if(tecla == '3' && status_tela == "novo"){
            funcao_pega_pos_x();
            status_tela = "pos_x";
            continuar = 1;
             while(continuar){
                    tecla = pega_tecla();
                 if(x_menos == 0){mov_x_menos();
                    lcd.cls();      
                    lcd.printf("X: %4.1f", coord_x);}
                 else if(x_mais == 0){mov_x_mais();
                    lcd.cls();
                    lcd.printf("X: %4.1f", coord_x);}
                if(tecla=='A'){
                    pos_x_pega[programa] = coord_x;
                    continuar = 0;
                    printf("Posicao de y salva!");
                    printf("Posicao X: %4.1f", coord_x);}
            }
            }
        else if(tecla == 'B' && status_tela == "novo"){
            funcao_inicio();
            status_tela = "inicio";}
        else if(tecla == '1' && status_tela == "salvo"){
            funcao_salvo_agree1();
            ok_agree1();
            status_tela = "confirmacao";}
        else if(tecla =='2' && status_tela == "salvo"){
            funcao_salvo_agree1();
            ok_agree1();
            status_tela = "confirmacao";}
        else if(tecla =='B' && status_tela == "salvo"){
            funcao_inicio();
            status_tela = "inicio";}
            
        wait(t_teclado);
        tecla = pega_tecla();    
        
        //Ações para a tela forma (para definir o formato do recipiente de pega)
        if(tecla == '1' && status_tela == "forma"){
            funcao_pega_forma_quad();
            tipo_pega[programa] =1;
            tecla = pega_tecla();
            wait(t_teclado);
            status_tela ="forma_quad";
            continuar = 1;
            comprimento_quad = 0;
            lcd.locate(0,2);
            while(continuar){
                printf("\n%c",pega_tecla()); 
                tecla = pega_tecla();
                wait(t_teclado);
                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;
                    medida_lado_pega[programa] = comprimento_quad;
                    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[programa] = 2;
            tecla = pega_tecla();
            wait(t_teclado);
            continuar = 1;
            diametro = 0;
            status_tela = "forma_red";
            lcd.locate(0,2);
            while(continuar){
                tecla = pega_tecla();
                wait(t_teclado);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    diametro = multiplicador*diametro + ((int)tecla - 48);
                    lcd.printf("%c",tecla);
                }
                else if(tecla == 'A'){
                    continuar = 0;
                    medida_lado_pega[programa] = diametro;
                    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"){
            status_tela = "novo";
            continuar = 1;
            troca_tela(continuar, funcao_pega1, funcao_pega2, medida_lado_pega[programa], volume_pega[programa], pos_y_pega[programa],0,3);
        }
        
        tecla = pega_tecla();
        
        //Ações para a tela forma_quad, para detalhes sobre o formato quadrado
        if(tecla == 'A' && status_tela == "forma_quad"){
            status_tela ="novo";
            continuar = 1;
            troca_tela(continuar, funcao_pega1, funcao_pega2, medida_lado_pega[programa], volume_pega[programa], pos_y_pega[programa],0,3);
            }
        else if(tecla == 'B' && status_tela == "forma_quad"){
            funcao_pega_forma();
            status_tela = "forma";}
        else if(tecla == 'A' && status_tela == "forma_red"){
            continuar = 1;
            status_tela ="novo";
            troca_tela(continuar, funcao_pega1, funcao_pega2, medida_lado_pega[programa], volume_pega[programa], pos_y_pega[programa],0,3);}
        else if(tecla == 'B' && status_tela == "forma_red"){
            funcao_pega_forma();
            status_tela = "forma";}
        else if(tecla == 'A' && status_tela == "volume"){
            volume_pega[programa] = 12;
            status_tela ="novo";
            continuar = 1;
            troca_tela(continuar, funcao_pega1, funcao_pega2, medida_lado_pega[programa], volume_pega[programa], pos_y_pega[programa],0,3);}
        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
            status_tela = "pos_y";
            continuar = 1;
            wait(1);
             while(continuar){
                    tecla = pega_tecla();
                 if(y_menos == 0){mov_y_menos();
                    lcd.cls();      
                    lcd.printf("Y: %4.1f", coord_y);}
                 else if(y_mais == 0){mov_y_mais();
                    lcd.cls();
                    lcd.printf("Y: %4.1f", coord_y);}
                if(tecla=='A'){
                    pos_y_pega[programa] = coord_y;
                    printf("Posicao de y salva!");
                    printf("Posicao Y: %4.1f", coord_y);
                    continuar = 0;}
            }
            }
        else if(tecla == 'B' && status_tela == "pos_x"){ ///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            status_tela = "novo";
            continuar = 1;
            troca_tela(continuar, funcao_pega1, funcao_pega2, medida_lado_pega[programa], volume_pega[programa], pos_y_pega[programa],0,3);}
            
        tecla = pega_tecla();
//        wait(t_teclado);
        //passando direto
        
        //Ações para a tela pos_y
        if(tecla == 'A' && status_tela == "pos_y"){
            status_tela ="novo";
            continuar = 1;
            troca_tela(continuar, funcao_pega1, funcao_pega2, medida_lado_pega[programa], volume_pega[programa], pos_y_pega[programa],0,3);
            }
            
        else if(tecla == 'B' && status_tela == "pos_y"){
            funcao_pega_pos_x();
            status_tela = "pos_x";
            continuar = 1;
             while(continuar){
                    tecla = pega_tecla();
                 if(x_menos == 0){mov_x_menos();
                    lcd.cls();      
                    lcd.printf("X: %4.1f", coord_x);}
                 else if(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);
                }
            }
            }
            
         if(pos_x_pega[programa]!=0 && pos_y_pega[programa]!=0 && medida_lado_pega[programa]!=0 && volume_pega[programa] !=0 && tipo_pega[programa]!=0 && status_tela == "novo"){
            status_tela="solta";
            est_ihm = "solta";
            continuar = 1;
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);}
                    }//fim if(est_ihm == "pega")
                    
        if(est_ihm == "solta"){
        //Ações para a tela "solta", para definir informações sobre os solta's
        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(t_teclado);
                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";
                    continuar = 1;
                    troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
                    }
                }
        }

        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(t_teclado);
                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 = 1;
                    troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
                }
            }
        }
        else if(tecla == '3' && status_tela == "solta"){
            funcao_solta_pos_x();
            status_tela="solta_pos_x";
            continuar = 1;
            while(continuar){
                    tecla = pega_tecla();
                 if(x_menos == 0){mov_x_menos();
                    lcd.cls();      
                    lcd.printf("X: %4.1f", coord_x);}
                 else if(x_mais == 0){mov_x_mais();
                    lcd.cls();
                    lcd.printf("X: %4.1f", coord_x);}
                if(tecla=='A'){
                    pos_x_solta[programa] = coord_x;
                    continuar = 0;
                    printf("Posicao de x salva!");
                    printf("Posicao X: %4.1f", coord_x);
                }
            }
        }   
        else if(tecla == 'B' && status_tela == "solta"){
            continuar = 1;
            status_tela="novo";
            troca_tela(continuar, funcao_pega1, funcao_pega2, medida_lado_pega[programa],volume_pega[programa], pos_y_pega[programa],0,3);
            }
        
        tecla=pega_tecla();
        //Ações para a tela solta_dimensao, para definir informações sobre a dimensão do solta
        if(tecla=='A' && status_tela=="solta_dimensao"){
            dimensao_solta[programa] = 10;
            continuar = 1;
            status_tela="solta";   
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
            }
        else if(tecla=='B' && status_tela=="solta_dimensao"){
            continuar = 1;
            status_tela="solta"; 
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);    
            }
        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"){
            status_tela="solta";  
            continuar = 1;
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
            }
        if(tecla=='A' && status_tela=="solta_pos_x"){
            funcao_solta_pos_y();
            status_tela="solta_pos_y";
            continuar = 1;
            wait(1);
             while(continuar){
                    tecla = pega_tecla();
                 if(y_menos == 0){mov_y_menos();
                    lcd.cls();      
                    lcd.printf("Y: %4.1f", coord_y);}
                 else if(y_mais == 0){mov_y_mais();
                    lcd.cls();
                    lcd.printf("Y: %4.1f", coord_y);}
                if(tecla=='A'){
                    pos_y_solta[programa] = coord_y;
                    printf("Posicao de y salva!");
                    printf("Posicao Y: %4.1f", coord_y);
                    continuar = 0;}
            }
            }
        else if(tecla=='B' && status_tela=="solta_pos_x"){
            status_tela="solta";  
            continuar = 1;
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
            }  
            
        tecla=pega_tecla();
        if(tecla=='A' && status_tela=="solta_vol_igual"){
            volume_solta_1[programa]=10;
            volume_solta_2[programa]=10;
            volume_solta_3[programa]=10;
            volume_solta_4[programa]=10;
            volume_solta_5[programa]=10;
            volume_solta_6[programa]=10;
            volume_solta_7[programa]=10;
            volume_solta_8[programa]=10;
            volume_solta_9[programa]=10;
            
            status_tela="solta";
            continuar = 1;
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
            }
        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[programa]=10;
            lcd.locate(12,0);lcd.printf("20");
            }
        if(tecla=='2' && status_tela=="solta_vol_dif"){
            volume_solta_2[programa]=20;
            lcd.locate(15,0);lcd.printf("20");
            }
        if(tecla=='3' && status_tela=="solta_vol_dif"){
            volume_solta_3[programa]=30;
            lcd.locate(18,0);lcd.printf("30");
            }
        if(tecla=='4' && status_tela=="solta_vol_dif"){
            volume_solta_4[programa]=40;
            lcd.locate(12,1);lcd.printf("40");
            }
        if(tecla=='5' && status_tela=="solta_vol_dif"){
            volume_solta_5[programa]=50;
            lcd.locate(15,1);lcd.printf("50");
            }
        if(tecla=='6' && status_tela=="solta_vol_dif"){
            volume_solta_6[programa]=60;
            lcd.locate(18,1);lcd.printf("60");
            }
        if(tecla=='7' && status_tela=="solta_vol_dif"){
            volume_solta_7[programa]=70;
            lcd.locate(12,2);lcd.printf("70");
            }
        if(tecla=='8' && status_tela=="solta_vol_dif"){
            volume_solta_8[programa]=80;
            lcd.locate(15,2);lcd.printf("80");
            }
        if(tecla=='9' && status_tela=="solta_vol_dif"){
            volume_solta_9[programa]=90;
            lcd.locate(18,2);lcd.printf("90");
            }
        if(tecla=='A' && status_tela=="solta_vol_dif"){
            status_tela="solta";
            continuar = 1;
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3); 
            }
        else if(tecla=='B' && status_tela=="solta_vol_dif"){
            funcao_solta_vol();
            status_tela="solta_vol";
            }
        if(tecla=='A' && status_tela=="solta_pos_y"){
            status_tela="solta"; 
            continuar = 1;
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
            }
         else if(tecla=='B' && status_tela=="solta_pos_y"){
            status_tela="solta";
            continuar = 1;
            troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
            }
        //Ações para a tela acompanhamento (execução do programa)
        //MAtriz 3x3 (6x6cm)
        int nome;
        if(pos_x_solta[programa]!=0 && pos_y_solta[programa]!=0 && volume_solta_9[programa]!=0 && dimensao_solta[programa]!=0 && status_tela == "solta"){
           printf("rotina exec");
           funcao_nome_prog();
           wait(1);
           status_tela="nome_programa";}
            if(tecla=='B' && status_tela=="nome_programa"){                
                status_tela="solta";
                continuar = 1;
                troca_tela(continuar, funcao_solta1, funcao_solta2, dimensao_solta[programa],volume_solta_9[programa], pos_y_solta[programa],0,3);
               } 
           else if(tecla=='A' && status_tela=="nome_programa"){
                 //!!!!!!!!!!!!!! colocar o códgio de pegar o valor do usuário
                nome=1;
                continuar=1;
                while(continuar){
                tecla = pega_tecla();
                wait(t_teclado);
                if(tecla!= 'A' && tecla!='B' && tecla!= 'k'){
                    nome = multiplicador*nome + ((int)tecla - 48);
                    lcd.cls();
                    lcd.printf("%d",nome);
                    lcd.locate(0,3);
                    lcd.printf("A-Confirmar B-Volta");
                }
            else if(tecla == 'A'){
                printf("nome inserido");
                printf("nome: %d", nome);
                funcao_acomp();
                est_ihm = "exec";
                status_tela="acompanhamento";
                continuar = 0;
                nome_programa[programa]=nome;
                confirmacao_pos_pega[programa]=0;
                confirmacao_pos_solta[programa]=0;
                confirmacao_vol_pega[programa]=0;
                confirmacao_pos_solta[programa]=0;
            }
            }}
            }//fim if(est_ihm == "solta")
            
        if(est_ihm == "exec"){            
            if(confirmacao_pos_pega[programa]==0 && confirmacao_pos_solta[programa]==0 && confirmacao_vol_pega[programa]==0 && confirmacao_pos_solta[programa]==0 && status_tela == "acompanhamento"){           
            printf("Entrou em execução");
            int cont_pipeta = 0;
            float altura;
           
            float pos1[2] = {pos_x_solta[programa], pos_y_solta[programa]} ;
            float pos2[2] = {pos_x_solta[programa]+2, pos_y_solta[programa]} ;
            float pos3[2] = {pos_x_solta[programa]+4, pos_y_solta[programa]} ;
            float pos4[2] = {pos_x_solta[programa], pos_y_solta[programa]+2} ;
            float pos5[2] = {pos_x_solta[programa]+2, pos_y_solta[programa]+2} ;
            float pos6[2] = {pos_x_solta[programa]+4, pos_y_solta[programa]+2} ;
            float pos7[2] = {pos_x_solta[programa], pos_y_solta[programa]+4} ;
            float pos8[2] = {pos_x_solta[programa]+2, pos_y_solta[programa]+4} ;
            float pos9[2] = {pos_x_solta[programa]+4, pos_y_solta[programa]+4};

            

          //Calcular a altura do pega com base no tipo do pega
           for(int i; i<volume_solta_1[programa];i++){
                printf("Entrou na rotina pino 1!!");
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                wait(1);
                go_to_z(altura);
                wait(1);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                wait(1);
                go_to_z(normal_z);
                wait(1);
                go_to_posicao(pos1[0],pos1[1]);
                wait(1);
                go_to_z(altura_solta);
                wait(1);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                wait(1);
                go_to_z(normal_z);
                wait(1);
                cont_pipeta+=1;
           }
            for(int i; i<volume_solta_2[programa];i++){
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                wait(1);
                go_to_z(altura);
                wait(1);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                wait(1);
                go_to_z(normal_z);
                wait(1);
                go_to_posicao(pos2[0],pos2[1]);
                wait(1);
                go_to_z(altura_solta);
                wait(1);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                wait(1);
                go_to_z(normal_z);
                wait(1);
                cont_pipeta+=1;
           }
            for(int i; i<volume_solta_3[programa];i++){
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                wait(1);
                go_to_z(altura);
                wait(1);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                wait(1);
                go_to_z(normal_z);
                wait(1);
                go_to_posicao(pos3[0],pos3[1]);
                wait(1);
                go_to_z(altura_solta);
                wait(1);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                wait(1);
                go_to_z(normal_z);
                wait(1);
                cont_pipeta+=1;
            
           }
            for(int i; i<volume_solta_4[programa];i++){
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                go_to_z(altura);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                go_to_posicao(pos4[0],pos4[1]);
                go_to_z(altura_solta);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                cont_pipeta+=1;
           }
            for(int i; i<volume_solta_5[programa];i++){
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                go_to_z(altura);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                go_to_posicao(pos5[0],pos5[1]);
                go_to_z(altura_solta);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                cont_pipeta+=1;
            
           }
            for(int i; i<volume_solta_6[programa];i++){
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                go_to_z(altura);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                go_to_posicao(pos6[0],pos6[1]);
                go_to_z(altura_solta);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                cont_pipeta+=1;
            
           }
            for(int i; i<volume_solta_7[programa];i++){
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                go_to_z(altura);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                go_to_posicao(pos7[0],pos7[1]);
                go_to_z(altura_solta);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                cont_pipeta+=1;
            
           }
            for(int i; i<volume_solta_8[programa];i++){
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                go_to_z(altura);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                go_to_posicao(pos8[0],pos8[1]);
                go_to_z(altura_solta);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                cont_pipeta+=1;
           }
            for(int i; i<volume_solta_9[programa];i++){
                altura = calcula_altura(tipo_pega[programa],medida_lado_pega[programa], volume_pega[programa], cont_pipeta);
                go_to_posicao(pos_x_pega[programa], pos_y_pega[programa]);
                go_to_z(altura);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                go_to_posicao(pos9[0],pos9[1]);
                go_to_z(altura_solta);
                pipeta = 0;
                wait(1);
                pipeta = 1;
                go_to_z(normal_z);
                cont_pipeta+=1;
           }}

        }//fim do else if do meio do codigo
        }//fim do if(est_ihm == "exec")
      }//fim do while(1)
  //fim do int main