electro

Dependencies:   mbed QEI mbed-os KeypadLib TextLCD

Revision:
6:0d2b3f985e41
Parent:
5:9869290cb13f
Child:
7:52b459308d55
--- a/electrocoagulador_final.cpp	Mon Mar 04 18:24:53 2019 +0000
+++ b/electrocoagulador_final.cpp	Mon Mar 04 20:40:42 2019 +0000
@@ -1,126 +1,71 @@
 #include "mbed.h"
 #include "keypad.h"
 #include "TextLCD.h"
-#include "stdlib.h" //opcional
-
-/*******************ELECTROVALVULAS********************/
-
-DigitalOut E_1(D8,0);             //Control de electrovalvula 1
-DigitalOut E_2(D9,0);             //Control de electrovalvula 2
-DigitalOut E_3(D10,0);             //Control de electrovalvula 3
-DigitalOut E_4(D12,0);             //Control de electrovalvula 4
-AnalogIn sensor_level(A0);      //Sensor nivel tanque 1
-PwmOut motor(PA_5);             //variable temporal para el motor (se cambiará después)
-/*****************************************************/
-
-
-
-/*******************INTERRUPCIONES********************/
-
-InterruptIn button(USER_BUTTON);
-Ticker check_level;
-Ticker up;
-Ticker down;
+#include "stdlib.h"
 
-Timeout t_1;
-Timeout t_2;
-Timeout t_3;
-Timeout t_4;
-
-//tiempos de usuario
-int temp_user_1=5;                      //tiempo tope de electrocoagulacion
-int temp_user_2=5;                      //tiempo tope de reposo de la vinaza
-int temp_user_3=5;                      //tiempo tope de vaciado del agua en el tanque 2
-int temp_user_4=5;                      //tiempo tope de vaciado de residuos en el tanque 2
-int pwm=5;
+/******************* IO ********************/
+DigitalOut E_1(D8,0);         // Control de electrovalvula 1
+DigitalOut E_2(D9,0);         // Control de electrovalvula 2
+DigitalOut E_3(D10,0);         // Control de electrovalvula 3
+DigitalOut E_4(D12,0);         // Control de electrovalvula 4
+PwmOut     motor(PA_5);         // Variable temporal para el motor (se cambiará después)
 
-
-//timers
-Timer timer_1;
-Timer timer_2;
-Timer timer_3;
-
-/********************TECLADO Y LCD***********************/
-
-//          rs, e,d4,d5,d6,d7
-TextLCD lcd(PC_8,PC_9,PC_10,PC_11,PC_12,PD_2);
-
+/******************* INTERRUPCIONES ********************/
+Timeout t;
+InterruptIn button(USER_BUTTON);    // Cancelar operación
 
-Keypad keypad(D3, D2, D1, D0, D7, D6, D5, D4);
-float num=0;
-char cadena[3]= {' ',' ',' '};
-int llena=0; //verificar que la entrada es de 3 numeros
-int blinker = 1;
-
-/*********************FUNCIONES**************************/
-
-void stop()  //STOP
-{
-    while(1) {
-        lcd.cls();
-        lcd.printf("      STOP!");
-        lcd.locate(0,1);
-        lcd.printf("  PLEASE RESET");
-        wait_ms(150);
-    }
-}
+/*******************VARIABLES********************/
+int tempUser1 = 1;                  // Tiempo tope de electrocoagulacion
+int tempUser2 = 1;                  // Tiempo tope de reposo de la vinaza
+int tempUser3 = 2;                  // Tiempo tope de vaciado del agua en el tanque 2
+int tempUser4 = 1;                  // Tiempo tope de vaciado de residuos en el tanque 2
+int pwm = 50;                       // Duty cycle del motor
+int tiempoLlenado = 1;              // Tiempo de llenado del tanque 1
 
-void level()
-{
-    if(sensor_level>=3) {
-        E_1=0;
-    }
-}
-
-void electro_1()
-{
-    E_1=!E_1;
-}
+int a = 0;
+int b = 0;
+int c = 0;
+int running = 0;
+int finished = 0;
+int canceled = 0;
+int campo = 1;
 
-void electro_2()
-{
-    E_2=!E_2;
-}
+/******************** TECLADO Y LCD ***********************/
+Serial pc(USBTX, USBRX); //rs, e,d4,d5,d6,d7
+TextLCD lcd(PC_8,PC_9,PC_10,PC_11,PC_12,PD_2);
+Keypad keypad(D3, D2, D1, D0, D7, D6, D5, D4);
 
