testando

Dependencies:   mbed TextLCD2

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);}