Juliano Nehme Nassar / Mbed 2 deprecated Projeto_Mecatronico

Dependencies:   mbed TextLCD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TextLCD.h"
00003 #include "string"
00004 
00005 //-----------Botões Anna----------
00006 // ------------------------Portas X ----------------------------
00007 DigitalOut dirX(PC_10);
00008 DigitalOut stepX(PC_12);
00009 DigitalOut enableX(PA_14);
00010 
00011 
00012 // ------------------------Portas Y ----------------------------
00013 DigitalOut dirY(A1);
00014 DigitalOut stepY(A0);
00015 DigitalOut enableY(PC_3);
00016 
00017 // ------------------------Portas Z ----------------------------
00018 DigitalOut dirZ(PB_7);
00019 DigitalOut stepZ(PC_13);
00020 DigitalOut enableZ(A2);
00021 
00022 // ------------------------Portas IHM --------------------------
00023 /*DigitalIn mais(A5);
00024 DigitalIn menos(A4);
00025 InterruptIn X(PA_13);
00026 InterruptIn Z(PA_15);*/
00027 /*InterruptIn enter(D9);
00028 InterruptIn X(D10);
00029 InterruptIn Y(D11);
00030 InterruptIn Z(D12);
00031 DigitalIn mais(D13);
00032 DigitalIn menos(D14);*/
00033 InterruptIn enter(A4);
00034 InterruptIn X(PC_2); 
00035 InterruptIn Y(D11);
00036 InterruptIn Z(D12);
00037 
00038 InterruptIn cancelar(PC_4);
00039 
00040 DigitalIn mais(D13);
00041 DigitalIn menos(A3);
00042 
00043 DigitalOut LedX(PC_0);
00044 DigitalOut LedY(PC_11);
00045 DigitalOut LedZ(PC_5);
00046 
00047 DigitalOut Valvula_embolo(PC_8);
00048 DigitalOut Valvula_ponta(PC_6);
00049 
00050 DigitalIn fdcx2(PB_1);
00051 DigitalIn fdcx1(PB_2);
00052 DigitalIn fdcy2(PB_11);
00053 DigitalIn fdcy1(PB_15);
00054 DigitalIn fdcz2(PB_12);
00055 DigitalIn fdcz1(PB_14); 
00056 
00057 InterruptIn Emergencia(D15);
00058 DigitalIn Emerg(D15);
00059 
00060 
00061 //Varíaveis auxiliares
00062 int ponto = 0;
00063 
00064 int continuax = 0;
00065 int continuay = 0;
00066 int continuaz = 0;
00067 bool seguranca = 1;
00068 bool printou = 0;
00069 bool check_cancela = 1;
00070 int iteracoes = 1;
00071 
00072 #define velocidade_jog 20
00073 #define velocidade_padrao 20
00074 #define velocidade_lenta 100
00075 #define velocidade_mais_lenta 300
00076 #define velocidade_rapida 10
00077 
00078 int velocidade = velocidade_padrao;
00079 float tempo_acionado;
00080 //--------------------------------
00081 
00082 //------Varíaveis Juliano---------
00083 InterruptIn button_UP(D13);//A5);
00084 InterruptIn button_DOWN(A3);//A4);
00085 /*InterruptIn enter(USER_BUTTON);*/
00086 
00087 TextLCD lcd(D2, D3, D4, D5, D6, D7, TextLCD::LCD20x4); // rs, e, d4-d7
00088 
00089 //Listas Programa e posicao atual do bico
00090 int posicao[3] = {0,0,0};
00091 double passo = 0.0015625;
00092 float passox = 0.0009375f;
00093 float Px;
00094 int trajetoriax[100] = {0,0,0};
00095 int trajetoriay[100] = {0,0,0};
00096 int trajetoriaz[100] = {0,0,0};
00097 int Pcola[100] = {0,1,2,2,1,2,2,2,1,1};
00098 int Pcola_quant[100] = {0,1,2,2,2,2,1,2,2,1};
00099 
00100 int tam_pontos = 2;
00101 
00102 //Variaveis auxiliares
00103 int fim = 3;
00104 int i = 0;
00105 int aux = 0;
00106 int escolha = 0;
00107 
00108 //Listas de menus e variaveis relacionadas aos menus
00109 char* tela_Inicial[6] = {"------Klaus-------","Programa","Referenciar","Teste Vazao"};
00110 char* tela_Programar[5] = {"Voltar","Iniciar Programa","Editar Programa","Novo Programa"};
00111 char* tela_Informacoes[10] = {"Voltar","KLAUS","Desenvolvedores:","Giovana Lemes","Andre Annunziato","Anna","Ana Henrique","Arthur Rizzo","Juliano Nassar"};
00112 char* tela_Editar[4] = {"Voltar","Redefinir","Cola:","Quant:"};
00113 char* tela_Cola_Quant[3] = {"Padrao","Pouco","Muita"};
00114 char* tela_Cola[3] = {"Nao","Ponto","trajeto"};
00115 int tam_Editar = 4;
00116 int tam_Inicial = 4;
00117 int tam_Programar = 4;
00118 int tam_Informacoes = 9;
00119 int tam_Cola= 3;
00120 int tam_Cola_Quant = 3;
00121 int tam;
00122 int select = 0;
00123 int select1 = 0;
00124 //Posicao do cursor
00125 int cursor_row = 0;
00126 int cursor_column = 0;
00127 
00128 //Flags para rodar funcoes
00129 bool flagMenu = 1;
00130 bool flagSelect = 0;
00131 bool referencia = 0;
00132 
00133 
00134 // ------------------------ Movimentação -----------------------------
00135 void atualiza_posicao(int eixo, bool dir) {  // eixo: X=0 Y=1 Z=2
00136     if(dir == 1){
00137         posicao[eixo] = posicao[eixo]+ 1;
00138     }
00139     else{
00140         posicao[eixo] = posicao[eixo]- 1;
00141     }
00142 }
00143 void movimentax(bool enable,bool dir,int velocidade){
00144         if(posicao[0]<0 && dir == 0 && referencia ==0 || fdcx1 == 1 && dir ==0 && referencia == 0 || fdcx2 == 1 && dir ==1){
00145             enableX = 1;
00146             }
00147         else{
00148             enableX=enable;
00149             dirX = dir;
00150             stepX = !stepX;
00151             atualiza_posicao(0,dir);
00152             wait_us(velocidade);
00153             stepX = !stepX;
00154             wait_us(velocidade);
00155         }
00156 }
00157 
00158 void movimentay(bool enable,bool dir,int velocidade){
00159         if(posicao[1]<0 && dir == 0 && referencia ==0 || fdcy1 == 1 && dir ==0 && referencia == 0 || fdcy2 == 1 && dir ==1){
00160             enableY = 1;
00161             }
00162         else{
00163             enableY=enable;
00164             dirY = dir;
00165             stepY = !stepY;
00166             atualiza_posicao(1,dir);
00167             wait_us(velocidade);
00168             stepY = !stepY;
00169             wait_us(velocidade);
00170         }
00171 }
00172 
00173 void movimentaz(bool enable,bool dir,int velocidade){
00174         if(posicao[2]>0 && dir == 1 && referencia ==0 || fdcz1 == 1 && dir ==1 && referencia == 0  || fdcz2 == 1 && dir ==0){
00175             enableZ = 1;
00176             }
00177         else{
00178             enableZ=enable;
00179             dirZ = dir;
00180             stepZ = !stepZ;
00181             atualiza_posicao(2,dir);
00182             wait_us(velocidade);
00183             stepZ = !stepZ;
00184             wait_us(velocidade);
00185         }
00186     
00187 }
00188 //------------------------Válvula----------------------------------
00189 
00190 void aciona_valvula(){
00191         Valvula_embolo = 1;
00192         Valvula_ponta = 0;
00193     }
00194     
00195 void desliga_valvula(){
00196         Valvula_embolo = 0;
00197         Valvula_ponta = 1;
00198     }
00199 
00200 void aciona_eixos()
00201 {
00202     X.enable_irq();
00203     Y.enable_irq();
00204     Z.enable_irq();
00205     
00206 }
00207 
00208 void desliga_eixos()
00209 {
00210     X.disable_irq();
00211     Y.disable_irq();
00212     Z.disable_irq();
00213 }
00214 //--------------------------------
00215 void pressionado(){
00216         if (printou == 0){
00217                 desliga_valvula();
00218                 enableX = 1;
00219                 enableY = 1;
00220                 enableZ = 1;
00221                 lcd.cls();
00222                 lcd.locate(5,0);
00223                 lcd.printf("EMERGENCIA\n MAQUINA DESLIGADA");
00224                 LedX = 0;
00225                 LedY = 0;
00226                 LedZ = 0;
00227                 desliga_eixos();
00228                 printou = 1;
00229             }
00230     }
00231     
00232 // ------------------- Referenciamento ------------------------------
00233 void posicao_ref(int eixo){
00234     posicao[eixo]= 0;
00235 }
00236 
00237 void referenciamentox(){
00238     if(seguranca){
00239         while(fdcx1 == 0 && check_cancela){
00240             if (seguranca){
00241             movimentax(0,0,velocidade_rapida);      // 1 = pra esquerda, pra porta
00242             }
00243             else{
00244                 break;
00245                 }   
00246         }
00247         if(seguranca){wait(0.1);}
00248         int i = 0;
00249         while (i<10000 && check_cancela){
00250             if (seguranca){
00251             movimentax(0,1,velocidade_padrao);
00252             i=i+1;
00253             }
00254             else{
00255                 break;
00256                 }   
00257             }
00258         if(seguranca){wait(0.1);}
00259         while (fdcx1 == 0 && check_cancela){
00260             if (seguranca){
00261             movimentax(0,0,velocidade_lenta);
00262             }
00263             else{
00264                 break;
00265                 }   
00266             }
00267         if(seguranca){wait(0.1);}
00268         i = 0;
00269         while (i < 5000 && check_cancela){
00270             if (seguranca){
00271             movimentax(0,1,velocidade_lenta);
00272             i=i+1;
00273             }
00274             else{
00275                 break;
00276                 }   
00277             }
00278         if(seguranca){wait(0.1);}
00279         while (fdcx1 == 0 && check_cancela){
00280             if (seguranca){
00281             movimentax(0,0,velocidade_mais_lenta);
00282             }
00283             else{
00284                 break;
00285                 }   
00286             }
00287         if(seguranca){
00288             wait(0.1);
00289             enableX = 1;
00290             posicao_ref(0);
00291             }
00292         else{
00293             pressionado();
00294             }
00295         }
00296     else{
00297         pressionado();
00298         }
00299     
00300 }
00301 
00302 
00303 void referenciamentoy(){
00304     while(fdcy1 == 0 && check_cancela){
00305         if (seguranca){
00306         movimentay(0,0,velocidade_rapida);          // 1 = pra direita -> mais pra perto de nós  // aplicar seguranca x
00307         }
00308         else{
00309             pressionado();
00310             break;
00311             }   
00312     }
00313     if(seguranca){wait(0.1);}
00314     int i = 0;
00315     while (i<10000 && check_cancela){
00316         if (seguranca){
00317         movimentay(0,1,velocidade_padrao);
00318         i=i+1;
00319         }
00320         else{
00321             pressionado();
00322             break;
00323             }   
00324         }
00325     if(seguranca){wait(0.1);}
00326     while (fdcy1 == 0 && check_cancela){
00327         if (seguranca){
00328         movimentay(0,0,velocidade_lenta);
00329         }
00330         else{
00331             pressionado();
00332             break;
00333             }   
00334         }
00335     if(seguranca){wait(0.1);}
00336     i = 0;
00337     while (i < 5000 && check_cancela){
00338         if (seguranca){
00339         movimentay(0,1,velocidade_lenta);
00340         i=i+1;
00341         }
00342         else{
00343             pressionado();
00344             break;
00345             }   
00346         }
00347     if(seguranca){wait(0.1);}
00348     while (fdcy1 == 0 && check_cancela){
00349         if (seguranca){
00350         movimentay(0,0,velocidade_mais_lenta);
00351         }
00352         else{
00353             pressionado();
00354             break;
00355             }   
00356         }
00357     if(seguranca){wait(0.1);}
00358     enableY = 1;
00359     posicao_ref(1);
00360     
00361 }
00362 
00363 
00364 void referenciamentoz(){
00365     while(fdcz1 == 0 && check_cancela){
00366         if (seguranca){
00367             movimentaz(0,1,velocidade_padrao);   
00368         } 
00369         else{
00370             pressionado();
00371             break;
00372             }      
00373     }
00374     if(seguranca){wait(0.1);}
00375     int i = 0;
00376     while (i<10000 && check_cancela){
00377         if (seguranca){
00378             movimentaz(0,0,velocidade_padrao);
00379             i=i+1;
00380         }
00381         else{
00382             pressionado();
00383             break;
00384             }    
00385         }
00386     if(seguranca){wait(0.1);}
00387     while (fdcz1 == 0 && check_cancela){
00388         if (seguranca){
00389         movimentaz(0,1,velocidade_lenta);
00390         }
00391         else{
00392             pressionado();
00393             break;
00394             }    
00395         }
00396     if(seguranca){wait(0.1);}
00397     i = 0;
00398     while (i < 5000 && check_cancela){
00399         if (seguranca){
00400         movimentaz(0,0,velocidade_lenta);
00401         i=i+1;
00402         }
00403         else{
00404             pressionado();
00405             break;
00406             } 
00407         }
00408     if(seguranca){wait(0.1);}
00409     while (fdcz1 == 0 && check_cancela){
00410         if (seguranca){
00411         movimentaz(0,1,velocidade_mais_lenta);
00412         }
00413         else{
00414             pressionado();
00415             break;
00416             } 
00417         }
00418     wait(0.1);
00419     enableZ = 1;
00420     posicao_ref(2);
00421     //lcd.cls();
00422     
00423 }
00424 
00425 void referenciamento(){
00426     referencia = 1;
00427     referenciamentox();
00428     referenciamentoy();
00429     referenciamentoz();
00430     referencia = 0;
00431     }
00432 
00433 //------------------------------------------------------------
00434 void cancela()
00435 {
00436     check_cancela = 0;
00437     desliga_eixos();
00438     LedX = 0;
00439     LedY= 0;
00440     LedZ= 0;
00441 }
00442 
00443 void disable_buttons()
00444 {
00445     button_UP.disable_irq();
00446     button_DOWN.disable_irq();
00447     enter.disable_irq();
00448 }
00449     
00450 void enable_buttons()
00451 {
00452     button_UP.enable_irq();
00453     button_DOWN.enable_irq();
00454     enter.enable_irq();
00455     
00456 }
00457 
00458 //Cursor para cima e atualiza o Menu
00459 void change_menu_UP(void)
00460 {
00461     flagMenu = !flagMenu;
00462     cursor_row-=1;
00463 }
00464     
00465 //Cursor para baixo e atualiza o Menu    
00466 void change_menu_DOWN(void)
00467 {
00468     flagMenu = !flagMenu;
00469     cursor_row+=1;
00470 }
00471 
00472 //Seleciona o menu
00473 void select_menu(void)
00474 {  
00475     flagMenu = !flagMenu;
00476     flagSelect = !flagSelect;
00477 }  
00478     
00479 void define_fim(int limite)
00480 {
00481     lcd.cls();
00482     if(select == 0 && select1 ==0)
00483     {
00484      if (cursor_row >= 3)
00485         {
00486             fim = cursor_row;
00487             i = cursor_row - 3;
00488         }
00489      if (cursor_row <1)
00490         {
00491             fim = tam-1;
00492             cursor_row = tam-1;
00493             i = cursor_row - 3;
00494         }  
00495      if (cursor_row >= tam)
00496         {
00497             cursor_row = 1;
00498             fim = 3;
00499             i = 0;
00500         }
00501      if (tam < 4)
00502         {
00503             fim = tam-1;
00504             i= 0;
00505         }
00506     }
00507     else
00508     {
00509         if (cursor_row >= 3)
00510         {
00511             fim = cursor_row;
00512             i = cursor_row - 3;
00513         } 
00514         if (cursor_row <limite)
00515         {
00516             fim = limite + tam-1;
00517             cursor_row = limite + tam-1;
00518             i = cursor_row - 3 - limite;
00519         }       
00520         if (cursor_row >= tam+limite)
00521         {
00522             cursor_row = limite;
00523             fim = 3-limite;
00524             i = 0;
00525             
00526         }
00527         if (tam < 4)
00528         {
00529             fim = tam-1;
00530             i= 0;
00531         }
00532         else
00533         {
00534             fim = 3;
00535             i = 0;
00536         }
00537     }
00538 }
00539 
00540 void posiciona_cursor(int column)
00541 {
00542     if (cursor_row >3)
00543     {
00544      lcd.locate(column,3);   
00545     }
00546     else
00547     {
00548         lcd.locate(column,cursor_row);
00549     }
00550     lcd.printf(">");
00551     aux = 0;
00552     i = 0;
00553     wait(0.15);
00554 }
00555 
00556 //Mostra o menu inicial
00557 void Menu_Inicial()
00558 { 
00559     tam = tam_Inicial;  
00560     define_fim(0);
00561     while(i<=fim)
00562     {
00563         lcd.locate(1,aux);
00564         lcd.printf(tela_Inicial[i]);
00565         i+=1;
00566         aux+=1;
00567     }  
00568     posiciona_cursor(0);
00569 }    
00570 
00571 //Mostra o menu progamar
00572 void Menu_Programar()
00573 { 
00574     tam = tam_Programar;  
00575     define_fim(0);
00576     while(i<=fim)
00577     {
00578         lcd.locate(1,aux);
00579         lcd.printf(tela_Programar[i]);
00580         i+=1;
00581         aux+=1;
00582     }  
00583     posiciona_cursor(0);
00584 } 
00585 
00586 void edit_ponto()
00587 {
00588     select1 = -1;
00589     cursor_row = 0;
00590     int dir = 0;
00591     int save_pos = 0;
00592     while(check_cancela)
00593     {   
00594         if(seguranca)
00595         {
00596             if(flagMenu)
00597             {
00598             lcd.cls();
00599             disable_buttons();
00600             
00601             if(flagSelect)
00602             {
00603                 select1 = cursor_row;
00604                 flagSelect = !flagSelect;
00605             }
00606             
00607             if (select1 == 0)
00608             {
00609                 flagMenu = 0;
00610                 break;    
00611             }
00612             
00613             switch(select1)
00614             {
00615                     
00616                 case 1:
00617                 wait(0.2);
00618                 flagSelect = 0;
00619                 flagMenu = 1;
00620                 enable_buttons();
00621                 
00622                     while(check_cancela)
00623                     {
00624                         if(seguranca)
00625                         {
00626                             if(flagMenu)
00627                             {
00628                                 disable_buttons();
00629                                 if (flagSelect)
00630                                 {
00631                                     select1 = -1;
00632                                     cursor_row = select - 3;
00633                                     flagSelect = !flagSelect;
00634                                     break;
00635                                 }
00636                                 
00637                                 aciona_eixos();
00638 
00639                                 if (mais==1)
00640                                 {
00641                                     dir = 1;
00642                                 }
00643                                 else if (menos==1)
00644                                 {
00645                                     dir = 0;
00646                                 }
00647                                 
00648                                 if (mais ==1 || menos==1)
00649                                 {
00650                                        if(seguranca){
00651                                         lcd.cls();
00652                                         lcd.locate(0,1);
00653                                         if(continuax && posicao[0]<=0 && dir == 0|| continuax && fdcx1 == 1 && dir ==0){
00654                                             lcd.printf("Final do curso x \n      disponivel");
00655                                         }
00656                                         else if (continuax){
00657                                             lcd.printf("Movimentando eixo x");
00658                                             }
00659                                         else if(continuay && posicao[1]<0 && dir == 0 || continuay && fdcy1 == 1 && dir ==0){
00660                                             lcd.printf("Final do curso y \n      disponivel");
00661                                             }
00662                                         else if(continuay){
00663                                             lcd.printf("Movimentando eixo y");
00664                                         }
00665                                         else if(continuaz && posicao[2]<0 && dir == 0 || continuaz && fdcz1 == 1 && dir ==0){
00666                                             lcd.printf("Final do curso z \n      disponivel");
00667                                             }
00668                                         else if (continuaz){
00669                                             lcd.printf("Movimentando eixo z");
00670                                         }
00671                                         else{
00672                                             lcd.locate(2,1);
00673                                             lcd.printf("Selecione um eixo");
00674                                             }
00675                                     }
00676                                     else{
00677                                         pressionado();
00678                                         }
00679                                 }
00680                                 
00681                                 while(mais ==1 || menos==1 && check_cancela)
00682                                 {   if(seguranca)
00683                                     {
00684                                         if(continuax)
00685                                         {
00686                                             movimentax(0,dir,velocidade_jog);
00687                                         }
00688                                         else if(continuay)
00689                                         {
00690                                             movimentay(0,dir,velocidade_jog);
00691                                         }
00692                                         else if(continuaz)
00693                                         {
00694                                             movimentaz(0,dir,velocidade_jog);
00695                                         }
00696                                     }
00697                                     else
00698                                     {
00699                                         pressionado();
00700                                         break;
00701                                     }
00702                                 }
00703                                 if(seguranca)
00704                                 {
00705                                     lcd.cls();
00706                                     enableX = 1;
00707                                     enableY = 1;
00708                                     enableZ = 1;
00709                                     lcd.locate(0,0);
00710                                     lcd.printf("x:");
00711                                     lcd.locate(0,1);
00712                                     lcd.printf("%.2f",posicao[0]*passox);
00713                                     lcd.locate(7,0);
00714                                     lcd.printf("y:");
00715                                     lcd.locate(7,1);
00716                                     lcd.printf("%.2f",posicao[1]*passo);
00717                                     lcd.locate(14,0);
00718                                     lcd.printf("z:");
00719                                     lcd.locate(14,1);
00720                                     lcd.printf("%.2f",posicao[2]*passo);
00721                                     
00722                                     lcd.locate(0,3);
00723                                     lcd.printf(">Definir Ponto %d",select - 2);
00724                                 }
00725                                 else
00726                                 {
00727                                     pressionado();
00728                                 }
00729                                 enable_buttons();
00730                                 flagMenu = !flagMenu;
00731                             }
00732                         }
00733                         
00734                         else
00735                         {
00736                             save_pos = select;
00737                             while(!seguranca)
00738                             {
00739                             pressionado();
00740                             }
00741                             seguranca = 1;
00742                             select1 = -1;
00743                             select = save_pos;
00744                             cursor_row = 0;
00745                             flagMenu = 0;
00746                             printou = 0;
00747                             break;
00748                         }
00749                     } 
00750             LedX = 0;
00751             LedY = 0;
00752             LedZ= 0;           
00753             
00754             if(check_cancela)
00755             {
00756             trajetoriax[select-3] = posicao[0];
00757             trajetoriay[select-3] = posicao[1];
00758             trajetoriaz[select-3] = posicao[2];
00759             select1 = -1;
00760             cursor_row = select - 3;
00761             }
00762             LedX = 0;
00763             LedY = 0;
00764             LedZ = 0;
00765             check_cancela = 1;
00766             break;
00767             case 2:
00768             Pcola[select-3] += 1;
00769             if (Pcola[select-3]>2)
00770             {
00771             Pcola[select-3] = 0;    
00772             }
00773             if (Pcola[select-3]>1 && select-3 ==0)
00774             {
00775             Pcola[select-3] = 0;    
00776             }
00777             break;  
00778             case 3:
00779             Pcola_quant[select-3] += 1;
00780             if (Pcola_quant[select-3]>2)
00781             {
00782             Pcola_quant[select-3] = 0;
00783             }
00784             break;      
00785             }
00786             select1 = -1;
00787             
00788             switch(Pcola[select-3])
00789             {
00790             case 0:
00791             tela_Editar[2] = "Cola:nao";
00792             break;
00793             case 1:
00794             tela_Editar[2] ="Cola:ponto";
00795             break;
00796             case 2:
00797             tela_Editar[2] ="Cola:traj";
00798             break;
00799             }
00800             switch(Pcola_quant[select-3])
00801             {
00802             case 0:
00803             tela_Editar[3] ="Qtd:Padr";
00804             break;
00805             case 1:
00806             tela_Editar[3] ="Qtd:pouco";
00807             break;
00808             case 2:
00809             tela_Editar[3] ="Qtd:muito";
00810             break;
00811             } 
00812             //--------------
00813             tam = tam_Editar;
00814             if(Pcola[select-3] == 0)
00815             {
00816             tam -=1;   
00817             }
00818             define_fim(0);
00819             
00820             lcd.locate(12,0);
00821             lcd.printf("PONTO %d",select-2);
00822             lcd.locate(12,1);
00823             lcd.printf("x:%3.2f",trajetoriax[select-3]*passo);
00824             lcd.locate(12,2);
00825             lcd.printf("y:%3.2f",trajetoriay[select-3]*passo);
00826             lcd.locate(12,3);
00827             lcd.printf("z:%3.2f",trajetoriaz[select-3]*passo);
00828             
00829             while(i<=fim)
00830             {
00831                 lcd.locate(1,aux);
00832                 lcd.printf(tela_Editar[i]);
00833                 i+=1;
00834                 aux+=1;
00835             }  
00836             posiciona_cursor(0);
00837             LedX = 0;
00838             LedY = 0;
00839             LedZ= 0;
00840             flagMenu = !flagMenu;
00841             enable_buttons();
00842             }
00843             //--------------   
00844         }
00845         else{
00846             pressionado();
00847             break;
00848             }
00849     }
00850     select1 = 0;
00851     flagMenu = 0;
00852     check_cancela = 1;
00853 }
00854 
00855 //Mostra Menu Editar
00856 void Programar_editar()
00857 {
00858     bool k = 0;
00859     lcd.cls();
00860     cursor_row=1;
00861     flagMenu = 1;
00862     enable_buttons();
00863     select = -1;
00864     while(check_cancela)
00865     {
00866         if(seguranca){
00867     
00868             if(flagMenu)
00869             {
00870                 disable_buttons();
00871                 
00872                 if (flagSelect)
00873                 {
00874                     select = cursor_row;
00875                     flagSelect = !flagSelect;
00876     //--------define_fim personalizado------------
00877                     switch(select)
00878                     {   case 0:
00879                         select = 1;
00880                         select1 = 0;
00881                         escolha = -1;
00882                         cursor_row = 1;
00883                         flagMenu = 0;
00884                         k = 1;
00885                         break;
00886                         case 1:
00887                         if (tam_pontos >0)
00888                         {
00889                             tam_pontos -= 1;
00890                             flagMenu = 0;
00891                         }
00892                         break;
00893                         case 2:
00894                         select1 = -1;
00895                         trajetoriax[tam_pontos] = posicao[0];
00896                         trajetoriay[tam_pontos] = posicao[1];
00897                         trajetoriaz[tam_pontos] = posicao[2];
00898                         Pcola[tam_pontos] = 0;
00899                         Pcola_quant[tam_pontos] = 0;
00900                         
00901                         tam_pontos += 1;
00902                         select = tam_pontos+2;
00903                         
00904                         edit_ponto();
00905                         
00906                         cursor_row = 2;
00907                         select = -1;
00908                         select1 = -1;
00909                         break; 
00910                     }
00911                 }
00912                 if(k)
00913                 {
00914                 break;    
00915                 }
00916                 tam = tam_pontos+2;
00917                 lcd.cls();
00918                 if (select >2)
00919                 {
00920                     select1 = -1;
00921                     
00922                     edit_ponto();
00923                     
00924                     cursor_row = select;
00925                     select = -1;
00926                     select1 = -1;
00927                     
00928                 }
00929                 else
00930                 {
00931                     
00932                     if (cursor_row <3)
00933                     {
00934                         fim = 3;
00935                         i = 0;
00936                     } 
00937                     
00938                     if (cursor_row >= 3)
00939                     {
00940                         fim = cursor_row;
00941                         i = cursor_row - 3;
00942                     } 
00943                     if (cursor_row <0)
00944                     {
00945                         fim = tam;
00946                         cursor_row = tam;
00947                         i = cursor_row - 3;
00948                     }       
00949                     if (cursor_row >= tam+1)
00950                     {
00951                         cursor_row = 0;
00952                         fim = 3;
00953                         i = 0;
00954                     }
00955                     if (tam ==2)
00956                     {
00957                         fim = 2;
00958                         i= 0;
00959                     }
00960                      
00961         //-------------------------
00962                     while(i<=fim && check_cancela )
00963                     {
00964                         switch(i)
00965                         {
00966                              case 0:
00967                              lcd.locate(1,aux);
00968                              lcd.printf("Voltar");
00969                              break;
00970                              case 1:
00971                              lcd.locate(1,aux);
00972                              lcd.printf("exc P%d",tam_pontos);
00973                              break;
00974                              case 2:
00975                              lcd.locate(1,aux);
00976                              lcd.printf("Def P%d",tam_pontos+1);
00977                              break;
00978                         }
00979                         if (i>2)
00980                         {
00981                             lcd.locate(1,aux);
00982                             lcd.printf("P%i",i-2);
00983                             switch(Pcola[i-3])
00984                             {
00985                             case 1:
00986                             lcd.printf(".");
00987                             break;
00988                             case 2:
00989                             lcd.printf("-");
00990                             
00991                             break;
00992                             }
00993                             if (Pcola[i-3]!= 0)
00994                             {
00995                             switch(Pcola_quant[i-3])
00996                             {
00997                             case 0:
00998                             lcd.printf("Padrao");
00999                             break;
01000                             case 1:
01001                             lcd.printf("pouco");
01002                             break;
01003                             case 2:
01004                             lcd.printf("muita");
01005                             break;
01006                             }    
01007                             }
01008                         }
01009                         
01010                         i+=1;
01011                         aux+=1;
01012                     }
01013                     
01014                 }
01015                 flagMenu = !flagMenu;
01016                 
01017                 lcd.locate(12,0);
01018                 lcd.printf("Pos At");
01019                 lcd.locate(12,1);
01020                 lcd.printf("x:%.2f",posicao[0]*passo);
01021                 lcd.locate(12,2);
01022                 lcd.printf("y:%.2f",posicao[1]*passo);
01023                 lcd.locate(12,3);
01024                 lcd.printf("z:%.2f",posicao[2]*passo);
01025                 posiciona_cursor(0);
01026                 enable_buttons();
01027             }
01028         }
01029         else{
01030             pressionado();
01031             break;
01032             }
01033     }
01034     
01035     select = 1;
01036     select1 = 0;
01037     escolha = -1;
01038     cursor_row = 1;
01039     flagMenu = 0;
01040     check_cancela = 1;
01041 } 
01042 
01043 
01044 // ------------------------- Rodando Programa ---------------------------------------
01045 
01046 void rodar_programa(){
01047     int ponto_rodando = 0;
01048     //int cola_inicial = 0
01049     while(ponto_rodando <= tam_pontos-1 && check_cancela){
01050          velocidade = velocidade_padrao;
01051          if(seguranca){
01052             if(Pcola[ponto_rodando] == 2){
01053                 if(Pcola_quant[ponto_rodando] == 1){
01054                     velocidade = velocidade_rapida;
01055                     }
01056                 if(Pcola_quant[ponto_rodando] == 2){
01057                     velocidade = velocidade_lenta;
01058                     }
01059                 aciona_valvula();
01060                 }
01061             if(posicao[2] < trajetoriaz[ponto_rodando]) {
01062                 while(posicao[2] != trajetoriaz[ponto_rodando] && check_cancela){
01063                     if(seguranca){
01064                         movimentaz(0,1, velocidade);
01065                     }
01066                     else{
01067                         pressionado();
01068                         break;
01069                         }
01070                 }
01071             }
01072             enableZ=1;
01073                 while(posicao[0] != trajetoriax[ponto_rodando] && check_cancela){
01074                     if(seguranca){
01075                         if(posicao[0]< trajetoriax[ponto_rodando]){
01076                             movimentax(0,1, velocidade_jog);
01077                             } 
01078                         if(posicao[0]> trajetoriax[ponto_rodando]){
01079                             movimentax(0,0, velocidade);
01080                             } 
01081                     }
01082                     else{
01083                         pressionado();
01084                         break;
01085                         }
01086                 }
01087                 
01088                 enableX= 1;
01089                 while(posicao[1] != trajetoriay[ponto_rodando] && check_cancela){
01090                     if(seguranca){
01091                         if(posicao[1]< trajetoriay[ponto_rodando]){
01092                             movimentay(0,1, velocidade);
01093                             } 
01094                         if(posicao[1]> trajetoriay[ponto_rodando]){
01095                             movimentay(0,0, velocidade);
01096                             } 
01097                     }
01098                     else{
01099                         pressionado();
01100                         break;
01101                         }
01102                 }
01103                 enableY=1;
01104                 if(posicao[2] > trajetoriaz[ponto_rodando]) {
01105                     while(posicao[2] != trajetoriaz[ponto_rodando] && check_cancela){
01106                         if(seguranca){
01107                         movimentaz(0,0, velocidade); 
01108                         }
01109                         else{
01110                         pressionado();
01111                         break;
01112                         }
01113                     }
01114                 }
01115                 enableZ=1;
01116                 
01117             
01118             if(seguranca){
01119                 wait(1);
01120             }
01121             if(Pcola[ponto_rodando] == 1){
01122                 aciona_valvula();
01123                 if(Pcola_quant[ponto_rodando] == 0){
01124                     tempo_acionado =0.3;
01125                     }
01126                 else if (Pcola_quant[ponto_rodando] == 1){
01127                     tempo_acionado =0.5;
01128                     }
01129                 else{
01130                     tempo_acionado =0.1;
01131                     }
01132                 wait(tempo_acionado);
01133                 desliga_valvula();
01134                 }
01135             if(Pcola[ponto_rodando] == 2){
01136                 desliga_valvula();
01137                 }
01138             ponto_rodando++;
01139             }
01140         else{
01141             pressionado();
01142             break;
01143             }
01144         
01145     }
01146 }
01147 void sim_nao(char* titulo)
01148 {
01149     if (flagMenu)
01150         {
01151         lcd.cls();
01152         disable_buttons();
01153         if (cursor_row<2)
01154         {
01155             cursor_row= 3;     
01156         }
01157         if (cursor_row>3)
01158         {
01159             cursor_row = 2;
01160         }
01161         lcd.locate(0,0);
01162         lcd.printf(titulo);
01163         lcd.locate(1,2);
01164         lcd.printf("sim");
01165         lcd.locate(1,3);
01166         lcd.printf("nao");
01167         posiciona_cursor(0);
01168         if (flagSelect)
01169         {
01170             escolha = cursor_row-1;
01171             flagSelect = !flagSelect;
01172         }
01173             
01174         flagMenu = !flagMenu;
01175             
01176         enable_buttons();
01177         }
01178     
01179     
01180 }
01181 
01182 void Referenciar()
01183 {
01184     lcd.cls();
01185     select = 0;
01186     select1 = 0;
01187     escolha = 0;
01188     cursor_row =2;
01189     flagMenu = 1;
01190     flagSelect = 0;
01191     
01192     enable_buttons();
01193     while(check_cancela)
01194     {  
01195         if(seguranca){
01196             printou = 0;
01197             sim_nao("Deseja Referenciar?");
01198             
01199             if (escolha ==1)
01200             {
01201                 disable_buttons();
01202                 lcd.cls();
01203                 lcd.locate(0,1);
01204                 lcd.printf("  REFERENCIANDO...");
01205                 referenciamento();
01206                 escolha = 0;
01207                 cursor_row =1;
01208                 enable_buttons();
01209                 flagMenu = 1; 
01210                 break;
01211             }
01212             
01213             if (escolha ==2)
01214             {
01215                 lcd.cls();
01216                 escolha = 0;
01217                 cursor_row =1;
01218                 select = 0;
01219                 select1 = 0;
01220                 flagMenu=1;
01221                 break;      
01222             }
01223         }
01224         else{
01225             pressionado();
01226             }
01227     
01228     }
01229     
01230     if(!check_cancela)
01231     {
01232         lcd.cls();
01233         lcd.locate(1,1);
01234         lcd.printf("operacao cancelada");
01235         wait(1.2);
01236     }
01237     escolha = 0;
01238     cursor_row =1;
01239     select = 0;
01240     select1 = 0;
01241     flagMenu=1;
01242     check_cancela =1;
01243     
01244 }
01245 void teste_vazao(){
01246     if(seguranca){
01247         while(posicao[0] > 0 && check_cancela){
01248             if (seguranca){
01249             movimentax(0,0,velocidade_padrao);      // 1 = pra esquerda, pra porta
01250             }
01251             else{
01252                 pressionado();
01253                 break;
01254                 }   
01255         }
01256         while(posicao[1] > 0 && check_cancela){
01257             if (seguranca){
01258             movimentay(0,0,velocidade_padrao);      // 1 = pra esquerda, pra porta
01259             }
01260             else{
01261                 pressionado();
01262                 break;
01263                 }   
01264         }
01265         while(posicao[2] > 0 && check_cancela){
01266             if (seguranca){
01267             movimentaz(0,1,velocidade_padrao);      // 1 = pra esquerda, pra porta
01268             }
01269             else{
01270                 pressionado();
01271                 break;
01272                 }   
01273         }
01274         if(seguranca){aciona_valvula();}
01275         if(seguranca){wait(1);}
01276         if(seguranca){desliga_valvula();}
01277     }
01278     else{
01279         pressionado();
01280         }
01281     }
01282 
01283 void Vazao()
01284 {
01285     lcd.cls();
01286     select = 0;
01287     select1 = 0;
01288     escolha = 0;
01289     cursor_row =2;
01290     flagMenu = 1;
01291     flagSelect = 0;
01292     
01293     enable_buttons();
01294     while(check_cancela)
01295     {  
01296         if(seguranca){
01297             printou = 0;
01298             sim_nao("Deseja testar vazao?");
01299             
01300             if (escolha ==1)
01301             {
01302                 disable_buttons();
01303                 lcd.cls();
01304                 lcd.locate(0,1);
01305                 lcd.printf("  TESTANDO...");
01306                 teste_vazao();
01307                 escolha = 0;
01308                 cursor_row =1;
01309                 enable_buttons();
01310                 flagMenu = 0; 
01311                 break;
01312             }
01313             
01314             if (escolha ==2)
01315             {
01316                 lcd.cls();
01317                 escolha = 0;
01318                 cursor_row =1;
01319                 select = 0;
01320                 select1 = 0;
01321                 flagMenu=0;
01322                 break;      
01323             }
01324         }
01325         else{
01326             pressionado();
01327             }
01328     
01329     }
01330     
01331     if(!check_cancela)
01332     {
01333         lcd.cls();
01334         lcd.locate(1,1);
01335         lcd.printf("operacao cancelada");
01336         wait(1.2);
01337     }
01338     
01339     lcd.cls();
01340     escolha = 0;
01341     cursor_row =1;
01342     select = 0;
01343     select1 = 0;
01344     flagMenu=0;
01345     check_cancela = 1;
01346 }
01347 
01348 
01349 void eixox(){
01350     continuax = 1;
01351     continuay = 0;
01352     continuaz = 0;
01353     LedX = 1;
01354     LedY = 0;
01355     LedZ = 0;
01356 }
01357 void eixoy(){
01358     continuax = 0;
01359     continuay = 1;
01360     continuaz = 0;
01361     LedX = 0;
01362     LedY = 1;
01363     LedZ = 0;
01364 }
01365     
01366 void eixoz(){
01367     continuax = 0;
01368     continuay = 0;
01369     continuaz = 1;
01370     
01371     LedX = 0;
01372     LedY = 0;
01373     LedZ = 1;
01374 }
01375 
01376  
01377 void programar()
01378 {
01379     
01380     tam_pontos = 0;
01381     escolha = 0;
01382     select = 0;
01383     select1 = 0;
01384     lcd.cls();
01385     flagMenu = 1;
01386     flagSelect = 0;
01387     cursor_row = 0;
01388     int dir = 0;
01389     bool k = 0;
01390     enable_buttons();
01391     while(check_cancela)
01392     {
01393         if(seguranca){
01394             if(flagMenu)
01395             {
01396                 disable_buttons();
01397                 if(flagSelect)
01398                 {
01399                     wait(0.2);
01400                     select +=1;
01401                     select1 = cursor_row;
01402                     escolha = cursor_row-1;
01403                     flagSelect = !flagSelect;
01404                     cursor_row = 1;
01405                 }
01406                 
01407                 switch(select)
01408                 {
01409                     case 0:
01410                     
01411                     aciona_eixos();
01412                     if (mais==1)
01413                      {
01414                         dir = 1;
01415                     }
01416                     else if (menos==1)
01417                     {
01418                         dir = 0;
01419                     }
01420                     
01421                     if (mais ==1 || menos==1)
01422                     {   if(seguranca){
01423                             lcd.cls();
01424                             lcd.locate(0,1);
01425                             if(continuax && posicao[0]<=0 && dir == 0|| continuax && fdcx1 == 1 && dir ==0|| continuax && fdcx2 == 1 && dir ==1){
01426                                 lcd.printf("Final do curso x \n      disponivel");
01427                             }
01428                             else if (continuax){
01429                                 lcd.printf("Movimentando eixo x");
01430                                 }
01431                             else if(continuay && posicao[1]<0 && dir == 0 || continuay && fdcy1 == 1 && dir ==0 || continuay && fdcy2 == 1 && dir ==1){
01432                                 lcd.printf("Final do curso y \n      disponivel");
01433                                 }
01434                             else if(continuay){
01435                                 lcd.printf("Movimentando eixo y");
01436                             }
01437                             else if(continuaz && posicao[2]>0 && dir == 1 || continuaz && fdcz1 == 1 && dir ==1 || continuaz && fdcz2 == 1 && dir ==0){
01438                                 lcd.printf("Final do curso z \n      disponivel");
01439                                 }
01440                             else if (continuaz){
01441                                 lcd.printf("Movimentando eixo z");
01442                             }
01443                             else{
01444                                 lcd.locate(2,1);
01445                                 lcd.printf("Selecione um eixo");
01446                                 }
01447                         }
01448                         else{
01449                             pressionado();
01450                             }
01451                     }
01452                     
01453                     while(mais ==1 || menos==1 && check_cancela)
01454                     {   if(seguranca){
01455                             if(continuax){
01456                                 movimentax(0,dir,velocidade_jog);
01457                                 }
01458                             else if(continuay){
01459                                 movimentay(0,dir,velocidade_jog);
01460                                 }
01461                             else if(continuaz){
01462                                 movimentaz(0,dir,velocidade_jog);
01463                             }
01464                         }
01465                         else{
01466                             pressionado();
01467                             break;
01468                             }
01469                     }
01470                     if(seguranca){
01471                         lcd.cls();
01472                         enableX = 1;
01473                         enableY = 1;
01474                         enableZ = 1;
01475                         lcd.locate(0,0);
01476                         lcd.printf("x:");
01477                         lcd.locate(0,1);
01478                         Px = posicao[0]*passox;
01479                         lcd.printf("%.1f",Px);
01480                         lcd.locate(7,0);
01481                         lcd.printf("y:");
01482                         lcd.locate(7,1);
01483                         lcd.printf("%.1f",posicao[1]*passo);
01484                         lcd.locate(14,0);
01485                         lcd.printf("z:");
01486                         lcd.locate(14,1);
01487                         lcd.printf("%.1f",posicao[2]*passo);
01488                         
01489                         lcd.locate(0,3);
01490                         lcd.printf(">Definir Ponto %d",tam_pontos+1);
01491                     }
01492                     else{
01493                         pressionado();
01494                         }
01495                     break;
01496                     case 1:
01497                     LedX = 0;
01498                     LedY= 0;
01499                     LedZ= 0;
01500                     desliga_eixos();
01501                     lcd.cls();
01502                     sim_nao("Definir essas\ncoordenadas?");
01503                     flagMenu=1;
01504                     break;
01505                     case 2:
01506                     if (escolha == 2){
01507                         select -=2;
01508                         flagMenu = 0;
01509                         break;
01510                         }
01511                     lcd.cls();
01512                     trajetoriax[tam_pontos] = posicao[0];
01513                     trajetoriay[tam_pontos] = posicao[1];
01514                     trajetoriaz[tam_pontos] = posicao[2];
01515                     if (tam_pontos == 0)
01516                     {
01517                     sim_nao("Depositar cola no   ponto");
01518                     lcd.locate(5,1);
01519                     lcd.printf(" %d?",tam_pontos + 1);
01520                     flagMenu = 1;
01521                     }
01522                     else
01523                     {
01524                         tam = tam_Cola;  
01525                         define_fim(1);
01526                         aux = 1;
01527                         lcd.locate(0,0);
01528                         lcd.printf("Depositar cola?");
01529                         while(i<=fim && check_cancela)
01530                         {
01531                             if(i<2)
01532                             {
01533                             lcd.locate(1,aux);
01534                             lcd.printf(tela_Cola[i]);
01535                             lcd.printf("(P%d)",tam_pontos+1);
01536                             i+=1;
01537                             aux+=1;
01538                             }
01539                             else
01540                             {
01541                             lcd.locate(1,aux);
01542                             lcd.printf(tela_Cola[i]);
01543                             lcd.printf("(P%d-",tam_pontos);
01544                             lcd.printf("P%d)",tam_pontos+1);
01545                             i+=1;
01546                             aux+=1;
01547                             }
01548                         }  
01549                     posiciona_cursor(0);
01550                     }
01551                     break;
01552                     case 3:
01553                     lcd.cls();
01554                     if (escolha ==2 && tam_pontos==0)
01555                     {
01556                         Pcola[tam_pontos] = 0;
01557                     }
01558                     else if (select1 >1)
01559                     {
01560                     escolha = 1;
01561                     }
01562                     else
01563                     {
01564                         escolha = 0;    
01565                     }
01566                     
01567                     if (escolha ==1 && select>1)
01568                     {   
01569                         
01570                         Pcola[tam_pontos] = select1 - 1;
01571                         tam = tam_Cola_Quant;  
01572                         define_fim(1);
01573                         aux = 1;
01574                         lcd.locate(0,0);
01575                         lcd.printf("Quantidade de cola?");
01576                         while(i<=fim && check_cancela)
01577                         {
01578                             lcd.locate(1,aux);
01579                             lcd.printf(tela_Cola_Quant[i]);
01580                             i+=1;
01581                             aux+=1;
01582                         }  
01583                     posiciona_cursor(0);
01584                     }
01585                     else
01586                     {
01587                         Pcola[tam_pontos] = 0;    
01588                         Pcola_quant[tam_pontos] = 0;
01589                         flagMenu = 0;
01590                         select+=1;
01591                     }
01592                     
01593                     
01594                     break;
01595                     case 4:
01596                     lcd.cls();
01597                     Pcola_quant[tam_pontos] = select1 - 1;
01598                     sim_nao("Deseja definir mais um ponto?");
01599                     flagMenu = 1;
01600                     break;
01601                     case 5:
01602                     tam_pontos +=1;
01603                     lcd.cls();
01604                     if (escolha ==1)
01605                     {
01606                         select = 0;
01607                         select1 = -1;
01608                     }
01609                     else
01610                     {
01611                         select = 0;
01612                         select1= 0;
01613                         lcd.cls();
01614                         lcd.locate(3,1);
01615                         lcd.printf("Programa Salvo");
01616                         wait(2);
01617                         k = 1;
01618                     }
01619                     flagMenu = 0;
01620                     break;
01621                 }
01622                 enable_buttons();
01623                 if (k)
01624                 {
01625                     break;    
01626                 }
01627             flagMenu= !flagMenu;
01628             }
01629         }
01630         else{
01631             pressionado();
01632             break;
01633             }
01634     }
01635 }
01636  
01637 void novo_programa()
01638 {
01639     
01640     escolha = 0;
01641     check_cancela = 1;
01642     lcd.cls();
01643     lcd.locate(1,0);
01644     lcd.printf("Este processo ira");
01645     lcd.locate(5,1);
01646     lcd.printf("deletar");
01647     lcd.locate(1,2);
01648     lcd.printf("o antigo programa");
01649     wait(3);
01650     lcd.cls();
01651     
01652     while(check_cancela)
01653     {   if(seguranca){
01654             
01655             sim_nao("Criar novo programa?");
01656             if (escolha ==1)
01657             {
01658                 lcd.cls();
01659                 programar();
01660                 select = 1;
01661                 select1 = 0;
01662                 cursor_row = 1;
01663                 flagMenu = 0;
01664                 break;
01665             }
01666             if (escolha == 2)
01667             {
01668                 select = 1;
01669                 select1 = 0;
01670                 cursor_row = 1;
01671                 flagMenu = 0;
01672                 break;
01673             }
01674         }
01675         else{
01676             pressionado();
01677             break;
01678             }
01679         
01680     }
01681     
01682     if (!check_cancela)
01683     {
01684         lcd.cls();
01685         lcd.locate(1,1);
01686         lcd.printf("Operacao cancelada");
01687         wait(1.2);
01688     }
01689     select = 1;
01690     select1 = 0;
01691     cursor_row = 1;
01692     flagMenu = 0;
01693     check_cancela = 1;
01694 } 
01695 
01696 
01697 void desliga(){
01698     seguranca=0;
01699     }
01700 void liga(){
01701     seguranca=1;
01702     flagMenu=1;
01703     select = 0;
01704     select1 = 0;
01705     cursor_row = 1;
01706     }
01707 
01708 int main() {
01709     enableX = 1;
01710     enableY= 1;
01711     enableZ= 1;
01712     
01713     Valvula_embolo = 0;
01714     Valvula_ponta = 1;
01715     
01716     Emergencia.fall(&desliga);
01717     Emergencia.rise(&liga);
01718     
01719     X.rise(&eixox);
01720     Y.rise(&eixoy);
01721     Z.rise(&eixoz);
01722     cancelar.rise(&cancela);
01723     desliga_eixos();
01724     lcd.cls();
01725     
01726     button_UP.rise(&change_menu_UP);
01727     button_DOWN.rise(&change_menu_DOWN);
01728     enter.rise(&select_menu);
01729     if(Emerg){
01730         Referenciar();
01731     }
01732     else{
01733         while(Emerg==0){
01734             if (printou == 0){
01735                 pressionado();
01736             }
01737         }
01738         Referenciar();
01739         }
01740        
01741     
01742     cursor_row = 1;
01743     
01744     while (true)
01745     {
01746         if (seguranca && Emerg){
01747                 printou = 0;
01748                 if(!check_cancela)
01749                     {
01750                         select = 0;
01751                         select1 = 0;
01752                         cursor_row = 1;
01753                         check_cancela = 1;
01754                         flagMenu = 1;
01755                     }
01756                 if (flagMenu)
01757                 {
01758                     
01759                     if (flagSelect)
01760                     {
01761                         check_cancela = 1;
01762                         if (select ==0)
01763                         {
01764                             select = cursor_row;
01765                             cursor_row = 0;
01766                         }
01767                         else if (cursor_row ==0)
01768                         {
01769                             select = 0;
01770                             select1 = 0;
01771                         }
01772                         else if(select !=0 && select1 ==0)
01773                         {
01774                             select1 = select;
01775                             select = cursor_row;
01776                         }
01777                         else
01778                         {
01779                             select1 = cursor_row;
01780                         }
01781                     cursor_row = 1;
01782                     flagSelect = !flagSelect;
01783                     
01784                     }
01785                     
01786                     disable_buttons();
01787                     switch(select1)
01788                     {
01789                      case 0:
01790                      switch(select)
01791                         {
01792                             case 0:
01793                             Menu_Inicial();
01794                             break;
01795                             case 1:
01796                             Menu_Programar();
01797                             break;
01798                             case 2:
01799                             Referenciar();
01800                             if(seguranca){
01801                                 Menu_Inicial();
01802                             }
01803                             break;
01804                             case 3:
01805                             Vazao();
01806                             break;
01807                         };
01808                         break;
01809                         
01810                         case 1:
01811                         int iter = 21;
01812                         switch(select)
01813                             {
01814                             case 0:
01815                             Menu_Inicial();
01816                             break;
01817                             //Iniciar
01818                             case 1:
01819                             lcd.cls();
01820                             lcd.printf("Quantas iteracoes?");
01821                             lcd.locate(7,2);
01822                             lcd.printf("N = ");
01823                             cursor_row = 1;
01824                             flagMenu = 1;
01825                             flagSelect = 0;
01826                             
01827                             while(check_cancela)
01828                             {
01829                                 if(seguranca)
01830                                 {
01831                                     if(flagMenu)
01832                                     {            
01833                                         disable_buttons();
01834                                         if(cursor_row >= 21)
01835                                         {
01836                                             cursor_row = 1;
01837                                         }
01838                                         if(cursor_row <= 0)
01839                                         {
01840                                             cursor_row = 20;    
01841                                         }
01842                                         
01843                                         if(flagSelect)
01844                                         {
01845                                             iteracoes = iter - cursor_row;
01846                                             cursor_row = 1;
01847                                             flagSelect = !flagSelect;
01848                                             break;
01849                                         } 
01850                                         
01851                                         lcd.locate(12,2);
01852                                         lcd.printf(" ");
01853                                         lcd.locate(11,2);
01854                                         lcd.printf("%i", iter - cursor_row);
01855                                         flagMenu = !flagMenu;
01856                                         wait(0.2);
01857                                         enable_buttons();
01858                                     }
01859                                 }
01860                                 else
01861                                 {
01862                                     break;
01863                                 }
01864                                 
01865                             }
01866                             
01867                             disable_buttons();
01868                             lcd.cls();
01869                             lcd.locate(2,1);
01870                             lcd.printf("Rodando codigo");
01871                             lcd.locate(2,2);
01872                             lcd.printf("iteracao:");
01873                             select = 0;
01874                             while(select < iteracoes && check_cancela)
01875                             {
01876                                 if(seguranca){
01877                                 lcd.locate(11,2);
01878                                 lcd. printf("%d",select+1);
01879                                 rodar_programa();
01880                                 select++;
01881                                 }
01882                                 else{
01883                                     pressionado();
01884                                     break;
01885                                     }
01886                             }
01887                             
01888                             if (!check_cancela)
01889                             {
01890                                 lcd.cls();
01891                                 lcd.locate(1,1);
01892                                 lcd.printf("Operacao cancelada");
01893                                 wait(1.2);
01894                             }
01895                             if (!seguranca)
01896                             {
01897                             pressionado();
01898                             }
01899                             check_cancela = 1;
01900                             select1 = 0;
01901                             select = 0;
01902                             flagMenu = 1;
01903                             cursor_row =1;
01904                             select_menu();
01905                             break;
01906                             //Editar
01907                             case 2:
01908                             Programar_editar();
01909                             break;
01910                             //Novo Programa
01911                             case 3:
01912                             novo_programa();
01913                             check_cancela = 1;
01914                             break;
01915                         };
01916                         break;
01917                         
01918                     }
01919                         
01920                     enable_buttons();
01921                     
01922                     flagMenu = !flagMenu;
01923                     
01924                     }
01925             }
01926             else{
01927                 pressionado();
01928                 }
01929         }
01930 }