electro
Dependencies: mbed mbed-os KeypadLib TextLCD
electrocoagulador_final.cpp@4:2636fe1c6527, 2019-03-02 (annotated)
- Committer:
- afsaavedram
- Date:
- Sat Mar 02 18:53:32 2019 +0000
- Revision:
- 4:2636fe1c6527
- Parent:
- 3:a4994da37d1f
- Child:
- 5:9869290cb13f
v1.4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
afsaavedram | 0:6cde030caebb | 1 | #include "mbed.h" |
afsaavedram | 0:6cde030caebb | 2 | #include "keypad.h" |
afsaavedram | 0:6cde030caebb | 3 | #include "TextLCD.h" |
afsaavedram | 4:2636fe1c6527 | 4 | #include "stdlib.h" //opcional |
afsaavedram | 0:6cde030caebb | 5 | |
afsaavedram | 0:6cde030caebb | 6 | /*******************ELECTROVALVULAS********************/ |
afsaavedram | 0:6cde030caebb | 7 | |
afsaavedram | 3:a4994da37d1f | 8 | DigitalOut E_1(D8,0); //Control de electrovalvula 1 |
afsaavedram | 3:a4994da37d1f | 9 | DigitalOut E_2(D9,0); //Control de electrovalvula 2 |
afsaavedram | 3:a4994da37d1f | 10 | DigitalOut E_3(D10,0); //Control de electrovalvula 3 |
afsaavedram | 3:a4994da37d1f | 11 | DigitalOut E_4(D12,0); //Control de electrovalvula 4 |
afsaavedram | 4:2636fe1c6527 | 12 | AnalogIn sensor_level(A0); //Sensor nivel tanque 1 |
afsaavedram | 4:2636fe1c6527 | 13 | PwmOut motor(PA_5); //variable temporal para el motor (se cambiará después) |
afsaavedram | 0:6cde030caebb | 14 | /*****************************************************/ |
afsaavedram | 0:6cde030caebb | 15 | |
afsaavedram | 0:6cde030caebb | 16 | /*******************INTERRUPCIONES********************/ |
afsaavedram | 0:6cde030caebb | 17 | |
afsaavedram | 0:6cde030caebb | 18 | InterruptIn button(USER_BUTTON); |
afsaavedram | 4:2636fe1c6527 | 19 | Ticker check_level; |
afsaavedram | 4:2636fe1c6527 | 20 | Ticker up; |
afsaavedram | 4:2636fe1c6527 | 21 | Ticker down; |
afsaavedram | 4:2636fe1c6527 | 22 | |
afsaavedram | 0:6cde030caebb | 23 | Timeout t_1; |
afsaavedram | 0:6cde030caebb | 24 | Timeout t_2; |
afsaavedram | 0:6cde030caebb | 25 | Timeout t_3; |
afsaavedram | 0:6cde030caebb | 26 | Timeout t_4; |
afsaavedram | 0:6cde030caebb | 27 | |
afsaavedram | 0:6cde030caebb | 28 | //tiempos de usuario |
afsaavedram | 3:a4994da37d1f | 29 | int temp_user_1=0; //tiempo tope de electrocoagulacion |
afsaavedram | 3:a4994da37d1f | 30 | int temp_user_2=0; //tiempo tope de reposo de la vinaza |
afsaavedram | 3:a4994da37d1f | 31 | int temp_user_3=0; //tiempo tope de vaciado del agua en el tanque 2 |
afsaavedram | 3:a4994da37d1f | 32 | int temp_user_4=0; //tiempo tope de vaciado de residuos en el tanque 2 |
afsaavedram | 0:6cde030caebb | 33 | |
afsaavedram | 0:6cde030caebb | 34 | |
afsaavedram | 4:2636fe1c6527 | 35 | //timers |
afsaavedram | 4:2636fe1c6527 | 36 | Timer timer_1; |
afsaavedram | 4:2636fe1c6527 | 37 | Timer timer_2; |
afsaavedram | 4:2636fe1c6527 | 38 | Timer timer_3; |
afsaavedram | 0:6cde030caebb | 39 | |
afsaavedram | 0:6cde030caebb | 40 | /********************TECLADO Y LCD***********************/ |
afsaavedram | 0:6cde030caebb | 41 | |
afsaavedram | 0:6cde030caebb | 42 | // rs, e,d4,d5,d6,d7 |
afsaavedram | 0:6cde030caebb | 43 | TextLCD lcd(PC_8,PC_9,PC_10,PC_11,PC_12,PD_2); |
afsaavedram | 0:6cde030caebb | 44 | |
afsaavedram | 0:6cde030caebb | 45 | |
afsaavedram | 0:6cde030caebb | 46 | Keypad keypad(D3, D2, D1, D0, D7, D6, D5, D4); |
afsaavedram | 0:6cde030caebb | 47 | float num=0; |
afsaavedram | 0:6cde030caebb | 48 | char cadena[3]= {' ',' ',' '}; |
afsaavedram | 0:6cde030caebb | 49 | int llena=0; //verificar que la entrada es de 3 numeros |
afsaavedram | 0:6cde030caebb | 50 | |
afsaavedram | 0:6cde030caebb | 51 | |
afsaavedram | 0:6cde030caebb | 52 | /*********************FUNCIONES**************************/ |
afsaavedram | 0:6cde030caebb | 53 | |
afsaavedram | 0:6cde030caebb | 54 | void stop() //STOP |
afsaavedram | 0:6cde030caebb | 55 | { |
afsaavedram | 0:6cde030caebb | 56 | |
afsaavedram | 0:6cde030caebb | 57 | while(1) { |
afsaavedram | 0:6cde030caebb | 58 | lcd.cls(); |
afsaavedram | 3:a4994da37d1f | 59 | lcd.printf(" STOP!"); |
afsaavedram | 3:a4994da37d1f | 60 | lcd.locate(0,1); |
afsaavedram | 3:a4994da37d1f | 61 | lcd.printf(" PLEASE RESET"); |
afsaavedram | 3:a4994da37d1f | 62 | wait_ms(150); |
afsaavedram | 0:6cde030caebb | 63 | } |
afsaavedram | 0:6cde030caebb | 64 | } |
afsaavedram | 0:6cde030caebb | 65 | |
afsaavedram | 4:2636fe1c6527 | 66 | void level() |
afsaavedram | 4:2636fe1c6527 | 67 | { |
afsaavedram | 4:2636fe1c6527 | 68 | if(sensor_level>=3) { |
afsaavedram | 4:2636fe1c6527 | 69 | E_1=0; |
afsaavedram | 4:2636fe1c6527 | 70 | } |
afsaavedram | 4:2636fe1c6527 | 71 | } |
afsaavedram | 4:2636fe1c6527 | 72 | |
afsaavedram | 3:a4994da37d1f | 73 | void electro_1() |
afsaavedram | 0:6cde030caebb | 74 | { |
afsaavedram | 0:6cde030caebb | 75 | E_1=!E_1; |
afsaavedram | 0:6cde030caebb | 76 | } |
afsaavedram | 0:6cde030caebb | 77 | |
afsaavedram | 3:a4994da37d1f | 78 | void electro_2() |
afsaavedram | 0:6cde030caebb | 79 | { |
afsaavedram | 0:6cde030caebb | 80 | E_2=!E_2; |
afsaavedram | 0:6cde030caebb | 81 | } |
afsaavedram | 0:6cde030caebb | 82 | |
afsaavedram | 3:a4994da37d1f | 83 | void electro_3() |
afsaavedram | 0:6cde030caebb | 84 | { |
afsaavedram | 0:6cde030caebb | 85 | E_3=!E_3; |
afsaavedram | 0:6cde030caebb | 86 | } |
afsaavedram | 0:6cde030caebb | 87 | |
afsaavedram | 3:a4994da37d1f | 88 | void electro_4() |
afsaavedram | 0:6cde030caebb | 89 | { |
afsaavedram | 0:6cde030caebb | 90 | E_4=!E_4; |
afsaavedram | 0:6cde030caebb | 91 | } |
afsaavedram | 4:2636fe1c6527 | 92 | |
afsaavedram | 4:2636fe1c6527 | 93 | void pwm_rise() |
afsaavedram | 4:2636fe1c6527 | 94 | { |
afsaavedram | 4:2636fe1c6527 | 95 | if(keypad.getKey()=='7') { |
afsaavedram | 4:2636fe1c6527 | 96 | double n=n+0.003; |
afsaavedram | 4:2636fe1c6527 | 97 | if(n>=1) { |
afsaavedram | 4:2636fe1c6527 | 98 | n=1; |
afsaavedram | 4:2636fe1c6527 | 99 | } |
afsaavedram | 4:2636fe1c6527 | 100 | motor.period(0.5); // 4 second period |
afsaavedram | 4:2636fe1c6527 | 101 | motor.write(n); // % of duty cycle, relative to period |
afsaavedram | 4:2636fe1c6527 | 102 | wait(150); |
afsaavedram | 4:2636fe1c6527 | 103 | } |
afsaavedram | 4:2636fe1c6527 | 104 | } |
afsaavedram | 4:2636fe1c6527 | 105 | |
afsaavedram | 4:2636fe1c6527 | 106 | void pwm_fall() |
afsaavedram | 4:2636fe1c6527 | 107 | { |
afsaavedram | 4:2636fe1c6527 | 108 | if(keypad.getKey()=='8') { |
afsaavedram | 4:2636fe1c6527 | 109 | double n=n-0.003; |
afsaavedram | 4:2636fe1c6527 | 110 | if(n<0) { |
afsaavedram | 4:2636fe1c6527 | 111 | n=0; |
afsaavedram | 4:2636fe1c6527 | 112 | } |
afsaavedram | 4:2636fe1c6527 | 113 | motor.period(0.5); // 4 second period |
afsaavedram | 4:2636fe1c6527 | 114 | motor.write(n); // % of duty cycle, relative to period |
afsaavedram | 4:2636fe1c6527 | 115 | wait(150); |
afsaavedram | 4:2636fe1c6527 | 116 | } |
afsaavedram | 4:2636fe1c6527 | 117 | } |
afsaavedram | 4:2636fe1c6527 | 118 | |
afsaavedram | 0:6cde030caebb | 119 | /***********************MAIN***************************/ |
afsaavedram | 0:6cde030caebb | 120 | |
afsaavedram | 0:6cde030caebb | 121 | int main() |
afsaavedram | 0:6cde030caebb | 122 | { |
afsaavedram | 0:6cde030caebb | 123 | button.rise(&stop); |
afsaavedram | 0:6cde030caebb | 124 | keypad.enablePullUp(); |
afsaavedram | 0:6cde030caebb | 125 | wait(1); |
afsaavedram | 0:6cde030caebb | 126 | lcd.locate(0,0); |
afsaavedram | 0:6cde030caebb | 127 | lcd.printf(" Control para\n"); |
afsaavedram | 0:6cde030caebb | 128 | lcd.locate(0,1); |
afsaavedram | 0:6cde030caebb | 129 | lcd.printf("electrocoagular\n"); |
afsaavedram | 3:a4994da37d1f | 130 | wait(1.5); |
afsaavedram | 0:6cde030caebb | 131 | lcd.cls(); |
afsaavedram | 4:2636fe1c6527 | 132 | down.attach(&pwm_fall,0.013); |
afsaavedram | 4:2636fe1c6527 | 133 | up.attach(&pwm_rise,0.011); |
afsaavedram | 2:4b27d3d7341a | 134 | |
afsaavedram | 2:4b27d3d7341a | 135 | |
afsaavedram | 0:6cde030caebb | 136 | while(1) { |
afsaavedram | 3:a4994da37d1f | 137 | ini_1: |
afsaavedram | 3:a4994da37d1f | 138 | lcd.cls(); |
afsaavedram | 3:a4994da37d1f | 139 | lcd.locate(0,0); |
afsaavedram | 3:a4994da37d1f | 140 | lcd.printf("t_1=%d",temp_user_1); |
afsaavedram | 3:a4994da37d1f | 141 | lcd.locate(8,0); |
afsaavedram | 3:a4994da37d1f | 142 | lcd.printf("t_2=%d",temp_user_2); |
afsaavedram | 3:a4994da37d1f | 143 | lcd.locate(0,1); |
afsaavedram | 3:a4994da37d1f | 144 | lcd.printf("t_3=%d",temp_user_3); |
afsaavedram | 3:a4994da37d1f | 145 | lcd.locate(8,1); |
afsaavedram | 3:a4994da37d1f | 146 | lcd.printf("t_4=%d",temp_user_4); |
afsaavedram | 3:a4994da37d1f | 147 | wait_ms(100); |
afsaavedram | 0:6cde030caebb | 148 | |
afsaavedram | 0:6cde030caebb | 149 | char key = keypad.getKey(); |
afsaavedram | 2:4b27d3d7341a | 150 | |
afsaavedram | 2:4b27d3d7341a | 151 | //if(key=='A') { |
afsaavedram | 3:a4994da37d1f | 152 | //lcd.cls(); |
afsaavedram | 3:a4994da37d1f | 153 | //lcd.locate(0,0); |
afsaavedram | 3:a4994da37d1f | 154 | //lcd.printf("%c",key); |
afsaavedram | 3:a4994da37d1f | 155 | //wait(3); |
afsaavedram | 2:4b27d3d7341a | 156 | |
afsaavedram | 3:a4994da37d1f | 157 | |
afsaavedram | 3:a4994da37d1f | 158 | |
afsaavedram | 3:a4994da37d1f | 159 | // lcd.printf("t_1=%f",temp_user_1); |
afsaavedram | 2:4b27d3d7341a | 160 | |
afsaavedram | 2:4b27d3d7341a | 161 | |
afsaavedram | 3:a4994da37d1f | 162 | if(key=='1') { |
afsaavedram | 3:a4994da37d1f | 163 | temp_user_1=temp_user_1+10; |
afsaavedram | 3:a4994da37d1f | 164 | if(temp_user_1<00) { |
afsaavedram | 3:a4994da37d1f | 165 | temp_user_1=00; |
afsaavedram | 3:a4994da37d1f | 166 | } |
afsaavedram | 3:a4994da37d1f | 167 | wait_ms(150); |
afsaavedram | 3:a4994da37d1f | 168 | } |
afsaavedram | 3:a4994da37d1f | 169 | if(key=='2') { |
afsaavedram | 3:a4994da37d1f | 170 | temp_user_1=temp_user_1-1; |
afsaavedram | 3:a4994da37d1f | 171 | if(temp_user_1<00) { |
afsaavedram | 3:a4994da37d1f | 172 | temp_user_1=00; |
afsaavedram | 3:a4994da37d1f | 173 | } |
afsaavedram | 3:a4994da37d1f | 174 | wait_ms(150); |
afsaavedram | 3:a4994da37d1f | 175 | } |
afsaavedram | 3:a4994da37d1f | 176 | if(key=='3') { |
afsaavedram | 3:a4994da37d1f | 177 | temp_user_2=temp_user_2+10; |
afsaavedram | 3:a4994da37d1f | 178 | if(temp_user_2<00) { |
afsaavedram | 3:a4994da37d1f | 179 | temp_user_2=00; |
afsaavedram | 3:a4994da37d1f | 180 | } |
afsaavedram | 3:a4994da37d1f | 181 | wait_ms(150); |
afsaavedram | 3:a4994da37d1f | 182 | } |
afsaavedram | 3:a4994da37d1f | 183 | if(key=='A') { |
afsaavedram | 3:a4994da37d1f | 184 | temp_user_2=temp_user_2-1; |
afsaavedram | 3:a4994da37d1f | 185 | if(temp_user_2<00) { |
afsaavedram | 3:a4994da37d1f | 186 | temp_user_2=00; |
afsaavedram | 3:a4994da37d1f | 187 | } |
afsaavedram | 3:a4994da37d1f | 188 | wait_ms(150); |
afsaavedram | 3:a4994da37d1f | 189 | } |
afsaavedram | 3:a4994da37d1f | 190 | if(key=='4') { |
afsaavedram | 3:a4994da37d1f | 191 | temp_user_3=temp_user_3+10; |
afsaavedram | 3:a4994da37d1f | 192 | if(temp_user_3<00) { |
afsaavedram | 3:a4994da37d1f | 193 | temp_user_3=00; |
afsaavedram | 3:a4994da37d1f | 194 | } |
afsaavedram | 3:a4994da37d1f | 195 | wait_ms(150); |
afsaavedram | 3:a4994da37d1f | 196 | } |
afsaavedram | 3:a4994da37d1f | 197 | if(key=='5') { |
afsaavedram | 3:a4994da37d1f | 198 | temp_user_3=temp_user_3-1; |
afsaavedram | 3:a4994da37d1f | 199 | if(temp_user_3<00) { |
afsaavedram | 3:a4994da37d1f | 200 | temp_user_3=00; |
afsaavedram | 3:a4994da37d1f | 201 | } |
afsaavedram | 3:a4994da37d1f | 202 | wait_ms(150); |
afsaavedram | 3:a4994da37d1f | 203 | } |
afsaavedram | 3:a4994da37d1f | 204 | if(key=='6') { |
afsaavedram | 3:a4994da37d1f | 205 | temp_user_4=temp_user_4+10; |
afsaavedram | 3:a4994da37d1f | 206 | if(temp_user_4<00) { |
afsaavedram | 3:a4994da37d1f | 207 | temp_user_4=00; |
afsaavedram | 3:a4994da37d1f | 208 | } |
afsaavedram | 3:a4994da37d1f | 209 | wait_ms(150); |
afsaavedram | 3:a4994da37d1f | 210 | } |
afsaavedram | 3:a4994da37d1f | 211 | if(key=='B') { |
afsaavedram | 3:a4994da37d1f | 212 | temp_user_4=temp_user_4-1; |
afsaavedram | 3:a4994da37d1f | 213 | if(temp_user_4<00) { |
afsaavedram | 3:a4994da37d1f | 214 | temp_user_4=00; |
afsaavedram | 3:a4994da37d1f | 215 | } |
afsaavedram | 3:a4994da37d1f | 216 | wait_ms(150); |
afsaavedram | 3:a4994da37d1f | 217 | } |
afsaavedram | 2:4b27d3d7341a | 218 | |
afsaavedram | 3:a4994da37d1f | 219 | /***********************COMIENZA CONTROL***********************/ |
afsaavedram | 3:a4994da37d1f | 220 | if(key=='D' && temp_user_1!=0) { |
afsaavedram | 4:2636fe1c6527 | 221 | E_1=1; |
afsaavedram | 4:2636fe1c6527 | 222 | while(E_1==1) { |
afsaavedram | 4:2636fe1c6527 | 223 | check_level.attach(&level, 0.5); |
afsaavedram | 4:2636fe1c6527 | 224 | } |
afsaavedram | 4:2636fe1c6527 | 225 | t_1.attach(&electro_2,temp_user_1); |
afsaavedram | 4:2636fe1c6527 | 226 | //motor=1; |
afsaavedram | 4:2636fe1c6527 | 227 | timer_1.start(); |
afsaavedram | 4:2636fe1c6527 | 228 | while(timer_1.read()>=temp_user_1) { |
afsaavedram | 4:2636fe1c6527 | 229 | timer_1.stop(); |
afsaavedram | 4:2636fe1c6527 | 230 | motor.write(0); |
afsaavedram | 4:2636fe1c6527 | 231 | timer_2.start(); |
afsaavedram | 4:2636fe1c6527 | 232 | while(timer_2.read()<=timer_1) { |
afsaavedram | 4:2636fe1c6527 | 233 | E_2=1; |
afsaavedram | 4:2636fe1c6527 | 234 | } |
afsaavedram | 4:2636fe1c6527 | 235 | electro_2(); |
afsaavedram | 4:2636fe1c6527 | 236 | timer_2.stop(); |
afsaavedram | 4:2636fe1c6527 | 237 | timer_3.start(); |
afsaavedram | 4:2636fe1c6527 | 238 | while(timer_3.read()<= temp_user_2+temp_user_3+temp_user_4) { |
afsaavedram | 4:2636fe1c6527 | 239 | t_2.attach(&electro_3,temp_user_2); |
afsaavedram | 4:2636fe1c6527 | 240 | t_3.attach(&electro_3,temp_user_2+temp_user_3); |
afsaavedram | 4:2636fe1c6527 | 241 | t_4.attach(&electro_4,temp_user_4); |
afsaavedram | 4:2636fe1c6527 | 242 | } |
afsaavedram | 4:2636fe1c6527 | 243 | } |
afsaavedram | 4:2636fe1c6527 | 244 | |
afsaavedram | 4:2636fe1c6527 | 245 | |
afsaavedram | 3:a4994da37d1f | 246 | |
afsaavedram | 3:a4994da37d1f | 247 | |
afsaavedram | 3:a4994da37d1f | 248 | |
afsaavedram | 2:4b27d3d7341a | 249 | |
afsaavedram | 3:a4994da37d1f | 250 | } else if (key=='D' && temp_user_1==0) { |
afsaavedram | 3:a4994da37d1f | 251 | lcd.cls(); |
afsaavedram | 3:a4994da37d1f | 252 | lcd.printf(" t_1 empty"); |
afsaavedram | 3:a4994da37d1f | 253 | wait(1.5); |
afsaavedram | 3:a4994da37d1f | 254 | key='\0'; |
afsaavedram | 3:a4994da37d1f | 255 | goto ini_1; |
afsaavedram | 3:a4994da37d1f | 256 | } |
afsaavedram | 3:a4994da37d1f | 257 | |
afsaavedram | 3:a4994da37d1f | 258 | |
afsaavedram | 3:a4994da37d1f | 259 | /* |
afsaavedram | 3:a4994da37d1f | 260 | if(key=='A'){ |
afsaavedram | 3:a4994da37d1f | 261 | while(llena<=2){ |
afsaavedram | 3:a4994da37d1f | 262 | if(llena<3){ |
afsaavedram | 3:a4994da37d1f | 263 | cadena[llena]=keypad.getKey(); |
afsaavedram | 3:a4994da37d1f | 264 | temp_user_1=strtod(cadena,NULL); |
afsaavedram | 3:a4994da37d1f | 265 | llena++; |
afsaavedram | 3:a4994da37d1f | 266 | switch(llena){ |
afsaavedram | 3:a4994da37d1f | 267 | case 0: |
afsaavedram | 3:a4994da37d1f | 268 | if(llena==0 && keypad.getKey()!= '\0'){ |
afsaavedram | 3:a4994da37d1f | 269 | cadena[llena]=keypad.getKey(); |
afsaavedram | 3:a4994da37d1f | 270 | llena=llena +1; |
afsaavedram | 3:a4994da37d1f | 271 | break; |
afsaavedram | 2:4b27d3d7341a | 272 | } |
afsaavedram | 2:4b27d3d7341a | 273 | |
afsaavedram | 3:a4994da37d1f | 274 | case 1: |
afsaavedram | 3:a4994da37d1f | 275 | if(llena==1 && keypad.getKey()!= '\0'){ |
afsaavedram | 3:a4994da37d1f | 276 | cadena[llena]=keypad.getKey(); |
afsaavedram | 3:a4994da37d1f | 277 | llena=llena+1; |
afsaavedram | 3:a4994da37d1f | 278 | break; |
afsaavedram | 3:a4994da37d1f | 279 | } |
afsaavedram | 3:a4994da37d1f | 280 | |
afsaavedram | 3:a4994da37d1f | 281 | case 2: |
afsaavedram | 3:a4994da37d1f | 282 | if(llena==2 && keypad.getKey()!= '\0'){ |
afsaavedram | 3:a4994da37d1f | 283 | cadena[llena]=keypad.getKey(); |
afsaavedram | 3:a4994da37d1f | 284 | llena=llena+1; |
afsaavedram | 3:a4994da37d1f | 285 | break;} |
afsaavedram | 3:a4994da37d1f | 286 | |
afsaavedram | 3:a4994da37d1f | 287 | default: |
afsaavedram | 3:a4994da37d1f | 288 | break; |
afsaavedram | 3:a4994da37d1f | 289 | }*/ |
afsaavedram | 3:a4994da37d1f | 290 | //lcd.cls(); |
afsaavedram | 3:a4994da37d1f | 291 | //temp_user_1=strtod(cadena,NULL); |
afsaavedram | 3:a4994da37d1f | 292 | //lcd.locate(0,0); |
afsaavedram | 3:a4994da37d1f | 293 | //lcd.printf("t_1=%f",temp_user_1); |
afsaavedram | 3:a4994da37d1f | 294 | |
afsaavedram | 0:6cde030caebb | 295 | |
afsaavedram | 0:6cde030caebb | 296 | |
afsaavedram | 0:6cde030caebb | 297 | |
afsaavedram | 0:6cde030caebb | 298 | |
afsaavedram | 2:4b27d3d7341a | 299 | }//termina while de main |
afsaavedram | 2:4b27d3d7341a | 300 | }//termina main |