electro
Dependencies: mbed QEI mbed-os KeypadLib TextLCD
Diff: electrocoagulador_final.cpp
- Revision:
- 6:0d2b3f985e41
- Parent:
- 5:9869290cb13f
- Child:
- 7:52b459308d55
diff -r 9869290cb13f -r 0d2b3f985e41 electrocoagulador_final.cpp --- 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