
Projeto Mecatronico Grupo: Pingos nos I's 2019
Dependencies: mbed Projeto_Mecatronico Projeto_Mecat_Pingos
main.cpp
- Committer:
- ligeiro13
- Date:
- 2019-06-13
- Revision:
- 0:61ea5c9ad2de
File content as of revision 0:61ea5c9ad2de:
#include "mbed.h" #include "TextLCD.h" //#include "LinkedList.h" #define espera 100 #define vel_1 1000 #define vel_2 1000 //bibliteca segmento: TextLCD /* O QUE FAZER 1-aarrumar o print do COLA? qnd ponto modificado 2-arrrumar a listadecola quando ponto modificado */ //---------------------------------------------------------------------------------ENTRADAS E SAIDAS ANALOGICAS--------------------------------------------------------------------------------------------/ //DigitalIn botaoC(PC_1);// //pino entrada botaoC //DigitalIn botaoA(PC_2); // //pino entrada botaoA colar pontos int botaoA=1; int botaoC=1; DigitalIn botao_analog(PC_12); //int botao_analog = 1; AnalogIn eixo_x(A0); AnalogIn eixo_y(A2); DigitalOut enable_x(PA_10);//motor x DigitalOut dir_x(PB_5);//motor x DigitalOut step_x(PB_3);//motor x DigitalIn FimCursoX(PA_6); //entrada fdc eixo x novo DigitalOut enable_y(PB_4);//motor y DigitalOut dir_y(PA_8);//motor y DigitalOut step_y(PB_10);//motor y DigitalIn FimCursoY(PC_8); //entrada fdc eixo y novo DigitalOut enable_z(PA_9);//motor z DigitalOut dir_z(PB_6);//motor z DigitalOut step_z(PC_7);//motor z DigitalIn FimCursoZ(PB_7); //entrada fdc eixo z novo DigitalIn botao_emergencia(PA_13); //entrada B.E. nova DigitalOut aciona_pneu(PC_3);//aciona pneumatica da cola PRESSAO DigitalOut aciona_pneu2(PC_2);//aciona pneumatica da cola VALVULA //----------------------------------IHM TextLCD lcd(PC_13, PA_15, PA_12, PA_11, PB_12, PB_11, TextLCD::LCD20x4); // rs, e , d4-d7 DigitalIn botao_cima(PB_2); DigitalIn botao_enter(PB_1); DigitalIn botao_baixo(PB_15); int menu = 1; // Aqui será a seleção dos menus do IHM int menu_enter = 0;//referenciando menu se refe =1 int menu_enter_2 = 0;//menu 2 ADICONAR PONTOS/ MODIFICAR PONTOS COLAR PONTOS int flag = 1; char strings_x[5]={0,0,0,0,0}; char ident_eixo; int i = 1; //contador de chars int linha = 0;//para descer o " >" int ponto = 0;//valor de um ponto int pontos[10];//numero de pontos int cola[10];//lista para saber se ira aplicar cola entre os pontos int i_c = 0;// indice da lista cola int i_p = 0; //loop i pontos int ultimo_p = 0; int lista_vel[]={1000,700,500};//lista velocidade dos motores int i_v = 0;//indice lista velocidade int vel = 0;//velocidade dos motores int mover_motores = 0;//permite permitir mover os motores int flag_mod = 0;//flag de modificar pontos para add pontos int flag_mod2 = 0;//flag de modificar pontos para add COLA int flag_emergencia = 0;// flag botao de emergencia int flag_emergencia2 = 0;// flag botao de emergencia 2 int vai_emergencia = 0;// variavel para ser usado a funcao " go to" Serial pc(USBTX , USBRX);// band rate é de 1152000 na Serial Port do Tera Term //------------------------------------------------------------------------------------------VARIÁVEIS-------------------------------------------------------------------------------------------------------/ float passo = 1.8f; //1.8 graus por passo float x ; //valor do INPUT analog x float y ;//valor do INPUT analog Y bool refe; //selecionar a rotina de referenciamento bool troca_yz;//troca o eixo y/z int posicao_x; //Posicao do passo atual EIXO X int posicao_y;//Posicao do passo atual EIXO Y int posicao_z;//Posicao do passo atual EIXO Y int i_x = -1; // contador lista x int i_y = -1; // contador lista y int i_z = -1; // contador lista z int pontos_x[10]; //lista de pontos X int pontos_y[10];//lista de pontos Y int pontos_z[10];//lista de pontos Z int add; int pos; int guardar_pontos = 0;//flag para ir ao condicional "guardar pontos" int colar_pontos = 0;//flag para ir ao condicional "ir aos pontos" //LinkedList<float>pontos; //------------------------------------------------------------------------------------------DEFINICAO DAS FUNÇÕES--------------------------------------------------------------------------------------------------------/ float passo_mm_xy (int passo_atual) { float conversao = (passo_atual*3)/200; return conversao; } float passo_mm_z (int passo_atual) { float conversao = (passo_atual*10)/200; return conversao; } void move_inicial(bool dir, float vel, bool fimcurso, int qual_eixo) //dir 0 ou 1 vel em [passos/s] fimcurso x/y qual_eixo x/y/z = 0/1/2 { //vel = (2*1000) / (vel); vel = 1000000 / (vel); vel = vel - espera; if (qual_eixo == 0) { while(FimCursoX == 0) { step_x = 1; wait_us(espera); step_x = 0; wait_us(vel); if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } } }//qual eixo == 0 = X if (qual_eixo == 1) { while(FimCursoY == 0) { step_y = 1; wait_us(espera); step_y = 0; wait_us(vel); if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } } }//qual eixo == 0 = Y if (qual_eixo == 2) { while(FimCursoZ == 0) { step_z = 1; wait_us(espera); step_z = 0; wait_us(vel); if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } } }//qual eixo == 0 = Z } int move(bool dir, float vel,int posicao_xy, int qual_eixo) //dir 0 ou 1 vel em [passos/s] posicao, devolve os passos andados qual_eixo 0/1/2 x/y/z { int passos = 0; int ultimo_passo =0; int parada; //vel = (2*1000) / (vel); vel = 1000000 / (vel); vel = vel - espera; if (enable_x == 0 and qual_eixo == 0 ) //PARA EIXO X { ultimo_passo = posicao_xy; //while ((eixo_x.read() > 0.7 or eixo_x.read() < 0.3f) and posicao_x > -1 ) while ((eixo_x > 0.7 or eixo_x < 0.3f) and posicao_x > -1 ) { step_x = 1; wait_us(espera); step_x = 0; wait_us(vel); passos++; if (dir_x == 0) { parada = ultimo_passo + passos; // pc.printf("dir_x1 \r\n"); } if (dir_x == 1) { parada = ultimo_passo - passos; // pc.printf("dir_x0 \r\n"); } if (parada == 0 or parada == 25000) { break; } } } if (enable_y == 0 and qual_eixo == 1 ) //PARA EIXO Y { ultimo_passo = posicao_xy; //while ((eixo_y.read() > 0.7 or eixo_y.read() < 0.3f) and posicao_y > -1 ) while ((eixo_y > 0.7 or eixo_y < 0.3f) and posicao_y > -1 ) { step_y = 1; wait_us(espera); step_y = 0; wait_us(vel); passos++; //pc.printf("%d \r\n",passos_y); if (dir_y == 0) { parada = ultimo_passo + passos; // pc.printf("dir_y1 \r\n"); } if (dir_y == 1) { parada = ultimo_passo - passos; // pc.printf("dir_y0 \r\n"); } if (parada == 0 or parada == 26000) { break; } //pc.printf("ultimo passo:%d i: %d \r\n",parada,passos); } } if (enable_z == 0 and qual_eixo == 2 ) //PARA EIXO Z { ultimo_passo = posicao_xy; // while ((eixo_y.read() > 0.7 or eixo_y.read() < 0.3f) ) while ((eixo_y > 0.7 or eixo_y < 0.3f) ) { step_z = 1; wait_us(espera); step_z = 0; wait_us(vel); passos++; //pc.printf("%d \r\n",passos_y); if (dir_z == 0) { parada = ultimo_passo + passos; // pc.printf("dir_y1 \r\n"); } if (dir_z == 1) { parada = ultimo_passo - passos; // pc.printf("dir_y0 \r\n"); } if (parada == 0 or parada == 2000) { break; } //pc.printf("ultimo passo:%d i: %d \r\n",parada,passos); } } return passos; } void para()//funçao para desativar o motor { enable_x = 1; } void para_()//funçao para desativar o motor { enable_y = 1; enable_z = 1; } int movepara(int dir, float vel, int passo_,int qual_eixo ) { vel = 1000000 / (vel); vel = vel - espera; int passo_atual = 0; // pc.printf("Passo_local %i, %i ", passo_atual, passo_ ); if (enable_x == 0 and qual_eixo == 0 ) //PARA EIXO X { while (passo_atual != abs(passo_)) { step_x = 1; wait_us(espera); step_x = 0; wait_us(vel); passo_atual++ ; if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } // pc.printf("Passo_local %i, %i ", passo_atual, passo_ ); } } if (enable_y == 0 and qual_eixo == 1 ) //PARA EIXO Y { while (passo_atual != abs(passo_)) { step_y = 1; wait_us(espera); step_y = 0; wait_us(vel); passo_atual++ ; if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } // pc.printf("Passo_local %i, %i ", passo_atual, passo_ ); } } if (enable_z == 0 and qual_eixo == 2 ) //PARA EIXO Z { while (passo_atual != abs(passo_)) { step_z = 1; wait_us(espera); step_z = 0; wait_us(vel); passo_atual++ ; if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } // pc.printf("Passo_local %i, %i ", passo_atual, passo_ ); } } return passo_atual; } //----------------------------------------------------------------------------------------------MAIN------------------------------------------------------------------------------------------------------------/ int main() { lcd.setCursor(TextLCD::CurOff_BlkOff);//desliga o cursor posicao_x = 0; posicao_y = 0; posicao_z = 0; refe = 0 ; //0 ou 1 1= REFERENCIAMENTO 0 = MOVIMENTO DOS EIXOS troca_yz = 0; // 0 ou 1 0 = EIXO Y 1 = EIXO Z pos = 0; pc.baud(115200); pc.printf("hello WORLD!\r\n"); enable_x = 1;//desliga os drivers enable_y = 1;//desliga os drivers enable_z = 1;//desliga os drivers aciona_pneu2 = 1 ; //desliga pneu aciona_pneu = 1 ; //desliga pneu vel = lista_vel[0];//velocidade inicial wait(0.25); while(1) { if (botao_emergencia == 1) { if (flag_emergencia == 1) { lcd.setCursor(TextLCD::CurOff_BlkOff);//desliga o cursor lcd.cls(); menu = 0; menu = 1; menu_enter_2 = 0 ; flag_emergencia = 0; } if (menu == 1 ) { lcd.cls(); lcd.printf(" -Referenciamento\n"); lcd.printf(" -Limpar Bico Ejetor"); lcd.printf(" -Aplicar Cola\n"); lcd.printf(" -Configuracoes\n"); lcd.locate(0,linha); lcd.putc('~'); menu = 0; }// if menu = 1 if (botao_cima == 1 and menu ==0) { pc.printf("menu %d \r\n",menu); pc.printf("botao_cima \r\n"); lcd.cls(); lcd.printf(" -Referenciamento\n"); lcd.printf(" -Limpar Bico Ejetor"); lcd.printf(" -Aplicar Cola\n"); lcd.printf(" -Configuracoes\n"); linha--; pc.printf(" %d\r\n",linha); if (linha < 0) { linha = 3; } lcd.locate(0,linha); lcd.putc('~'); wait(0.2); }//IF botao_cima //-------------------------------------------------------------------------------------BOTAO BAIXO MENU = 1 ----------------------------------------------------------------- if (botao_baixo == 1 and menu ==0) { pc.printf("menu %d\r\n",menu); pc.printf("botao_baixo \r\n"); lcd.cls(); lcd.printf(" -Referenciamento\n"); lcd.printf(" -Limpar Bico Ejetor"); lcd.printf(" -Aplicar Cola\n"); lcd.printf(" -Configuracoes\n"); if (linha > 2) { linha = -1; } linha++; pc.printf(" %d\r\n",linha); lcd.locate(0,linha); lcd.putc('~'); wait(0.2); }// if botao_baixo if (botao_enter == 1 and menu==0) { pc.printf("botao_enter \r\n"); pc.printf(" %d\r\n",linha); if (linha ==0) { menu_enter =1; // REFERERENCIAMENTO refe = 1; wait(0.2); } if (linha == 1) { menu_enter = 2;//LIMPAR BI EJETOR } if (linha == 2) { menu_enter = 3;//Aplicar COla linha =0; } if (linha == 3) { menu_enter = 5;//Aplicar COla linha =0; } pc.printf(" %d\r\n",linha); wait(0.2); }// if bbotao_enter\ //-------------------------------------------------------------------------------------LIMPAR BICO EJETOR ----------------------------------------------------------------- if (menu_enter == 2) { lcd.cls(); lcd.printf("\n"); aciona_pneu = 0;// liga pneumatica pressao lcd.printf(" Limpando.\n"); aciona_pneu2 = 0;// liga pneumatica pressao wait(0.5); lcd.cls(); lcd.printf("\n"); lcd.printf(" Limpando..\n"); aciona_pneu2 = 1;// liga pneumatica pressao wait(0.5); lcd.cls(); lcd.printf("\n"); lcd.printf(" Limpando...\n"); aciona_pneu2 = 0;// liga pneumatica pressao wait(1); lcd.cls(); aciona_pneu2 = 1;// liga pneumatica pressao lcd.printf("\n"); lcd.printf(" Bico Limpo!\n"); wait(2); lcd.cls(); menu = 1; menu_enter = 0; } //-------------------------------------------------------------------------------------APLICAR COLA MENU_ENTER = 3 ----------------------------------------------------------------- if (menu_enter == 3) { linha = 0; lcd.cls(); lcd.printf(" -Adicionar Pontos \n"); lcd.printf(" -Mod./Ver Pontos \n"); lcd.printf("\n"); lcd.printf(" Voltar Colar\n"); lcd.locate(0,linha); lcd.putc('~'); menu = 2; menu_enter = 4;//para o refresh rate pc.printf("menu %d\r\n",menu); }// Aplicar Cola //-------------------------------------------------------------------------------------BOTAO CIMA ------------------------------------------------------------- if (botao_cima == 1) { if (menu == 2) { pc.printf("menu %d\r\n",menu); pc.printf("botao_cima menu 2\r\n"); lcd.cls(); lcd.printf(" -Adicionar Pontos \n"); lcd.printf(" -Mod./Ver Pontos \n"); lcd.printf("\n"); lcd.printf(" Voltar Colar\n"); menu = 2; linha--; pc.printf(" %d\r\n",linha); if (linha < 0) { linha = 4; lcd.locate(0,0); lcd.putc(' '); lcd.locate(14,linha); lcd.putc('~'); } if(linha == 2) { linha = 1; } lcd.locate(0,linha); lcd.putc('~'); if (linha == 4) { lcd.locate(0,3); lcd.putc(' '); lcd.locate(14,linha); lcd.putc('~'); } wait(0.2); } if (menu == 3 or menu == 4)//-----------------------------------------------------------------add pontos-BB------------------------------------------------------------- { menu_enter_2 = 0;//para o refresh rate linha--; if (linha == 1) { linha = 3; } if (linha == 2) { lcd.locate(0,linha + 1); lcd.putc(' '); lcd.locate(0,linha); lcd.putc('~'); } if (linha == 3) { lcd.locate(0,linha - 1); lcd.putc(' '); lcd.locate(0,linha); lcd.putc('~'); } wait(0.2); } if (menu == 5)//-----------------------------------------------------------------Modificando Pontos---BC----------------------------------------------------------- { if (i_p == 0) { pc.printf(" %d\r\n",linha); linha--; if (linha == 1) { lcd.locate(10,linha+1); lcd.putc(' '); lcd.locate(0,3); lcd.putc('~'); linha = 4; } if (linha == 2) { lcd.locate(10,linha + 1); lcd.putc(' '); lcd.locate(10,linha); lcd.putc('~'); } if (linha == 3) { lcd.locate(0,linha); lcd.putc(' '); lcd.locate(10,linha); lcd.putc('~'); } wait(0.2); } if (i_p != 0 and i_p != ultimo_p -1) { linha--; printf("linha %d\r\n",linha); if (linha == 1)// { lcd.locate(10,linha+1); lcd.putc(' '); lcd.locate(0,2); lcd.putc('~'); linha = 5; } if (linha == 2) { lcd.locate(10,linha + 1); lcd.putc(' '); lcd.locate(10,linha); lcd.putc('~'); } if (linha == 3) { lcd.locate(0,linha); lcd.putc(' '); lcd.locate(10,linha); lcd.putc('~'); } if (linha == 4) { lcd.locate(0,2); lcd.putc(' '); lcd.locate(0,3); lcd.putc('~'); } wait(0.2); } if (i_p != 0 and i_p == ultimo_p -1) { linha--; pc.printf("linha %d\r\n",linha); if (linha == 2) { lcd.locate(10,linha + 1); lcd.putc(' '); lcd.locate(0,linha); lcd.putc('~'); linha = 5; } if (linha == 3) { lcd.locate(0,linha); lcd.putc(' '); lcd.locate(10,linha); lcd.putc('~'); } if (linha == 4) { lcd.locate(0,2); lcd.putc(' '); lcd.locate(0,3); lcd.putc('~'); } wait(0.2); } } if(menu == 6)//-----------------------------------------------------------------Configuracoes-------------------------------------------------------------- { pc.printf(" %d\r\n",linha); if (linha == 3) { linha = 1; } linha--; if (linha == -1) { lcd.locate(0,0); lcd.putc(' '); lcd.locate(0,3); lcd.putc('~'); linha = 3; } if (linha == 0) { lcd.locate(0,3); lcd.putc(' '); lcd.locate(0,0); lcd.putc('~'); linha = 0; } wait(0.2); } }//IF botao_cima //-------------------------------------------------------------------------------------BOTAO BAIXO MENU = 2 ----BB------------------------------------------------------------- if (botao_baixo == 1) { if (menu == 2) { pc.printf("menu %d\r\n",menu); pc.printf("botao_baixo menu 2\r\n"); lcd.cls(); lcd.printf(" -Adicionar Pontos \n"); lcd.printf(" -Mod./Ver Pontos \n"); lcd.printf("\n"); lcd.printf(" Voltar Colar\n"); menu = 2; if (linha > 3) { linha = -1; } pc.printf(" %d\r\n",linha); linha++; if(linha == 2) { linha = 3; } lcd.locate(0,linha); lcd.putc('~'); if (linha == 4) { lcd.locate(0,linha-1); lcd.putc(' '); lcd.locate(14,linha); lcd.putc('~'); } wait(0.2); } if (menu == 3 or menu == 4)//-----------------------------------------------------------------add pontos-BB------------------------------------------------------------- { if (linha == 3) { linha = 1; } menu_enter_2 = 0;//para o refresh rate linha++; pc.printf("Botao Baixo\r\n"); pc.printf("menu%d linha=%d\r\n",menu,linha); if (linha == 3) { lcd.locate(0,linha - 1); lcd.putc(' '); lcd.locate(0,linha); lcd.putc('~'); } if (linha == 2) { lcd.locate(0,linha +1); lcd.putc(' '); lcd.locate(0,linha); lcd.putc('~'); } wait(0.2); } if (menu == 5)//-----------------------------------------------------------------Modificando Pontos---BB----------------------------------------------------------- { if (i_p == 0) { if (linha > 3) { lcd.locate(0,3); lcd.putc(' '); lcd.locate(10,2); lcd.putc('~'); linha = 1; } pc.printf(" %d\r\n",linha); linha++; if (linha == 3) { lcd.locate(10,linha-1); lcd.putc(' '); lcd.locate(10,linha); lcd.putc('~'); } if (linha == 4) { lcd.locate(10,linha-1); lcd.putc(' '); lcd.locate(0,linha-1); lcd.putc('~'); } wait(0.2); } if (i_p != 0 and i_p != ultimo_p -1) { if (linha > 4)//"proximo" { lcd.locate(0,2); lcd.putc(' '); lcd.locate(10,2); lcd.putc('~'); linha = 1; } pc.printf(" %d\r\n",linha); linha++; if (linha == 3)//"Modificar" { lcd.locate(10,linha-1); lcd.putc(' '); lcd.locate(10,linha); lcd.putc('~'); } if (linha == 4)//"voltarr" { lcd.locate(10,3); lcd.putc(' '); lcd.locate(0,3); lcd.putc('~'); } if (linha == 5)//"Anterior" { lcd.locate(0,3); lcd.putc(' '); lcd.locate(0,2); lcd.putc('~'); } wait(0.2); } if (i_p != 0 and i_p == ultimo_p -1) { if (linha == 5) { linha = 2; } linha++; if (linha == 3)//"Modificar" { lcd.locate(0,linha-1); lcd.putc(' '); lcd.locate(10,linha); lcd.putc('~'); } if (linha == 4)//"voltarr" { lcd.locate(10,3); lcd.putc(' '); lcd.locate(0,3); lcd.putc('~'); } if (linha == 5)//"Anterior" { lcd.locate(0,3); lcd.putc(' '); lcd.locate(0,2); lcd.putc('~'); } pc.printf(" %d\r\n",linha); wait(0.2); } } if(menu == 6)//-----------------------------------------------------------------Configuracoes--BB------------------------------------------------------------ { pc.printf(" %d\r\n",linha); if (linha == 0) { linha = 2; } if (linha == 3) { linha = 0; } linha++; if (linha == 3) { lcd.locate(0,0); lcd.putc(' '); lcd.locate(0,linha); lcd.putc('~'); } if (linha == 1) { lcd.locate(0,3); lcd.putc(' '); lcd.locate(0,0); lcd.putc('~'); linha = 0; } wait(0.2); } }// if botao_baixo //-------------------------------------------------------------------------------------BOTAO ENTER MENU = 2 --BE--------------------------------------------------------------- if (botao_enter == 1 ) { pc.printf("menu%d linha %d\r\n",menu,linha); if (menu == 2) { pc.printf(" %d\r\n",linha); if (linha ==0) { //pc.printf("vai para PONTOS\r\n"); menu_enter_2 =1; // ADICIONAR PONTOS menu = 0; mover_motores = 1; } if (linha ==1) { menu_enter_2 = 4; // MODIFICAR PONTOS i_p = 0;//zerar } if (linha == 4)//COLAR PONTOS { pc.printf("Vai para funcao COlar Pontos\r\n"); menu = 2;//tela de "aplicar pontas" colar_pontos = 1;//menu colar pontos wait(0.2); } if (linha == 3) { menu = 1 ;//VOltar linha = 1; } pc.printf(" %d\r\n",linha); wait(0.2); } if (menu == 3)//Adicionado os pontos { if (linha == 2)//confirmar ponto { if ( flag_mod == 0) { pc.printf("flag_mod = 0 \r\n"); i_p++; guardar_pontos = 1;// vai para o condicional "guardar Pontos" wait(0.1); } ultimo_p = i_p; menu_enter_2 = 1 ;//Ponto Adicionado! linha = 0; ponto = ponto + 10; wait(0.2); if( i_p > 1) { menu_enter_2 = 2; } if ( flag_mod == 1) { pc.printf("flag_mod = 1 \r\n"); pontos_x[i_p] = posicao_x; pontos_y[i_p] = posicao_y; pontos_z[i_p] = posicao_z; pc.printf(" Pontos X[%i]=%i Pontos Y[%i]=%i Pontos Z[%i]=%i \r\n",i_p, pontos_x[i_p],i_p, pontos_y[i_p ],i_p, pontos_z[i_p]); flag_mod = 0;//tira flag de modificar pontos menu_enter_2 = 2; wait(0.2); } wait(0.2); } if (linha == 3) { menu_enter = 3 ;//VOltar linha = 0; wait(0.2); } }//menu = 3 if (menu == 4)//------------------COla-BE { pc.printf(" -->COLA-BE: flag_mod2 = %d\r\n",flag_mod2); if (flag_mod2 == 0) { if (linha == 2) { pc.printf(" COla[%d] = 1\r\n",i_c); menu_enter_2 = 1; cola[i_c] = 1; } if (linha == 3) { pc.printf(" COla[%d] = 0\r\n",i_c); menu_enter_2 = 1 ;//VOltar cola[i_c] = 0; } } if (flag_mod2 == 1) { pc.printf(" menu_enter = 3\r\n"); if (linha == 2) { pc.printf(" COla[%d] = 1\r\n",i_p-1); menu_enter_2 = 1; cola[i_p-1] = 1; } if (linha == 3) { pc.printf(" COla[%d] = 0\r\n",i_p-1); menu_enter_2 = 1 ;//VOltar cola[i_p-1] = 0; } menu_enter = 3;//volta para a tela de "add pontos" wait(0.1); } flag_mod2 = 0;//tira flag de modificar pontos wait(0.2); flag_mod = 0; i_c++; }//menu = 4 if (menu == 5) //MODIFICANDO OS PONTOS-BE { if (i_p != 0) { if ( linha == 2) { i_p++; menu_enter_2 = 4; wait(0.2); } if ( linha == 3) { menu_enter_2 = 1; flag_mod = 1; flag_mod2= 1; pc.printf("Mod!"); wait(0.2); } if ( linha == 4) { pc.printf("voltar!"); menu_enter = 3 ;//VOltar linha = 1; wait(0.2); } if ( linha == 5) { i_p--; menu_enter_2 = 4; wait(0.2); } } if (i_p == 0) { if ( linha == 2) { i_p++; menu_enter_2 = 4; wait(0.2); } if ( linha == 3) { menu_enter_2 = 1; pc.printf("Mod!"); wait(0.2); } if ( linha == 4) { pc.printf("Mod!"); menu_enter = 3 ;//VOltar linha = 1; wait(0.2); } } } if (menu == 6)//-----------------------------------------------------------------Configuracoes-------------------------------------------------------------- { if ( linha == 0) { i_v++; if (i_v == 3) { i_v = 0; } vel = lista_vel[i_v]; wait(0.2); menu_enter = 5; } if ( linha == 2) { lcd.locate(2,2); lcd.putc(' '); lcd.locate(3,2); lcd.putc(' '); lcd.locate(4,2); lcd.putc(' '); lcd.locate(2,2); lcd.putc('N'); lcd.locate(3,2); lcd.putc('a'); lcd.locate(4,2); lcd.putc('o'); } if ( linha == 3) { pc.printf("Mod!"); menu = 1 ;//VOltar linha = 1; wait(0.2); } } }// if bbotao_enter\ //-------------------------------------------------------------------------------------ADICIONAR PONTOS ----------------------------------------------------------------- if (menu_enter_2 == 1) { pc.printf("ADICIONAR PONTOS\r\n"); pc.printf("i_p = %d ", i_p); lcd.cls(); linha = 2; pontos[i_p] = ponto; pc.printf("Ponto %d \r\n",i_p); pc.printf("X:%d Y:%d Z:%d \r\n",posicao_x,posicao_y,posicao_z); float posicao_x_f = passo_mm_xy(posicao_x); float posicao_y_f = passo_mm_xy(posicao_y); float posicao_z_f = passo_mm_z(posicao_z); lcd.printf("Pontos %d \n",i_p); lcd.printf("X:%.0f Y:%.0f Z:%.0f\n",posicao_x_f,posicao_y_f,posicao_z_f); lcd.printf(" Confirmar\n"); lcd.printf(" Voltar\n"); lcd.locate(0,linha); lcd.putc('~'); menu = 3; menu_enter_2 = 0;//para o refresh rate }// Adiciona Pontos //-------------------------------------------------------------------------------------Cola nos pontos? ----------------------------------------------------------------- if (menu_enter_2 == 2) { pc.printf("Cola pontos?\r\n"); lcd.cls(); linha = 2; lcd.printf("Colar entre?\n"); pc.printf("flag_mod2 = %d\r\n",flag_mod2); if ( flag_mod2 == 0) { lcd.printf(" P%i e P%i\n",i_p - 2,i_p - 1); } if ( flag_mod2 == 1) { lcd.printf(" P%i e P%i\n",i_p - 1,i_p); } lcd.printf(" Sim\n"); lcd.printf(" Nao\n"); lcd.locate(0,linha); lcd.putc('~'); menu = 4; menu_enter_2 = 0;//para o refresh rate }// Adiciona Pontos //-------------------------------------------------------------------------------------MODIFICAR PONTOS ----------------------------------------------------------------- if (menu_enter_2 == 4) { pc.printf("Modificar Pontos\r\n"); pc.printf("i_p = %d ", i_p); lcd.cls(); linha = 2; pontos[i_p] = ponto; pc.printf("Pontos %d\r\n",i_p); pc.printf("X:%d Y:%d Z:%d \r\n",pontos_x[i_p],pontos_y[i_p],pontos_z[i_p]); float posicao_x_f = passo_mm_xy(pontos_x[i_p]); float posicao_y_f = passo_mm_xy(pontos_y[i_p]); float posicao_z_f = passo_mm_z(pontos_z[i_p]); if (i_p != 0) { pc.printf("i_c = %d ", i_c); if ( cola[i_p - 1] == 1) { lcd.printf("Ponto %d P%d->P%d=S",i_p,i_p-1 ,i_p); lcd.printf("\n"); lcd.printf("X:%.0f Y:%.0f Z:%.0f\n",posicao_x_f,posicao_y_f,posicao_z_f); } if ( cola[i_p - 1] == 0) { lcd.printf("Ponto %d P%d->P%d=N",i_p,i_p-1 ,i_p); lcd.printf("\n"); lcd.printf("X:%.0f Y:%.0f Z:%.0f\n",posicao_x_f,posicao_y_f,posicao_z_f); } } if ( i_p == 0) { lcd.printf("Ponto 0 "); lcd.printf("\n"); lcd.printf("X:%.0f Y:%.0f Z:%.0f\n",posicao_x_f,posicao_y_f,posicao_z_f); lcd.printf(" Proximo\n"); lcd.printf(" Voltar Modificar\n"); lcd.locate(10,linha); lcd.putc('~'); } if (i_p != 0 and i_p != ultimo_p -1) { lcd.printf(" Anterior Proximo\n"); lcd.printf(" Voltar Modificar\n"); lcd.locate(10,linha); lcd.putc('~'); } pc.printf("ultimo_p = %d \r\n",ultimo_p); if (i_p != 0 and i_p == ultimo_p -1) { lcd.printf(" Anterior \n"); lcd.printf(" Voltar Modificar\n"); lcd.locate(0,linha); lcd.putc('~'); linha = 5; } menu = 5; menu_enter_2 = 0;//para o refresh rate }// Adiciona Pontos //----------------------------------------------------------------------------------------------Configuracoes-------------------------------------------------------------- if ( menu_enter == 5) { pc.printf("Configuracoes\r\n"); lcd.cls(); linha = 0; lcd.printf(" -Vel:%d[mm/s]\n",vel); //lcd.printf(" -Cola nos Pontos?\n"); //lcd.printf(" Sim \n"); lcd.printf(" \n"); lcd.printf(" \n"); lcd.printf(" Voltar\n"); lcd.locate(0,linha); lcd.putc('~'); menu = 6; menu_enter = 0;//para o refresh rate wait(0.1); } //-----------------------------------REFERENCIANDO-----------------------------------------------------------/ if(refe== 1) //comeca referenciamento roda uma vez { //pc.printf("refe == 1 \r\n"); enable_x = 0; enable_y = 1; enable_z = 1; dir_x = 1; //---------------IHM---------- lcd.cls(); lcd.printf(" Referenciando...\n"); wait(0.25); //----------------------------- move_inicial(dir_x,600,FimCursoX,0); enable_x = 1; // wait(2); if (FimCursoX == 1) { pc.printf("Fim de Curso 1 X \r\n"); // refe X enable_x = 0; dir_x = !dir_x ; movepara(dir_x,600,200,0); enable_x = 1; posicao_x = 1; pc.printf("Fim de Curso 2 X \r\n"); } enable_x = 1; enable_y = 0; enable_z = 1; dir_y =1; move_inicial(dir_y,600,FimCursoY,1); enable_y = 1; if (FimCursoY == 1) { pc.printf("Fim de Curso 1 Y \r\n"); // refe Y enable_y = 0; dir_y = !dir_y ; movepara(dir_y,vel,200,1); enable_y = 1; refe= 0; posicao_y = 1; pc.printf("Fim de Curso 2 Y \r\n"); } dir_z =1; enable_x = 1; enable_y = 1; enable_z = 0; move_inicial(dir_z,450,FimCursoZ,2); enable_z = 1; if (FimCursoZ == 1) { pc.printf("Fim de Curso 1 Z \r\n"); // refe Y enable_z = 0; dir_z = !dir_z ; movepara(dir_z,450,200,2); enable_z = 1; refe= 0; posicao_z = 1; pc.printf("Fim de Curso 2 Z \r\n"); lcd.cls(); //---------------IHM---------- lcd.printf("Referenciamento\n"); lcd.printf("Concluido!\n"); wait(1); lcd.cls(); menu = 1; //----------------------------- } } //---------------------------------------------------------------------------Drivers-------------------------------------------------------------------------------------------------------/ //---------------------------------------------------------------------------LOOP DA MAQUINA-------------------------------------------------------------------------------------------------------/ if (mover_motores == 1 and menu == 3 and flag_emergencia2 == 0) //fica preso no loop { //pc.printf("refe == 0 \r\n"); //Lendo JoyStick Analogico x = eixo_x.read(); y = eixo_y.read(); //pc.printf("Posicao/Vel X: %f Y: %f.\r\n", x, y); //Acionamento motor de Passo via Joystick //-----------------------------------------JOYSTICK X------------------------------------------------------/ while (x < 0.3f and flag_emergencia2 == 0)// X+ { enable_x = 0; dir_x = 0; //wait(espera); x = eixo_x.read(); //pc.printf("x> \r\n"); if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } if (dir_x == 0 and posicao_x < 25000) { posicao_x = posicao_x + move(dir_x, vel,posicao_x,0) ; // menu_enter_2 = 1; } pc.printf("Posicao Passo X: %d. \r\n",posicao_x); menu_enter_2 = 1; } while ( x > 0.7f and flag_emergencia2 == 0) //X- { enable_x = 0; dir_x = 1; x = eixo_x.read(); // pc.printf("x < \r\n"); // pc.printf("dir_x = %B \r\n",dir_x); if (botao_emergencia == 0 ) { flag_emergencia2 = 1; break; } if (dir_x == 1 and posicao_x > 0) { posicao_x = posicao_x - move(dir_x, vel, posicao_x,0) ; } pc.printf("Posicao Passo X: %d. \r\n",posicao_x); menu_enter_2 = 1; } if ( x > 0.3f and x < 0.73f) { para(); // menu_enter_2 = 1; } //-----------------------------------------JOYSTICK Y-------------------------------------------------------/ if (troca_yz == 0) { while (y < 0.3f and flag_emergencia2 == 0) //Y+ { enable_y = 0; dir_y = 0; y = eixo_y.read(); if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } if (dir_y == 0 and posicao_y <26000) { posicao_y = posicao_y + move(dir_y, vel,posicao_y,1) ; } pc.printf("Posicao Passo Y: %d. \r\n",posicao_y); menu_enter_2 = 1; } while ( y > 0.7f and flag_emergencia2 == 0)//Y- { enable_y = 0; dir_y = 1; y = eixo_y.read(); if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } if (dir_y == 1 and posicao_y > 0) { posicao_y = posicao_y - move(dir_y, vel, posicao_y,1) ; } pc.printf("Posicao Passo Y: %d. \r\n",posicao_y); menu_enter_2 = 1; } if ( y > 0.3f and y < 0.7f) { para_(); // menu_enter_2 = 1; } } //-----------------------------------------JOYSTICK Y PARA MEXER O Z------------------------------------------------------/ if ( troca_yz == 1) { while (y < 0.3f and flag_emergencia2 == 0) //Z- { enable_z = 0; dir_z = 1; y = eixo_y.read(); if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } if (dir_z == 1 and posicao_z > 0) { posicao_z = posicao_z - move(dir_z, 500,posicao_z,2) ; } pc.printf("Posicao Passo Z: %d. \r\n",posicao_z); menu_enter_2 = 1; } while ( y > 0.7f and flag_emergencia2 == 0)//Z+ { enable_z = 0; dir_z = 0; y = eixo_y.read(); if (botao_emergencia == 0) { flag_emergencia2 = 1; break; } if (dir_z == 0 and posicao_z < 2000) { posicao_z = posicao_z + move(dir_z, 500, posicao_z,2) ; } pc.printf("Posicao Passo Z: %d. \r\n",posicao_z); menu_enter_2 = 1; } if ( y > 0.3f and y < 0.7f) { para_(); //menu_enter_2 = 1; } }//fim troca_yz //-----------------------------------------BOTAO ANALOGICO PARA TROCAR O EIXO Z/Y --------------------------------------------/ if (botao_analog == 0) { troca_yz = !troca_yz; //troca Y/Z pc.printf("ZY"); lcd.cls(); if (troca_yz == 1) { lcd.printf(" Eixo Z Selecionado \n"); } if (troca_yz == 0) { lcd.printf(" Eixo Y Selecionado \n"); } wait(0.8); menu_enter_2 = 1; } //-----------------------------------------GUARDAR PONTOS (BOTAO) --------------------------------------------/ if ((guardar_pontos == 1 or botaoC == 0) and posicao_x >= 0 and posicao_y >= 0 and posicao_z >= 0 ) { //-------------------------------------------------X--------------------------------/ pc.printf("GUARDAR PONTOS\r\n"); if ( i_x != 0 ) { pontos_x[i_x] = posicao_x; //pc.printf(" Ponto[%i] Passo: %i \r\n",i_x,pontos_x[i_x]); i_x++; } if ( i_x == 0 ) { pontos_x[i_x] = posicao_x; //pc.printf(" Ponto[%i] Passo: %i \r\n",i_x,pontos_x[i_x]); i_x++; } /*if (posicao_x != pontos_x[i_x-1]) { pontos_x[i_x] = posicao_x; // pc.printf(" Ponto[%i] Passo: %i \r\n",i_x,pontos_x[i_x]); i_x++; }*/ //-------------------------------------------------Y--------------------------------/ if ( i_y != 0 ) { pontos_y[i_y] = posicao_y; //pc.printf(" Ponto[%i] Passo: %i \r\n",i_y,pontos_y[i_y]); i_y++; } if ( i_y == 0 ) { pontos_y[i_y] = posicao_y; //pc.printf(" Ponto[%i] Passo: %i \r\n",i_y,pontos_y[i_y]); i_y++; } /*if (posicao_y != pontos_y[i_y-1]) { pontos_y[i_y] = posicao_y; //pc.printf(" Ponto[%i] Passo: %i \r\n",i_y,pontos_y[i_y]); i_y++; }*/ // pc.printf(" Pontos X[%i] Y[%i] Passo X: %i Passo Y: %i\r\n",i_x,i_y, pontos_x[i_x -1],pontos_y[i_y -1]); //-------------------------------------------------Z--------------------------------/ if ( i_z != 0 ) { pontos_z[i_z] = posicao_z; //pc.printf(" Ponto[%i] Passo: %i \r\n",i_z,pontos_y[i_z]); i_z++; } if ( i_z == 0 ) { pontos_z[i_z] = posicao_z; // pc.printf(" Ponto[%i] Passo: %i \r\n",i_z,pontos_z[i_z]); i_z++; } /* if (posicao_z != pontos_z[i_z-1]) { pontos_y[i_z] = posicao_z; //pc.printf(" Ponto[%i] Passo: %i \r\n",i_z,pontos_y[i_z]); i_z++; }*/ pc.printf(" Pontos X[%i]=%i Pontos Y[%i]=%i Pontos Z[%i]=%i \r\n",i_x, pontos_x[i_x -1],i_y, pontos_y[i_y -1],i_z, pontos_z[i_z -1]); guardar_pontos = 0; wait(0.5); } }//end mover_motores == 1 and menu == 3 if (mover_motores == 1 and menu == 2) { //-----------------------------------------IR PARA OS PONTOS GUARDADOS (BOTAO) -----------------------------------------/ if (colar_pontos == 1 or botaoA == 0) { lcd.cls(); lcd.printf("Aplicando Cola!\n"); pc.printf("colar pontos funcao! \r\n"); aciona_pneu = 0;//liga a pressao da valvula for(int h = 0; h < (i_z); h++) { //-----------------------------------------Aciona a pneumatica -----------------------------------------/ if (cola[h - 1] == 1) { aciona_pneu2 = 0;//abre valvula } wait(1); pc.printf(" Indo para os Pontos \r\n"); //-----------------------------------------pontos X -----------------------------------------/ pc.printf(" Pontos X \r\n"); int set_point_x = pontos_x[h] - posicao_x; //o quanto de passos que o motor ira dar para chegar ao ponto desejado //pc.printf("SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point, pontos_x[h],h); if (set_point_x != 0) //o ponto atual é menor do que o desejado { enable_x = 0; } if (set_point_x == 0) //o ponto atual é menor do que o desejado { enable_x = 1; enable_y = 1; enable_z = 1; } if (set_point_x > 0) //o ponto atual é menor do que o desejado { // pc.printf("maior q 0 \r\n"); // pc.printf(" SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point, pontos_x[h],h); dir_x = 0; posicao_x = posicao_x + movepara(dir_x,vel,set_point_x,0); } if (set_point_x < 0) // o ponto atual esta a frente do desejado { // pc.printf("menor q 0 \r\n"); // pc.printf(" SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point, pontos_x[h],h); dir_x = 1; posicao_x = posicao_x - movepara(dir_x,vel,set_point_x,0); } //enable_x = 1 ;//desligar o motor na espera //pc.printf("Posicao Passo: %d. \r\n",posicao_x); // wait(1); //espera para ir ao proximo ponto //-----------------------------------------pontos y -----------------------------------------/ pc.printf(" Pontos Y \r\n"); int set_point_y = pontos_y[h] - posicao_y; //o quanto de passos que o motor ira dar para chegar ao ponto desejado //pc.printf("SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h); if (set_point_y != 0) //o ponto atual é menor do que o desejado { enable_x = 1; enable_y = 0; enable_z = 1; } if (set_point_y == 0) //o ponto atual é menor do que o desejado { enable_x = 1; enable_y = 1; enable_z = 1; } if (set_point_y > 0) //o ponto atual é menor do que o desejado { //pc.printf("maior q 0 \r\n"); // pc.printf(" SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h); dir_y = 0; posicao_y = posicao_y + movepara(dir_y,vel,set_point_y,1); } if (set_point_y < 0) // o ponto atual esta a frente do desejado { // pc.printf("menor q 0 \r\n"); //pc.printf(" SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h); dir_y = 1; posicao_y = posicao_y - movepara(dir_y,vel,set_point_y,1); } //enable_y = 1 ;//desligar o motor na espera // pc.printf("Posicao Passo X: %d Passo Y: %d . \r\n",posicao_x,posicao_y); // wait(1); //espera 2 segundos para ir ao proximo ponto //-----------------------------------------pontos z -----------------------------------------/ pc.printf(" Pontos Z \r\n"); int set_point_z = pontos_z[h] - posicao_z; //o quanto de passos que o motor ira dar para chegar ao ponto desejado //pc.printf("SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h); if (set_point_z != 0) //o ponto atual é menor do que o desejado { enable_x = 1; enable_y = 1; enable_z = 0; } if (set_point_z == 0) //o ponto atual é menor do que o desejado { enable_x = 1; enable_y = 1; enable_z = 1; } if (set_point_z > 0) //o ponto atual é menor do que o desejado { //pc.printf("maior q 0 \r\n"); // pc.printf(" SetPoint:%i pontos_z[h]:%i h:%i \r\n",set_point_z, pontos_z[h],h); dir_z = 0; //vai para baixo posicao_z = posicao_z + movepara(dir_z,vel,set_point_z,2); } if (set_point_z < 0) // o ponto atual esta a frente do desejado { // pc.printf("menor q 0 \r\n"); //pc.printf(" SetPoint:%i pontos_x[h]:%i h:%i \r\n",set_point_y, pontos_y[h],h); dir_z = 1; //vai para cima posicao_z = posicao_z - movepara(dir_z,vel,set_point_z,2); } //enable_y = 1 ;//desligar o motor na espera pc.printf("Posicao[%d] Passo X: %d Passo Y: %d Passo Z: %d. \r\n",h,posicao_x,posicao_y,posicao_z); colar_pontos = 0; // wait(1); //espera 2 segundos para ir ao proximo ponto aciona_pneu2 = 1;//fecha valvula }//loop for enable_x = 1; enable_y = 1; enable_z = 1; aciona_pneu = 1;//desliga a pressao da valvula pc.printf("Acabou rotina aplicador de cola\n"); if (botao_emergencia == 1) { lcd.cls(); lcd.printf("Finalizado!\n"); wait(1); menu_enter = 3;//volta para o menu linha = 3; } }//if botaoA }// end mover_motores == 1 and menu == 2 }//if botao emergencia == 1 if ((botao_emergencia == 0 and flag_emergencia == 0) or flag_emergencia2 == 1) { lcd.cls(); lcd.printf("Botao Emergencia!\n"); lcd.setCursor(TextLCD::CurOff_BlkOff);//desliga o cursor refe = 0; flag_emergencia = 1; flag_emergencia2 = 0; linha = 1; } }//while 1 }//main