Projeto Mecatrônico
/
ProjetoMecatronico
testando
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