Projeto Mecatrônico
/
ProjetoMecatronico
testando
Diff: main_PM.cpp
- Revision:
- 76:e8f994ca108f
- Parent:
- 73:6c5f3c9cc90e
- Child:
- 77:61eb73d3c9dd
--- a/main_PM.cpp Wed Jun 03 18:58:39 2020 +0000 +++ b/main_PM.cpp Fri Jun 05 11:50:13 2020 +0000 @@ -21,9 +21,9 @@ int est_z = 0; //variável que indicará o estado do eixo z, pemitindo ou não que ele possa ser avançado depois de atingir o fim de curso //pinos usados pelos botoes de fim de curso -DigitalIn fdc_x(PC_10); -DigitalIn fdc_y(PC_11); -DigitalIn fdc_z(PC_12); +InterruptIn fdc_x(PC_10); +InterruptIn fdc_y(PC_11); +InterruptIn fdc_z(PC_12); //Iterrupcao botao de emergência InterruptIn interrupcao(PB_11); @@ -89,6 +89,27 @@ void mov_y_mais() {for(int i = 0; i < 4; i++){eixoy = hor[i];wait(t_motor);coord_y += (5.625*5/32)/360;est_y = 0;}} void mov_z_mais() {for(int i = 0; i < 4; i++){eixoz = hor[i];wait(t_motor);coord_z += (5.625*5/32)/360;est_z = 0;}} int emergency = 0; + +//funcoes de fim de curso por interrupção +void lim_x(){for(int i = 0; i < 4; i++){TextLCD lcd(D4, D5, D6, D7, D8, D9); + eixox = parado[i];wait(t_motor); + lcd.cls();lcd.printf("Limite de x atingido"); + lcd.locate(0,2);lcd.printf("Pressione 0 para continuar"); + est_x = 1;}} + +void lim_y(){for(int i = 0; i < 4; i++){TextLCD lcd(D4, D5, D6, D7, D8, D9); + eixoy = parado[i];wait(t_motor); + lcd.cls();lcd.printf("Limite de y atingido"); + lcd.locate(0,2);lcd.printf("Pressione 0 para continuar"); + est_y = 1;}} + +void lim_z(){for(int i = 0; i < 4; i++){TextLCD lcd(D4, D5, D6, D7, D8, D9); + eixoz = parado[i];wait(t_motor); + lcd.cls();lcd.printf("Limite de z atingido"); + lcd.locate(0,2);lcd.printf("Pressione 0 para continuar"); + est_z = 1;}} +void reseta_eixo(){est_x = 0;est_y = 0;est_z = 0;} + //Funcao de emergencia por interrupcao void emergencia(){TextLCD lcd(D4, D5, D6, D7, D8, D9); emergency = 1; @@ -148,6 +169,12 @@ int main() { interrupcao.fall(&emergencia); interrupcao.rise(&solta_emergencia); + fdc_x.fall(&lim_x); + fdc_y.fall(&lim_y); + fdc_z.fall(&lim_z); + fdc_x.rise(&reseta_eixo); + fdc_y.rise(&reseta_eixo); + fdc_z.rise(&reseta_eixo); int volume; int volume_solta; int diametro_solta; @@ -175,6 +202,7 @@ printf("\n%i", emergency); while(1) { + if(t_0 == 0){reseta_eixo();} if(emergency == 0){ tecla = pega_tecla(); printf("\n%s",status_tela); @@ -188,32 +216,32 @@ // if (y_mais == 0 && est_y == 1){for(int i = 0; i < 4; i++){eixoy = parado[i];wait(t_motor);coord_y += 0;lcd.cls();lcd.printf("Limite de y atingido");}} // if (z_mais == 0 && est_z == 1){for(int i = 0; i < 4; i++){eixoz = parado[i];wait(t_motor);coord_z += 0;lcd.cls();lcd.printf("Limite de z atingido");}} - while(x_menos == 0){mov_x_menos(); + while(x_menos == 0 && est_x == 0){mov_x_menos(); lcd.cls(); lcd.printf("X: %4.1f", coord_x); lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y); lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);} - while(y_menos == 0){mov_y_menos(); + while(y_menos == 0 && est_x == 0){mov_y_menos(); lcd.cls(); lcd.printf("X: %4.1f", coord_x); lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y); lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);} - while(z_menos == 0){mov_z_menos(); + while(z_menos == 0 && est_x == 0){mov_z_menos(); lcd.cls(); lcd.printf("X: %4.1f", coord_x); lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y); lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);} - while(x_mais == 0){mov_x_mais(); + while(x_mais == 0 && est_x == 0){mov_x_mais(); lcd.cls(); lcd.printf("X: %4.1f", coord_x); lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y); lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);} - while(y_mais == 0){mov_y_mais(); + while(y_mais == 0 && est_x == 0){mov_y_mais(); lcd.cls(); lcd.printf("X: %4.1f", coord_x); lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y); lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);} - while(z_mais == 0){mov_z_mais(); + while(z_mais == 0 && est_x == 0){mov_z_mais(); lcd.cls(); lcd.printf("X: %4.1f", coord_x); lcd.locate(0,1);lcd.printf("Y: %4.1f", coord_y); lcd.locate(0,2);lcd.printf("Z: %4.1f", coord_z);}