electro

Dependencies:   mbed QEI mbed-os KeypadLib TextLCD

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?

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"
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