-void electro_3()
-{
-    E_3=!E_3;
-}
-
-void electro_4()
-{
-    E_4=!E_4;
-}
+/********************* FUNCIONES **************************/
 
 void printLCD(){
     while(1){
         lcd.cls();
         lcd.locate(0,0);
-            lcd.printf("t1=%d",temp_user_1);
+            lcd.printf("t1=%d",tempUser1);
         lcd.locate(6,0);
-            lcd.printf("t2=%d",temp_user_2);
+            lcd.printf("t2=%d",tempUser2);
         lcd.locate(0,1);
-            lcd.printf("t3=%d",temp_user_3);
+            lcd.printf("t3=%d",tempUser3);
         lcd.locate(6,1);
-            lcd.printf("t4=%d",temp_user_4);
+            lcd.printf("t4=%d",tempUser4);
         lcd.locate(12,0);
             lcd.printf("PWM");
         lcd.locate(12,1);
             lcd.printf("%d",pwm);
         wait_ms(350);
-        switch(blinker){
+        switch(campo){
             case  1:
                 lcd.locate(0,0);
-                lcd.printf("t1=   ",temp_user_1); break;
+                lcd.printf("t1=   ",tempUser1); break;
             case  2:
                 lcd.locate(6,0);
-                lcd.printf("t2=   ",temp_user_2); break;
+                lcd.printf("t2=   ",tempUser2); break;
             case  3:
                 lcd.locate(0,1);
-                lcd.printf("t3=   ",temp_user_3); break;
+                lcd.printf("t3=   ",tempUser3); break;
             case  4:
                 lcd.locate(6,1);
-                lcd.printf("t4=   ",temp_user_4); break;       
+                lcd.printf("t4=   ",tempUser4); break;       
             case  5:
                 lcd.locate(12,1);
                 lcd.printf("   ");
@@ -145,19 +90,24 @@
             case '8': return 8;
             case '9': return 9;
             case 'A': 
-                blinker++;
-                if(blinker==6) blinker=1; return -1;
+                campo++;
+                if(campo==6) campo=1; return -1;
+            //case 'B': return -2;
+            //case 'C': return -3;
+            case 'D': return -4;
             default: ; break;
         }
         wait_ms(100);
     }
 }            
 
-/***********************MAIN***************************/
+/*********************** MAIN ***************************/
 
-int main()
-{
-    button.rise(&stop);
+void init(){ 
+    E_1 = 0;
+    E_2 = 0;
+    E_3 = 0;
+    E_4 = 0;
     keypad.enablePullUp();
     wait(1);
     lcd.locate(0,0);
@@ -165,39 +115,116 @@
     lcd.locate(0,1);
     lcd.printf("electrocoagular\n");
     wait(1.5);
-    lcd.cls();
-    int a=0;
-    int b=0;
-    int c=0;
+    motor.period(4);
+    return;
+}
 
-    Thread lcdprint;
-    lcdprint.start(printLCD);
-    
-    while(1) {      
+void setUserTimes(){
+    while(1) {                   
         setvalue:
-        a=100*getNum();
-        wait_ms(250);
-        if(a<0)goto setvalue;
-        b=10*getNum();
-        wait_ms(250);
-        if(b<0)goto setvalue;
-        c=getNum(); 
-        wait_ms(250);
-        if(c<0)goto setvalue;
+        a = 100*getNum();
+            wait_ms(150);
+            if(a==-1)goto setvalue;
+            if(a==-4)break;
+        b = 10*getNum();
+            wait_ms(150);
+            if(b==-1)goto setvalue;
+            if(b==-4)break;
+        c = getNum(); 
+            wait_ms(150);
+            if(c==-1)goto setvalue;
+            if(c==-4)break;
         
-        switch(blinker){
+        switch(campo){
         case 1:
-            temp_user_1=a+b+c; break;
+            tempUser1=a+b+c; break;
         case 2:
-            temp_user_2=a+b+c; break;
+            tempUser2=a+b+c; break;
         case 3:
-            temp_user_3=a+b+c; break;
+            tempUser3=a+b+c; break;
         case 4:
-            temp_user_4=a+b+c; break;
+            tempUser4=a+b+c; break;
         case 5:
             pwm=a+b+c;         break;
+        default: ;             break;
         }
         wait_ms(150);
+    }
+    return;  
+}
 
-    }//termina while de main
-}//termina main
+void vaciadoSolido(){
+    E_4 = 0;
+    finished = 1; 
+}
+
+void vaciadoLiquido(){
+    E_3 = 0;
+    E_4 = 1;
+    t.attach(&vaciadoSolido, tempUser4);
+}
+
+void reposo(){
+    E_3 = 1;
+    t.attach(&vaciadoLiquido, tempUser3);
+}
+
+void vaciado1(){
+    E_2 = 0;     
+    t.attach(&reposo, tempUser2);
+}
+
+void electro(){
+    motor.write(0.0f);
+    E_2 = 1;
+    t.attach(&vaciado1, tiempoLlenado);
+}
+
+void tiempoValvula1(){
+    E_1 = 0;
+    motor.write((float) pwm/100);     
+    t.attach(&electro, tempUser1);
+}
+
+void cancel_op(){   
+    canceled = 1;
+    t.detach();
+}
+
+int main(){
+    button.rise(&cancel_op);  
+    while(1){
+        if(running==0){
+            running = 1;
+            init();
+            Thread lcdprint;
+            lcdprint.start(printLCD);
+            
+            campo = 1;
+            setUserTimes();
+            
+            campo = 0;
+            finished = 0;
+            canceled = 0;
+            E_1 = 1;
+    
+            t.attach(&tiempoValvula1, tiempoLlenado); 
+        }
+        if(finished == 1){
+            lcd.cls();
+            lcd.locate(0,0);
+            lcd.printf("Finalizado\n");
+            running = 0;
+            wait(2);
+        }
+        if(canceled == 1){
+            lcd.cls();
+            lcd.locate(0,0);
+            lcd.printf("Operacion\n");
+            lcd.locate(0,1);
+            lcd.printf("cancelada\n");
+            running = 0;
+            wait(2);
+        }
+    }
+}
\ No newline at end of file