Juliano Nehme Nassar
/
Projeto_Mecatronico
Final code for Klaus, the glue applying machine.
Diff: main.cpp
- Revision:
- 3:f183d2ffae11
- Parent:
- 2:ad0b044d0a10
--- a/main.cpp Sat Dec 04 11:31:07 2010 +0000 +++ b/main.cpp Fri Jun 14 00:25:17 2019 +0000 @@ -1,10 +1,1930 @@ -// Hello World! for the TextLCD - #include "mbed.h" #include "TextLCD.h" +#include "string" -TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7 +//-----------Botões Anna---------- +// ------------------------Portas X ---------------------------- +DigitalOut dirX(PC_10); +DigitalOut stepX(PC_12); +DigitalOut enableX(PA_14); + + +// ------------------------Portas Y ---------------------------- +DigitalOut dirY(A1); +DigitalOut stepY(A0); +DigitalOut enableY(PC_3); + +// ------------------------Portas Z ---------------------------- +DigitalOut dirZ(PB_7); +DigitalOut stepZ(PC_13); +DigitalOut enableZ(A2); + +// ------------------------Portas IHM -------------------------- +/*DigitalIn mais(A5); +DigitalIn menos(A4); +InterruptIn X(PA_13); +InterruptIn Z(PA_15);*/ +/*InterruptIn enter(D9); +InterruptIn X(D10); +InterruptIn Y(D11); +InterruptIn Z(D12); +DigitalIn mais(D13); +DigitalIn menos(D14);*/ +InterruptIn enter(A4); +InterruptIn X(PC_2); +InterruptIn Y(D11); +InterruptIn Z(D12); + +InterruptIn cancelar(PC_4); + +DigitalIn mais(D13); +DigitalIn menos(A3); + +DigitalOut LedX(PC_0); +DigitalOut LedY(PC_11); +DigitalOut LedZ(PC_5); + +DigitalOut Valvula_embolo(PC_8); +DigitalOut Valvula_ponta(PC_6); + +DigitalIn fdcx2(PB_1); +DigitalIn fdcx1(PB_2); +DigitalIn fdcy2(PB_11); +DigitalIn fdcy1(PB_15); +DigitalIn fdcz2(PB_12); +DigitalIn fdcz1(PB_14); + +InterruptIn Emergencia(D15); +DigitalIn Emerg(D15); + + +//Varíaveis auxiliares +int ponto = 0; + +int continuax = 0; +int continuay = 0; +int continuaz = 0; +bool seguranca = 1; +bool printou = 0; +bool check_cancela = 1; +int iteracoes = 1; + +#define velocidade_jog 20 +#define velocidade_padrao 20 +#define velocidade_lenta 100 +#define velocidade_mais_lenta 300 +#define velocidade_rapida 10 + +int velocidade = velocidade_padrao; +float tempo_acionado; +//-------------------------------- + +//------Varíaveis Juliano--------- +InterruptIn button_UP(D13);//A5); +InterruptIn button_DOWN(A3);//A4); +/*InterruptIn enter(USER_BUTTON);*/ + +TextLCD lcd(D2, D3, D4, D5, D6, D7, TextLCD::LCD20x4); // rs, e, d4-d7 + +//Listas Programa e posicao atual do bico +int posicao[3] = {0,0,0}; +double passo = 0.0015625; +float passox = 0.0009375f; +float Px; +int trajetoriax[100] = {0,0,0}; +int trajetoriay[100] = {0,0,0}; +int trajetoriaz[100] = {0,0,0}; +int Pcola[100] = {0,1,2,2,1,2,2,2,1,1}; +int Pcola_quant[100] = {0,1,2,2,2,2,1,2,2,1}; + +int tam_pontos = 2; + +//Variaveis auxiliares +int fim = 3; +int i = 0; +int aux = 0; +int escolha = 0; + +//Listas de menus e variaveis relacionadas aos menus +char* tela_Inicial[6] = {"------Klaus-------","Programa","Referenciar","Teste Vazao"}; +char* tela_Programar[5] = {"Voltar","Iniciar Programa","Editar Programa","Novo Programa"}; +char* tela_Informacoes[10] = {"Voltar","KLAUS","Desenvolvedores:","Giovana Lemes","Andre Annunziato","Anna","Ana Henrique","Arthur Rizzo","Juliano Nassar"}; +char* tela_Editar[4] = {"Voltar","Redefinir","Cola:","Quant:"}; +char* tela_Cola_Quant[3] = {"Padrao","Pouco","Muita"}; +char* tela_Cola[3] = {"Nao","Ponto","trajeto"}; +int tam_Editar = 4; +int tam_Inicial = 4; +int tam_Programar = 4; +int tam_Informacoes = 9; +int tam_Cola= 3; +int tam_Cola_Quant = 3; +int tam; +int select = 0; +int select1 = 0; +//Posicao do cursor +int cursor_row = 0; +int cursor_column = 0; + +//Flags para rodar funcoes +bool flagMenu = 1; +bool flagSelect = 0; +bool referencia = 0; + + +// ------------------------ Movimentação ----------------------------- +void atualiza_posicao(int eixo, bool dir) { // eixo: X=0 Y=1 Z=2 + if(dir == 1){ + posicao[eixo] = posicao[eixo]+ 1; + } + else{ + posicao[eixo] = posicao[eixo]- 1; + } +} +void movimentax(bool enable,bool dir,int velocidade){ + if(posicao[0]<0 && dir == 0 && referencia ==0 || fdcx1 == 1 && dir ==0 && referencia == 0 || fdcx2 == 1 && dir ==1){ + enableX = 1; + } + else{ + enableX=enable; + dirX = dir; + stepX = !stepX; + atualiza_posicao(0,dir); + wait_us(velocidade); + stepX = !stepX; + wait_us(velocidade); + } +} + +void movimentay(bool enable,bool dir,int velocidade){ + if(posicao[1]<0 && dir == 0 && referencia ==0 || fdcy1 == 1 && dir ==0 && referencia == 0 || fdcy2 == 1 && dir ==1){ + enableY = 1; + } + else{ + enableY=enable; + dirY = dir; + stepY = !stepY; + atualiza_posicao(1,dir); + wait_us(velocidade); + stepY = !stepY; + wait_us(velocidade); + } +} + +void movimentaz(bool enable,bool dir,int velocidade){ + if(posicao[2]>0 && dir == 1 && referencia ==0 || fdcz1 == 1 && dir ==1 && referencia == 0 || fdcz2 == 1 && dir ==0){ + enableZ = 1; + } + else{ + enableZ=enable; + dirZ = dir; + stepZ = !stepZ; + atualiza_posicao(2,dir); + wait_us(velocidade); + stepZ = !stepZ; + wait_us(velocidade); + } + +} +//------------------------Válvula---------------------------------- + +void aciona_valvula(){ + Valvula_embolo = 1; + Valvula_ponta = 0; + } + +void desliga_valvula(){ + Valvula_embolo = 0; + Valvula_ponta = 1; + } + +void aciona_eixos() +{ + X.enable_irq(); + Y.enable_irq(); + Z.enable_irq(); + +} + +void desliga_eixos() +{ + X.disable_irq(); + Y.disable_irq(); + Z.disable_irq(); +} +//-------------------------------- +void pressionado(){ + if (printou == 0){ + desliga_valvula(); + enableX = 1; + enableY = 1; + enableZ = 1; + lcd.cls(); + lcd.locate(5,0); + lcd.printf("EMERGENCIA\n MAQUINA DESLIGADA"); + LedX = 0; + LedY = 0; + LedZ = 0; + desliga_eixos(); + printou = 1; + } + } + +// ------------------- Referenciamento ------------------------------ +void posicao_ref(int eixo){ + posicao[eixo]= 0; +} + +void referenciamentox(){ + if(seguranca){ + while(fdcx1 == 0 && check_cancela){ + if (seguranca){ + movimentax(0,0,velocidade_rapida); // 1 = pra esquerda, pra porta + } + else{ + break; + } + } + if(seguranca){wait(0.1);} + int i = 0; + while (i<10000 && check_cancela){ + if (seguranca){ + movimentax(0,1,velocidade_padrao); + i=i+1; + } + else{ + break; + } + } + if(seguranca){wait(0.1);} + while (fdcx1 == 0 && check_cancela){ + if (seguranca){ + movimentax(0,0,velocidade_lenta); + } + else{ + break; + } + } + if(seguranca){wait(0.1);} + i = 0; + while (i < 5000 && check_cancela){ + if (seguranca){ + movimentax(0,1,velocidade_lenta); + i=i+1; + } + else{ + break; + } + } + if(seguranca){wait(0.1);} + while (fdcx1 == 0 && check_cancela){ + if (seguranca){ + movimentax(0,0,velocidade_mais_lenta); + } + else{ + break; + } + } + if(seguranca){ + wait(0.1); + enableX = 1; + posicao_ref(0); + } + else{ + pressionado(); + } + } + else{ + pressionado(); + } + +} + + +void referenciamentoy(){ + while(fdcy1 == 0 && check_cancela){ + if (seguranca){ + movimentay(0,0,velocidade_rapida); // 1 = pra direita -> mais pra perto de nós // aplicar seguranca x + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + int i = 0; + while (i<10000 && check_cancela){ + if (seguranca){ + movimentay(0,1,velocidade_padrao); + i=i+1; + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + while (fdcy1 == 0 && check_cancela){ + if (seguranca){ + movimentay(0,0,velocidade_lenta); + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + i = 0; + while (i < 5000 && check_cancela){ + if (seguranca){ + movimentay(0,1,velocidade_lenta); + i=i+1; + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + while (fdcy1 == 0 && check_cancela){ + if (seguranca){ + movimentay(0,0,velocidade_mais_lenta); + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + enableY = 1; + posicao_ref(1); + +} + + +void referenciamentoz(){ + while(fdcz1 == 0 && check_cancela){ + if (seguranca){ + movimentaz(0,1,velocidade_padrao); + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + int i = 0; + while (i<10000 && check_cancela){ + if (seguranca){ + movimentaz(0,0,velocidade_padrao); + i=i+1; + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + while (fdcz1 == 0 && check_cancela){ + if (seguranca){ + movimentaz(0,1,velocidade_lenta); + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + i = 0; + while (i < 5000 && check_cancela){ + if (seguranca){ + movimentaz(0,0,velocidade_lenta); + i=i+1; + } + else{ + pressionado(); + break; + } + } + if(seguranca){wait(0.1);} + while (fdcz1 == 0 && check_cancela){ + if (seguranca){ + movimentaz(0,1,velocidade_mais_lenta); + } + else{ + pressionado(); + break; + } + } + wait(0.1); + enableZ = 1; + posicao_ref(2); + //lcd.cls(); + +} + +void referenciamento(){ + referencia = 1; + referenciamentox(); + referenciamentoy(); + referenciamentoz(); + referencia = 0; + } + +//------------------------------------------------------------ +void cancela() +{ + check_cancela = 0; + desliga_eixos(); + LedX = 0; + LedY= 0; + LedZ= 0; +} + +void disable_buttons() +{ + button_UP.disable_irq(); + button_DOWN.disable_irq(); + enter.disable_irq(); +} + +void enable_buttons() +{ + button_UP.enable_irq(); + button_DOWN.enable_irq(); + enter.enable_irq(); + +} + +//Cursor para cima e atualiza o Menu +void change_menu_UP(void) +{ + flagMenu = !flagMenu; + cursor_row-=1; +} + +//Cursor para baixo e atualiza o Menu +void change_menu_DOWN(void) +{ + flagMenu = !flagMenu; + cursor_row+=1; +} + +//Seleciona o menu +void select_menu(void) +{ + flagMenu = !flagMenu; + flagSelect = !flagSelect; +} + +void define_fim(int limite) +{ + lcd.cls(); + if(select == 0 && select1 ==0) + { + if (cursor_row >= 3) + { + fim = cursor_row; + i = cursor_row - 3; + } + if (cursor_row <1) + { + fim = tam-1; + cursor_row = tam-1; + i = cursor_row - 3; + } + if (cursor_row >= tam) + { + cursor_row = 1; + fim = 3; + i = 0; + } + if (tam < 4) + { + fim = tam-1; + i= 0; + } + } + else + { + if (cursor_row >= 3) + { + fim = cursor_row; + i = cursor_row - 3; + } + if (cursor_row <limite) + { + fim = limite + tam-1; + cursor_row = limite + tam-1; + i = cursor_row - 3 - limite; + } + if (cursor_row >= tam+limite) + { + cursor_row = limite; + fim = 3-limite; + i = 0; + + } + if (tam < 4) + { + fim = tam-1; + i= 0; + } + else + { + fim = 3; + i = 0; + } + } +} + +void posiciona_cursor(int column) +{ + if (cursor_row >3) + { + lcd.locate(column,3); + } + else + { + lcd.locate(column,cursor_row); + } + lcd.printf(">"); + aux = 0; + i = 0; + wait(0.15); +} + +//Mostra o menu inicial +void Menu_Inicial() +{ + tam = tam_Inicial; + define_fim(0); + while(i<=fim) + { + lcd.locate(1,aux); + lcd.printf(tela_Inicial[i]); + i+=1; + aux+=1; + } + posiciona_cursor(0); +} + +//Mostra o menu progamar +void Menu_Programar() +{ + tam = tam_Programar; + define_fim(0); + while(i<=fim) + { + lcd.locate(1,aux); + lcd.printf(tela_Programar[i]); + i+=1; + aux+=1; + } + posiciona_cursor(0); +} + +void edit_ponto() +{ + select1 = -1; + cursor_row = 0; + int dir = 0; + int save_pos = 0; + while(check_cancela) + { + if(seguranca) + { + if(flagMenu) + { + lcd.cls(); + disable_buttons(); + + if(flagSelect) + { + select1 = cursor_row; + flagSelect = !flagSelect; + } + + if (select1 == 0) + { + flagMenu = 0; + break; + } + + switch(select1) + { + + case 1: + wait(0.2); + flagSelect = 0; + flagMenu = 1; + enable_buttons(); + + while(check_cancela) + { + if(seguranca) + { + if(flagMenu) + { + disable_buttons(); + if (flagSelect) + { + select1 = -1; + cursor_row = select - 3; + flagSelect = !flagSelect; + break; + } + + aciona_eixos(); + + if (mais==1) + { + dir = 1; + } + else if (menos==1) + { + dir = 0; + } + + if (mais ==1 || menos==1) + { + if(seguranca){ + lcd.cls(); + lcd.locate(0,1); + if(continuax && posicao[0]<=0 && dir == 0|| continuax && fdcx1 == 1 && dir ==0){ + lcd.printf("Final do curso x \n disponivel"); + } + else if (continuax){ + lcd.printf("Movimentando eixo x"); + } + else if(continuay && posicao[1]<0 && dir == 0 || continuay && fdcy1 == 1 && dir ==0){ + lcd.printf("Final do curso y \n disponivel"); + } + else if(continuay){ + lcd.printf("Movimentando eixo y"); + } + else if(continuaz && posicao[2]<0 && dir == 0 || continuaz && fdcz1 == 1 && dir ==0){ + lcd.printf("Final do curso z \n disponivel"); + } + else if (continuaz){ + lcd.printf("Movimentando eixo z"); + } + else{ + lcd.locate(2,1); + lcd.printf("Selecione um eixo"); + } + } + else{ + pressionado(); + } + } + + while(mais ==1 || menos==1 && check_cancela) + { if(seguranca) + { + if(continuax) + { + movimentax(0,dir,velocidade_jog); + } + else if(continuay) + { + movimentay(0,dir,velocidade_jog); + } + else if(continuaz) + { + movimentaz(0,dir,velocidade_jog); + } + } + else + { + pressionado(); + break; + } + } + if(seguranca) + { + lcd.cls(); + enableX = 1; + enableY = 1; + enableZ = 1; + lcd.locate(0,0); + lcd.printf("x:"); + lcd.locate(0,1); + lcd.printf("%.2f",posicao[0]*passox); + lcd.locate(7,0); + lcd.printf("y:"); + lcd.locate(7,1); + lcd.printf("%.2f",posicao[1]*passo); + lcd.locate(14,0); + lcd.printf("z:"); + lcd.locate(14,1); + lcd.printf("%.2f",posicao[2]*passo); + + lcd.locate(0,3); + lcd.printf(">Definir Ponto %d",select - 2); + } + else + { + pressionado(); + } + enable_buttons(); + flagMenu = !flagMenu; + } + } + + else + { + save_pos = select; + while(!seguranca) + { + pressionado(); + } + seguranca = 1; + select1 = -1; + select = save_pos; + cursor_row = 0; + flagMenu = 0; + printou = 0; + break; + } + } + LedX = 0; + LedY = 0; + LedZ= 0; + + if(check_cancela) + { + trajetoriax[select-3] = posicao[0]; + trajetoriay[select-3] = posicao[1]; + trajetoriaz[select-3] = posicao[2]; + select1 = -1; + cursor_row = select - 3; + } + LedX = 0; + LedY = 0; + LedZ = 0; + check_cancela = 1; + break; + case 2: + Pcola[select-3] += 1; + if (Pcola[select-3]>2) + { + Pcola[select-3] = 0; + } + if (Pcola[select-3]>1 && select-3 ==0) + { + Pcola[select-3] = 0; + } + break; + case 3: + Pcola_quant[select-3] += 1; + if (Pcola_quant[select-3]>2) + { + Pcola_quant[select-3] = 0; + } + break; + } + select1 = -1; + + switch(Pcola[select-3]) + { + case 0: + tela_Editar[2] = "Cola:nao"; + break; + case 1: + tela_Editar[2] ="Cola:ponto"; + break; + case 2: + tela_Editar[2] ="Cola:traj"; + break; + } + switch(Pcola_quant[select-3]) + { + case 0: + tela_Editar[3] ="Qtd:Padr"; + break; + case 1: + tela_Editar[3] ="Qtd:pouco"; + break; + case 2: + tela_Editar[3] ="Qtd:muito"; + break; + } + //-------------- + tam = tam_Editar; + if(Pcola[select-3] == 0) + { + tam -=1; + } + define_fim(0); + + lcd.locate(12,0); + lcd.printf("PONTO %d",select-2); + lcd.locate(12,1); + lcd.printf("x:%3.2f",trajetoriax[select-3]*passo); + lcd.locate(12,2); + lcd.printf("y:%3.2f",trajetoriay[select-3]*passo); + lcd.locate(12,3); + lcd.printf("z:%3.2f",trajetoriaz[select-3]*passo); + + while(i<=fim) + { + lcd.locate(1,aux); + lcd.printf(tela_Editar[i]); + i+=1; + aux+=1; + } + posiciona_cursor(0); + LedX = 0; + LedY = 0; + LedZ= 0; + flagMenu = !flagMenu; + enable_buttons(); + } + //-------------- + } + else{ + pressionado(); + break; + } + } + select1 = 0; + flagMenu = 0; + check_cancela = 1; +} + +//Mostra Menu Editar +void Programar_editar() +{ + bool k = 0; + lcd.cls(); + cursor_row=1; + flagMenu = 1; + enable_buttons(); + select = -1; + while(check_cancela) + { + if(seguranca){ + + if(flagMenu) + { + disable_buttons(); + + if (flagSelect) + { + select = cursor_row; + flagSelect = !flagSelect; + //--------define_fim personalizado------------ + switch(select) + { case 0: + select = 1; + select1 = 0; + escolha = -1; + cursor_row = 1; + flagMenu = 0; + k = 1; + break; + case 1: + if (tam_pontos >0) + { + tam_pontos -= 1; + flagMenu = 0; + } + break; + case 2: + select1 = -1; + trajetoriax[tam_pontos] = posicao[0]; + trajetoriay[tam_pontos] = posicao[1]; + trajetoriaz[tam_pontos] = posicao[2]; + Pcola[tam_pontos] = 0; + Pcola_quant[tam_pontos] = 0; + + tam_pontos += 1; + select = tam_pontos+2; + + edit_ponto(); + + cursor_row = 2; + select = -1; + select1 = -1; + break; + } + } + if(k) + { + break; + } + tam = tam_pontos+2; + lcd.cls(); + if (select >2) + { + select1 = -1; + + edit_ponto(); + + cursor_row = select; + select = -1; + select1 = -1; + + } + else + { + + if (cursor_row <3) + { + fim = 3; + i = 0; + } + + if (cursor_row >= 3) + { + fim = cursor_row; + i = cursor_row - 3; + } + if (cursor_row <0) + { + fim = tam; + cursor_row = tam; + i = cursor_row - 3; + } + if (cursor_row >= tam+1) + { + cursor_row = 0; + fim = 3; + i = 0; + } + if (tam ==2) + { + fim = 2; + i= 0; + } + + //------------------------- + while(i<=fim && check_cancela ) + { + switch(i) + { + case 0: + lcd.locate(1,aux); + lcd.printf("Voltar"); + break; + case 1: + lcd.locate(1,aux); + lcd.printf("exc P%d",tam_pontos); + break; + case 2: + lcd.locate(1,aux); + lcd.printf("Def P%d",tam_pontos+1); + break; + } + if (i>2) + { + lcd.locate(1,aux); + lcd.printf("P%i",i-2); + switch(Pcola[i-3]) + { + case 1: + lcd.printf("."); + break; + case 2: + lcd.printf("-"); + + break; + } + if (Pcola[i-3]!= 0) + { + switch(Pcola_quant[i-3]) + { + case 0: + lcd.printf("Padrao"); + break; + case 1: + lcd.printf("pouco"); + break; + case 2: + lcd.printf("muita"); + break; + } + } + } + + i+=1; + aux+=1; + } + + } + flagMenu = !flagMenu; + + lcd.locate(12,0); + lcd.printf("Pos At"); + lcd.locate(12,1); + lcd.printf("x:%.2f",posicao[0]*passo); + lcd.locate(12,2); + lcd.printf("y:%.2f",posicao[1]*passo); + lcd.locate(12,3); + lcd.printf("z:%.2f",posicao[2]*passo); + posiciona_cursor(0); + enable_buttons(); + } + } + else{ + pressionado(); + break; + } + } + + select = 1; + select1 = 0; + escolha = -1; + cursor_row = 1; + flagMenu = 0; + check_cancela = 1; +} + + +// ------------------------- Rodando Programa --------------------------------------- + +void rodar_programa(){ + int ponto_rodando = 0; + //int cola_inicial = 0 + while(ponto_rodando <= tam_pontos-1 && check_cancela){ + velocidade = velocidade_padrao; + if(seguranca){ + if(Pcola[ponto_rodando] == 2){ + if(Pcola_quant[ponto_rodando] == 1){ + velocidade = velocidade_rapida; + } + if(Pcola_quant[ponto_rodando] == 2){ + velocidade = velocidade_lenta; + } + aciona_valvula(); + } + if(posicao[2] < trajetoriaz[ponto_rodando]) { + while(posicao[2] != trajetoriaz[ponto_rodando] && check_cancela){ + if(seguranca){ + movimentaz(0,1, velocidade); + } + else{ + pressionado(); + break; + } + } + } + enableZ=1; + while(posicao[0] != trajetoriax[ponto_rodando] && check_cancela){ + if(seguranca){ + if(posicao[0]< trajetoriax[ponto_rodando]){ + movimentax(0,1, velocidade_jog); + } + if(posicao[0]> trajetoriax[ponto_rodando]){ + movimentax(0,0, velocidade); + } + } + else{ + pressionado(); + break; + } + } + + enableX= 1; + while(posicao[1] != trajetoriay[ponto_rodando] && check_cancela){ + if(seguranca){ + if(posicao[1]< trajetoriay[ponto_rodando]){ + movimentay(0,1, velocidade); + } + if(posicao[1]> trajetoriay[ponto_rodando]){ + movimentay(0,0, velocidade); + } + } + else{ + pressionado(); + break; + } + } + enableY=1; + if(posicao[2] > trajetoriaz[ponto_rodando]) { + while(posicao[2] != trajetoriaz[ponto_rodando] && check_cancela){ + if(seguranca){ + movimentaz(0,0, velocidade); + } + else{ + pressionado(); + break; + } + } + } + enableZ=1; + + + if(seguranca){ + wait(1); + } + if(Pcola[ponto_rodando] == 1){ + aciona_valvula(); + if(Pcola_quant[ponto_rodando] == 0){ + tempo_acionado =0.3; + } + else if (Pcola_quant[ponto_rodando] == 1){ + tempo_acionado =0.5; + } + else{ + tempo_acionado =0.1; + } + wait(tempo_acionado); + desliga_valvula(); + } + if(Pcola[ponto_rodando] == 2){ + desliga_valvula(); + } + ponto_rodando++; + } + else{ + pressionado(); + break; + } + + } +} +void sim_nao(char* titulo) +{ + if (flagMenu) + { + lcd.cls(); + disable_buttons(); + if (cursor_row<2) + { + cursor_row= 3; + } + if (cursor_row>3) + { + cursor_row = 2; + } + lcd.locate(0,0); + lcd.printf(titulo); + lcd.locate(1,2); + lcd.printf("sim"); + lcd.locate(1,3); + lcd.printf("nao"); + posiciona_cursor(0); + if (flagSelect) + { + escolha = cursor_row-1; + flagSelect = !flagSelect; + } + + flagMenu = !flagMenu; + + enable_buttons(); + } + + +} + +void Referenciar() +{ + lcd.cls(); + select = 0; + select1 = 0; + escolha = 0; + cursor_row =2; + flagMenu = 1; + flagSelect = 0; + + enable_buttons(); + while(check_cancela) + { + if(seguranca){ + printou = 0; + sim_nao("Deseja Referenciar?"); + + if (escolha ==1) + { + disable_buttons(); + lcd.cls(); + lcd.locate(0,1); + lcd.printf(" REFERENCIANDO..."); + referenciamento(); + escolha = 0; + cursor_row =1; + enable_buttons(); + flagMenu = 1; + break; + } + + if (escolha ==2) + { + lcd.cls(); + escolha = 0; + cursor_row =1; + select = 0; + select1 = 0; + flagMenu=1; + break; + } + } + else{ + pressionado(); + } + + } + + if(!check_cancela) + { + lcd.cls(); + lcd.locate(1,1); + lcd.printf("operacao cancelada"); + wait(1.2); + } + escolha = 0; + cursor_row =1; + select = 0; + select1 = 0; + flagMenu=1; + check_cancela =1; + +} +void teste_vazao(){ + if(seguranca){ + while(posicao[0] > 0 && check_cancela){ + if (seguranca){ + movimentax(0,0,velocidade_padrao); // 1 = pra esquerda, pra porta + } + else{ + pressionado(); + break; + } + } + while(posicao[1] > 0 && check_cancela){ + if (seguranca){ + movimentay(0,0,velocidade_padrao); // 1 = pra esquerda, pra porta + } + else{ + pressionado(); + break; + } + } + while(posicao[2] > 0 && check_cancela){ + if (seguranca){ + movimentaz(0,1,velocidade_padrao); // 1 = pra esquerda, pra porta + } + else{ + pressionado(); + break; + } + } + if(seguranca){aciona_valvula();} + if(seguranca){wait(1);} + if(seguranca){desliga_valvula();} + } + else{ + pressionado(); + } + } + +void Vazao() +{ + lcd.cls(); + select = 0; + select1 = 0; + escolha = 0; + cursor_row =2; + flagMenu = 1; + flagSelect = 0; + + enable_buttons(); + while(check_cancela) + { + if(seguranca){ + printou = 0; + sim_nao("Deseja testar vazao?"); + + if (escolha ==1) + { + disable_buttons(); + lcd.cls(); + lcd.locate(0,1); + lcd.printf(" TESTANDO..."); + teste_vazao(); + escolha = 0; + cursor_row =1; + enable_buttons(); + flagMenu = 0; + break; + } + + if (escolha ==2) + { + lcd.cls(); + escolha = 0; + cursor_row =1; + select = 0; + select1 = 0; + flagMenu=0; + break; + } + } + else{ + pressionado(); + } + + } + + if(!check_cancela) + { + lcd.cls(); + lcd.locate(1,1); + lcd.printf("operacao cancelada"); + wait(1.2); + } + + lcd.cls(); + escolha = 0; + cursor_row =1; + select = 0; + select1 = 0; + flagMenu=0; + check_cancela = 1; +} + + +void eixox(){ + continuax = 1; + continuay = 0; + continuaz = 0; + LedX = 1; + LedY = 0; + LedZ = 0; +} +void eixoy(){ + continuax = 0; + continuay = 1; + continuaz = 0; + LedX = 0; + LedY = 1; + LedZ = 0; +} + +void eixoz(){ + continuax = 0; + continuay = 0; + continuaz = 1; + + LedX = 0; + LedY = 0; + LedZ = 1; +} + + +void programar() +{ + + tam_pontos = 0; + escolha = 0; + select = 0; + select1 = 0; + lcd.cls(); + flagMenu = 1; + flagSelect = 0; + cursor_row = 0; + int dir = 0; + bool k = 0; + enable_buttons(); + while(check_cancela) + { + if(seguranca){ + if(flagMenu) + { + disable_buttons(); + if(flagSelect) + { + wait(0.2); + select +=1; + select1 = cursor_row; + escolha = cursor_row-1; + flagSelect = !flagSelect; + cursor_row = 1; + } + + switch(select) + { + case 0: + + aciona_eixos(); + if (mais==1) + { + dir = 1; + } + else if (menos==1) + { + dir = 0; + } + + if (mais ==1 || menos==1) + { if(seguranca){ + lcd.cls(); + lcd.locate(0,1); + if(continuax && posicao[0]<=0 && dir == 0|| continuax && fdcx1 == 1 && dir ==0|| continuax && fdcx2 == 1 && dir ==1){ + lcd.printf("Final do curso x \n disponivel"); + } + else if (continuax){ + lcd.printf("Movimentando eixo x"); + } + else if(continuay && posicao[1]<0 && dir == 0 || continuay && fdcy1 == 1 && dir ==0 || continuay && fdcy2 == 1 && dir ==1){ + lcd.printf("Final do curso y \n disponivel"); + } + else if(continuay){ + lcd.printf("Movimentando eixo y"); + } + else if(continuaz && posicao[2]>0 && dir == 1 || continuaz && fdcz1 == 1 && dir ==1 || continuaz && fdcz2 == 1 && dir ==0){ + lcd.printf("Final do curso z \n disponivel"); + } + else if (continuaz){ + lcd.printf("Movimentando eixo z"); + } + else{ + lcd.locate(2,1); + lcd.printf("Selecione um eixo"); + } + } + else{ + pressionado(); + } + } + + while(mais ==1 || menos==1 && check_cancela) + { if(seguranca){ + if(continuax){ + movimentax(0,dir,velocidade_jog); + } + else if(continuay){ + movimentay(0,dir,velocidade_jog); + } + else if(continuaz){ + movimentaz(0,dir,velocidade_jog); + } + } + else{ + pressionado(); + break; + } + } + if(seguranca){ + lcd.cls(); + enableX = 1; + enableY = 1; + enableZ = 1; + lcd.locate(0,0); + lcd.printf("x:"); + lcd.locate(0,1); + Px = posicao[0]*passox; + lcd.printf("%.1f",Px); + lcd.locate(7,0); + lcd.printf("y:"); + lcd.locate(7,1); + lcd.printf("%.1f",posicao[1]*passo); + lcd.locate(14,0); + lcd.printf("z:"); + lcd.locate(14,1); + lcd.printf("%.1f",posicao[2]*passo); + + lcd.locate(0,3); + lcd.printf(">Definir Ponto %d",tam_pontos+1); + } + else{ + pressionado(); + } + break; + case 1: + LedX = 0; + LedY= 0; + LedZ= 0; + desliga_eixos(); + lcd.cls(); + sim_nao("Definir essas\ncoordenadas?"); + flagMenu=1; + break; + case 2: + if (escolha == 2){ + select -=2; + flagMenu = 0; + break; + } + lcd.cls(); + trajetoriax[tam_pontos] = posicao[0]; + trajetoriay[tam_pontos] = posicao[1]; + trajetoriaz[tam_pontos] = posicao[2]; + if (tam_pontos == 0) + { + sim_nao("Depositar cola no ponto"); + lcd.locate(5,1); + lcd.printf(" %d?",tam_pontos + 1); + flagMenu = 1; + } + else + { + tam = tam_Cola; + define_fim(1); + aux = 1; + lcd.locate(0,0); + lcd.printf("Depositar cola?"); + while(i<=fim && check_cancela) + { + if(i<2) + { + lcd.locate(1,aux); + lcd.printf(tela_Cola[i]); + lcd.printf("(P%d)",tam_pontos+1); + i+=1; + aux+=1; + } + else + { + lcd.locate(1,aux); + lcd.printf(tela_Cola[i]); + lcd.printf("(P%d-",tam_pontos); + lcd.printf("P%d)",tam_pontos+1); + i+=1; + aux+=1; + } + } + posiciona_cursor(0); + } + break; + case 3: + lcd.cls(); + if (escolha ==2 && tam_pontos==0) + { + Pcola[tam_pontos] = 0; + } + else if (select1 >1) + { + escolha = 1; + } + else + { + escolha = 0; + } + + if (escolha ==1 && select>1) + { + + Pcola[tam_pontos] = select1 - 1; + tam = tam_Cola_Quant; + define_fim(1); + aux = 1; + lcd.locate(0,0); + lcd.printf("Quantidade de cola?"); + while(i<=fim && check_cancela) + { + lcd.locate(1,aux); + lcd.printf(tela_Cola_Quant[i]); + i+=1; + aux+=1; + } + posiciona_cursor(0); + } + else + { + Pcola[tam_pontos] = 0; + Pcola_quant[tam_pontos] = 0; + flagMenu = 0; + select+=1; + } + + + break; + case 4: + lcd.cls(); + Pcola_quant[tam_pontos] = select1 - 1; + sim_nao("Deseja definir mais um ponto?"); + flagMenu = 1; + break; + case 5: + tam_pontos +=1; + lcd.cls(); + if (escolha ==1) + { + select = 0; + select1 = -1; + } + else + { + select = 0; + select1= 0; + lcd.cls(); + lcd.locate(3,1); + lcd.printf("Programa Salvo"); + wait(2); + k = 1; + } + flagMenu = 0; + break; + } + enable_buttons(); + if (k) + { + break; + } + flagMenu= !flagMenu; + } + } + else{ + pressionado(); + break; + } + } +} + +void novo_programa() +{ + + escolha = 0; + check_cancela = 1; + lcd.cls(); + lcd.locate(1,0); + lcd.printf("Este processo ira"); + lcd.locate(5,1); + lcd.printf("deletar"); + lcd.locate(1,2); + lcd.printf("o antigo programa"); + wait(3); + lcd.cls(); + + while(check_cancela) + { if(seguranca){ + + sim_nao("Criar novo programa?"); + if (escolha ==1) + { + lcd.cls(); + programar(); + select = 1; + select1 = 0; + cursor_row = 1; + flagMenu = 0; + break; + } + if (escolha == 2) + { + select = 1; + select1 = 0; + cursor_row = 1; + flagMenu = 0; + break; + } + } + else{ + pressionado(); + break; + } + + } + + if (!check_cancela) + { + lcd.cls(); + lcd.locate(1,1); + lcd.printf("Operacao cancelada"); + wait(1.2); + } + select = 1; + select1 = 0; + cursor_row = 1; + flagMenu = 0; + check_cancela = 1; +} + + +void desliga(){ + seguranca=0; + } +void liga(){ + seguranca=1; + flagMenu=1; + select = 0; + select1 = 0; + cursor_row = 1; + } int main() { - lcd.printf("Hello World!\n"); + enableX = 1; + enableY= 1; + enableZ= 1; + + Valvula_embolo = 0; + Valvula_ponta = 1; + + Emergencia.fall(&desliga); + Emergencia.rise(&liga); + + X.rise(&eixox); + Y.rise(&eixoy); + Z.rise(&eixoz); + cancelar.rise(&cancela); + desliga_eixos(); + lcd.cls(); + + button_UP.rise(&change_menu_UP); + button_DOWN.rise(&change_menu_DOWN); + enter.rise(&select_menu); + if(Emerg){ + Referenciar(); + } + else{ + while(Emerg==0){ + if (printou == 0){ + pressionado(); + } + } + Referenciar(); + } + + + cursor_row = 1; + + while (true) + { + if (seguranca && Emerg){ + printou = 0; + if(!check_cancela) + { + select = 0; + select1 = 0; + cursor_row = 1; + check_cancela = 1; + flagMenu = 1; + } + if (flagMenu) + { + + if (flagSelect) + { + check_cancela = 1; + if (select ==0) + { + select = cursor_row; + cursor_row = 0; + } + else if (cursor_row ==0) + { + select = 0; + select1 = 0; + } + else if(select !=0 && select1 ==0) + { + select1 = select; + select = cursor_row; + } + else + { + select1 = cursor_row; + } + cursor_row = 1; + flagSelect = !flagSelect; + + } + + disable_buttons(); + switch(select1) + { + case 0: + switch(select) + { + case 0: + Menu_Inicial(); + break; + case 1: + Menu_Programar(); + break; + case 2: + Referenciar(); + if(seguranca){ + Menu_Inicial(); + } + break; + case 3: + Vazao(); + break; + }; + break; + + case 1: + int iter = 21; + switch(select) + { + case 0: + Menu_Inicial(); + break; + //Iniciar + case 1: + lcd.cls(); + lcd.printf("Quantas iteracoes?"); + lcd.locate(7,2); + lcd.printf("N = "); + cursor_row = 1; + flagMenu = 1; + flagSelect = 0; + + while(check_cancela) + { + if(seguranca) + { + if(flagMenu) + { + disable_buttons(); + if(cursor_row >= 21) + { + cursor_row = 1; + } + if(cursor_row <= 0) + { + cursor_row = 20; + } + + if(flagSelect) + { + iteracoes = iter - cursor_row; + cursor_row = 1; + flagSelect = !flagSelect; + break; + } + + lcd.locate(12,2); + lcd.printf(" "); + lcd.locate(11,2); + lcd.printf("%i", iter - cursor_row); + flagMenu = !flagMenu; + wait(0.2); + enable_buttons(); + } + } + else + { + break; + } + + } + + disable_buttons(); + lcd.cls(); + lcd.locate(2,1); + lcd.printf("Rodando codigo"); + lcd.locate(2,2); + lcd.printf("iteracao:"); + select = 0; + while(select < iteracoes && check_cancela) + { + if(seguranca){ + lcd.locate(11,2); + lcd. printf("%d",select+1); + rodar_programa(); + select++; + } + else{ + pressionado(); + break; + } + } + + if (!check_cancela) + { + lcd.cls(); + lcd.locate(1,1); + lcd.printf("Operacao cancelada"); + wait(1.2); + } + if (!seguranca) + { + pressionado(); + } + check_cancela = 1; + select1 = 0; + select = 0; + flagMenu = 1; + cursor_row =1; + select_menu(); + break; + //Editar + case 2: + Programar_editar(); + break; + //Novo Programa + case 3: + novo_programa(); + check_cancela = 1; + break; + }; + break; + + } + + enable_buttons(); + + flagMenu = !flagMenu; + + } + } + else{ + pressionado(); + } + } }