electro

Dependencies:   mbed QEI mbed-os KeypadLib TextLCD

Committer:
evanegasa
Date:
Mon Mar 04 20:40:42 2019 +0000
Revision:
6:0d2b3f985e41
Parent:
5:9869290cb13f
Child:
7:52b459308d55
khlkhj

Who changed what in which revision?

UserRevisionLine numberNew contents of line
afsaavedram 0:6cde030caebb 1 #include "mbed.h"
afsaavedram 0:6cde030caebb 2 #include "keypad.h"
afsaavedram 0:6cde030caebb 3 #include "TextLCD.h"
evanegasa 6:0d2b3f985e41 4 #include "stdlib.h"
afsaavedram 4:2636fe1c6527 5
evanegasa 6:0d2b3f985e41 6 /******************* IO ********************/
evanegasa 6:0d2b3f985e41 7 DigitalOut E_1(D8,0); // Control de electrovalvula 1
evanegasa 6:0d2b3f985e41 8 DigitalOut E_2(D9,0); // Control de electrovalvula 2
evanegasa 6:0d2b3f985e41 9 DigitalOut E_3(D10,0); // Control de electrovalvula 3
evanegasa 6:0d2b3f985e41 10 DigitalOut E_4(D12,0); // Control de electrovalvula 4
evanegasa 6:0d2b3f985e41 11 PwmOut motor(PA_5); // Variable temporal para el motor (se cambiará después)
afsaavedram 0:6cde030caebb 12
evanegasa 6:0d2b3f985e41 13 /******************* INTERRUPCIONES ********************/
evanegasa 6:0d2b3f985e41 14 Timeout t;
evanegasa 6:0d2b3f985e41 15 InterruptIn button(USER_BUTTON); // Cancelar operación
afsaavedram 0:6cde030caebb 16
evanegasa 6:0d2b3f985e41 17 /*******************VARIABLES********************/
evanegasa 6:0d2b3f985e41 18 int tempUser1 = 1; // Tiempo tope de electrocoagulacion
evanegasa 6:0d2b3f985e41 19 int tempUser2 = 1; // Tiempo tope de reposo de la vinaza
evanegasa 6:0d2b3f985e41 20 int tempUser3 = 2; // Tiempo tope de vaciado del agua en el tanque 2
evanegasa 6:0d2b3f985e41 21 int tempUser4 = 1; // Tiempo tope de vaciado de residuos en el tanque 2
evanegasa 6:0d2b3f985e41 22 int pwm = 50; // Duty cycle del motor
evanegasa 6:0d2b3f985e41 23 int tiempoLlenado = 1; // Tiempo de llenado del tanque 1
afsaavedram 0:6cde030caebb 24
evanegasa 6:0d2b3f985e41 25 int a = 0;
evanegasa 6:0d2b3f985e41 26 int b = 0;
evanegasa 6:0d2b3f985e41 27 int c = 0;
evanegasa 6:0d2b3f985e41 28 int running = 0;
evanegasa 6:0d2b3f985e41 29 int finished = 0;
evanegasa 6:0d2b3f985e41 30 int canceled = 0;
evanegasa 6:0d2b3f985e41 31 int campo = 1;
afsaavedram 0:6cde030caebb 32
evanegasa 6:0d2b3f985e41 33 /******************** TECLADO Y LCD ***********************/
evanegasa 6:0d2b3f985e41 34 Serial pc(USBTX, USBRX); //rs, e,d4,d5,d6,d7
evanegasa 6:0d2b3f985e41 35 TextLCD lcd(PC_8,PC_9,PC_10,PC_11,PC_12,PD_2);
evanegasa 6:0d2b3f985e41 36 Keypad keypad(D3, D2, D1, D0, D7, D6, D5, D4);
afsaavedram 0:6cde030caebb 37
evanegasa 6:0d2b3f985e41 38 /********************* FUNCIONES **************************/
afsaavedram 4:2636fe1c6527 39
evanegasa 5:9869290cb13f 40 void printLCD(){
evanegasa 5:9869290cb13f 41 while(1){
evanegasa 5:9869290cb13f 42 lcd.cls();
evanegasa 5:9869290cb13f 43 lcd.locate(0,0);
evanegasa 6:0d2b3f985e41 44 lcd.printf("t1=%d",tempUser1);
evanegasa 5:9869290cb13f 45 lcd.locate(6,0);
evanegasa 6:0d2b3f985e41 46 lcd.printf("t2=%d",tempUser2);
evanegasa 5:9869290cb13f 47 lcd.locate(0,1);
evanegasa 6:0d2b3f985e41 48 lcd.printf("t3=%d",tempUser3);
evanegasa 5:9869290cb13f 49 lcd.locate(6,1);
evanegasa 6:0d2b3f985e41 50 lcd.printf("t4=%d",tempUser4);
evanegasa 5:9869290cb13f 51 lcd.locate(12,0);
evanegasa 5:9869290cb13f 52 lcd.printf("PWM");
evanegasa 5:9869290cb13f 53 lcd.locate(12,1);
evanegasa 5:9869290cb13f 54 lcd.printf("%d",pwm);
evanegasa 5:9869290cb13f 55 wait_ms(350);
evanegasa 6:0d2b3f985e41 56 switch(campo){
evanegasa 5:9869290cb13f 57 case 1:
evanegasa 5:9869290cb13f 58 lcd.locate(0,0);
evanegasa 6:0d2b3f985e41 59 lcd.printf("t1= ",tempUser1); break;
evanegasa 5:9869290cb13f 60 case 2:
evanegasa 5:9869290cb13f 61 lcd.locate(6,0);
evanegasa 6:0d2b3f985e41 62 lcd.printf("t2= ",tempUser2); break;
evanegasa 5:9869290cb13f 63 case 3:
evanegasa 5:9869290cb13f 64 lcd.locate(0,1);
evanegasa 6:0d2b3f985e41 65 lcd.printf("t3= ",tempUser3); break;
evanegasa 5:9869290cb13f 66 case 4:
evanegasa 5:9869290cb13f 67 lcd.locate(6,1);
evanegasa 6:0d2b3f985e41 68 lcd.printf("t4= ",tempUser4); break;
evanegasa 5:9869290cb13f 69 case 5:
evanegasa 5:9869290cb13f 70 lcd.locate(12,1);
evanegasa 5:9869290cb13f 71 lcd.printf(" ");
evanegasa 5:9869290cb13f 72 default: ; break;
afsaavedram 4:2636fe1c6527 73 }
evanegasa 5:9869290cb13f 74 wait_ms(350);
evanegasa 5:9869290cb13f 75 }
afsaavedram 4:2636fe1c6527 76 }
afsaavedram 4:2636fe1c6527 77
evanegasa 5:9869290cb13f 78 int getNum(){
evanegasa 5:9869290cb13f 79 while(1){
evanegasa 5:9869290cb13f 80 char key = keypad.getKey();
evanegasa 5:9869290cb13f 81 switch(key) {
evanegasa 5:9869290cb13f 82 case '0': return 0;
evanegasa 5:9869290cb13f 83 case '1': return 1;
evanegasa 5:9869290cb13f 84 case '2': return 2;
evanegasa 5:9869290cb13f 85 case '3': return 3;
evanegasa 5:9869290cb13f 86 case '4': return 4;
evanegasa 5:9869290cb13f 87 case '5': return 5;
evanegasa 5:9869290cb13f 88 case '6': return 6;
evanegasa 5:9869290cb13f 89 case '7': return 7;
evanegasa 5:9869290cb13f 90 case '8': return 8;
evanegasa 5:9869290cb13f 91 case '9': return 9;
evanegasa 5:9869290cb13f 92 case 'A':
evanegasa 6:0d2b3f985e41 93 campo++;
evanegasa 6:0d2b3f985e41 94 if(campo==6) campo=1; return -1;
evanegasa 6:0d2b3f985e41 95 //case 'B': return -2;
evanegasa 6:0d2b3f985e41 96 //case 'C': return -3;
evanegasa 6:0d2b3f985e41 97 case 'D': return -4;
evanegasa 5:9869290cb13f 98 default: ; break;
afsaavedram 4:2636fe1c6527 99 }
evanegasa 5:9869290cb13f 100 wait_ms(100);
afsaavedram 4:2636fe1c6527 101 }
evanegasa 5:9869290cb13f 102 }
afsaavedram 4:2636fe1c6527 103
evanegasa 6:0d2b3f985e41 104 /*********************** MAIN ***************************/
afsaavedram 0:6cde030caebb 105
evanegasa 6:0d2b3f985e41 106 void init(){
evanegasa 6:0d2b3f985e41 107 E_1 = 0;
evanegasa 6:0d2b3f985e41 108 E_2 = 0;
evanegasa 6:0d2b3f985e41 109 E_3 = 0;
evanegasa 6:0d2b3f985e41 110 E_4 = 0;
afsaavedram 0:6cde030caebb 111 keypad.enablePullUp();
afsaavedram 0:6cde030caebb 112 wait(1);
afsaavedram 0:6cde030caebb 113 lcd.locate(0,0);
afsaavedram 0:6cde030caebb 114 lcd.printf(" Control para\n");
afsaavedram 0:6cde030caebb 115 lcd.locate(0,1);
afsaavedram 0:6cde030caebb 116 lcd.printf("electrocoagular\n");
afsaavedram 3:a4994da37d1f 117 wait(1.5);
evanegasa 6:0d2b3f985e41 118 motor.period(4);
evanegasa 6:0d2b3f985e41 119 return;
evanegasa 6:0d2b3f985e41 120 }
afsaavedram 2:4b27d3d7341a 121
evanegasa 6:0d2b3f985e41 122 void setUserTimes(){
evanegasa 6:0d2b3f985e41 123 while(1) {
evanegasa 5:9869290cb13f 124 setvalue:
evanegasa 6:0d2b3f985e41 125 a = 100*getNum();
evanegasa 6:0d2b3f985e41 126 wait_ms(150);
evanegasa 6:0d2b3f985e41 127 if(a==-1)goto setvalue;
evanegasa 6:0d2b3f985e41 128 if(a==-4)break;
evanegasa 6:0d2b3f985e41 129 b = 10*getNum();
evanegasa 6:0d2b3f985e41 130 wait_ms(150);
evanegasa 6:0d2b3f985e41 131 if(b==-1)goto setvalue;
evanegasa 6:0d2b3f985e41 132 if(b==-4)break;
evanegasa 6:0d2b3f985e41 133 c = getNum();
evanegasa 6:0d2b3f985e41 134 wait_ms(150);
evanegasa 6:0d2b3f985e41 135 if(c==-1)goto setvalue;
evanegasa 6:0d2b3f985e41 136 if(c==-4)break;
evanegasa 5:9869290cb13f 137
evanegasa 6:0d2b3f985e41 138 switch(campo){
evanegasa 5:9869290cb13f 139 case 1:
evanegasa 6:0d2b3f985e41 140 tempUser1=a+b+c; break;
evanegasa 5:9869290cb13f 141 case 2:
evanegasa 6:0d2b3f985e41 142 tempUser2=a+b+c; break;
evanegasa 5:9869290cb13f 143 case 3:
evanegasa 6:0d2b3f985e41 144 tempUser3=a+b+c; break;
evanegasa 5:9869290cb13f 145 case 4:
evanegasa 6:0d2b3f985e41 146 tempUser4=a+b+c; break;
evanegasa 5:9869290cb13f 147 case 5:
evanegasa 5:9869290cb13f 148 pwm=a+b+c; break;
evanegasa 6:0d2b3f985e41 149 default: ; break;
afsaavedram 3:a4994da37d1f 150 }
evanegasa 5:9869290cb13f 151 wait_ms(150);
evanegasa 6:0d2b3f985e41 152 }
evanegasa 6:0d2b3f985e41 153 return;
evanegasa 6:0d2b3f985e41 154 }
afsaavedram 0:6cde030caebb 155
evanegasa 6:0d2b3f985e41 156 void vaciadoSolido(){
evanegasa 6:0d2b3f985e41 157 E_4 = 0;
evanegasa 6:0d2b3f985e41 158 finished = 1;
evanegasa 6:0d2b3f985e41 159 }
evanegasa 6:0d2b3f985e41 160
evanegasa 6:0d2b3f985e41 161 void vaciadoLiquido(){
evanegasa 6:0d2b3f985e41 162 E_3 = 0;
evanegasa 6:0d2b3f985e41 163 E_4 = 1;
evanegasa 6:0d2b3f985e41 164 t.attach(&vaciadoSolido, tempUser4);
evanegasa 6:0d2b3f985e41 165 }
evanegasa 6:0d2b3f985e41 166
evanegasa 6:0d2b3f985e41 167 void reposo(){
evanegasa 6:0d2b3f985e41 168 E_3 = 1;
evanegasa 6:0d2b3f985e41 169 t.attach(&vaciadoLiquido, tempUser3);
evanegasa 6:0d2b3f985e41 170 }
evanegasa 6:0d2b3f985e41 171
evanegasa 6:0d2b3f985e41 172 void vaciado1(){
evanegasa 6:0d2b3f985e41 173 E_2 = 0;
evanegasa 6:0d2b3f985e41 174 t.attach(&reposo, tempUser2);
evanegasa 6:0d2b3f985e41 175 }
evanegasa 6:0d2b3f985e41 176
evanegasa 6:0d2b3f985e41 177 void electro(){
evanegasa 6:0d2b3f985e41 178 motor.write(0.0f);
evanegasa 6:0d2b3f985e41 179 E_2 = 1;
evanegasa 6:0d2b3f985e41 180 t.attach(&vaciado1, tiempoLlenado);
evanegasa 6:0d2b3f985e41 181 }
evanegasa 6:0d2b3f985e41 182
evanegasa 6:0d2b3f985e41 183 void tiempoValvula1(){
evanegasa 6:0d2b3f985e41 184 E_1 = 0;
evanegasa 6:0d2b3f985e41 185 motor.write((float) pwm/100);
evanegasa 6:0d2b3f985e41 186 t.attach(&electro, tempUser1);
evanegasa 6:0d2b3f985e41 187 }
evanegasa 6:0d2b3f985e41 188
evanegasa 6:0d2b3f985e41 189 void cancel_op(){
evanegasa 6:0d2b3f985e41 190 canceled = 1;
evanegasa 6:0d2b3f985e41 191 t.detach();
evanegasa 6:0d2b3f985e41 192 }
evanegasa 6:0d2b3f985e41 193
evanegasa 6:0d2b3f985e41 194 int main(){
evanegasa 6:0d2b3f985e41 195 button.rise(&cancel_op);
evanegasa 6:0d2b3f985e41 196 while(1){
evanegasa 6:0d2b3f985e41 197 if(running==0){
evanegasa 6:0d2b3f985e41 198 running = 1;
evanegasa 6:0d2b3f985e41 199 init();
evanegasa 6:0d2b3f985e41 200 Thread lcdprint;
evanegasa 6:0d2b3f985e41 201 lcdprint.start(printLCD);
evanegasa 6:0d2b3f985e41 202
evanegasa 6:0d2b3f985e41 203 campo = 1;
evanegasa 6:0d2b3f985e41 204 setUserTimes();
evanegasa 6:0d2b3f985e41 205
evanegasa 6:0d2b3f985e41 206 campo = 0;
evanegasa 6:0d2b3f985e41 207 finished = 0;
evanegasa 6:0d2b3f985e41 208 canceled = 0;
evanegasa 6:0d2b3f985e41 209 E_1 = 1;
evanegasa 6:0d2b3f985e41 210
evanegasa 6:0d2b3f985e41 211 t.attach(&tiempoValvula1, tiempoLlenado);
evanegasa 6:0d2b3f985e41 212 }
evanegasa 6:0d2b3f985e41 213 if(finished == 1){
evanegasa 6:0d2b3f985e41 214 lcd.cls();
evanegasa 6:0d2b3f985e41 215 lcd.locate(0,0);
evanegasa 6:0d2b3f985e41 216 lcd.printf("Finalizado\n");
evanegasa 6:0d2b3f985e41 217 running = 0;
evanegasa 6:0d2b3f985e41 218 wait(2);
evanegasa 6:0d2b3f985e41 219 }
evanegasa 6:0d2b3f985e41 220 if(canceled == 1){
evanegasa 6:0d2b3f985e41 221 lcd.cls();
evanegasa 6:0d2b3f985e41 222 lcd.locate(0,0);
evanegasa 6:0d2b3f985e41 223 lcd.printf("Operacion\n");
evanegasa 6:0d2b3f985e41 224 lcd.locate(0,1);
evanegasa 6:0d2b3f985e41 225 lcd.printf("cancelada\n");
evanegasa 6:0d2b3f985e41 226 running = 0;
evanegasa 6:0d2b3f985e41 227 wait(2);
evanegasa 6:0d2b3f985e41 228 }
evanegasa 6:0d2b3f985e41 229 }
evanegasa 6:0d2b3f985e41 230 }