Tarea3 procesaodres, reloj con 7 alarmas + irda
Dependencies: Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed
Fork of Reloj_alarma by
Tarea 3 procesadores 2018-1
Juan Camilo Londoño Julieta Serrano Escalante
Reloj Ds1307 con 7 alarmas configurables por medio de encoder, ademas, se activan y desactivan mediante un control remoto y un sensor IRDA
main.cpp@3:35a40be1047f, 2018-06-01 (annotated)
- Committer:
- jclondonol
- Date:
- Fri Jun 01 21:58:03 2018 +0000
- Revision:
- 3:35a40be1047f
- Parent:
- 2:bef1b1c9e387
Tarea 4 Control PID para horno de reflujo con seguimiento de consigna
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jepalacioh | 0:c2ed510ee88d | 1 | #include "mbed.h" |
Jepalacioh | 0:c2ed510ee88d | 2 | #include "DebouncedIn.h" |
Jepalacioh | 0:c2ed510ee88d | 3 | #include "TextLCD.h" |
Jepalacioh | 0:c2ed510ee88d | 4 | #include "QEI.h" |
Jepalacioh | 0:c2ed510ee88d | 5 | #include "Rtc_Ds1307.h" |
jclondonol | 2:bef1b1c9e387 | 6 | #include <Pulse1.h> |
Jepalacioh | 0:c2ed510ee88d | 7 | |
jclondonol | 3:35a40be1047f | 8 | TextLCD lcd(PTE20, PTB1, PTB2, PTB3, PTC2, PTE21); // rs, e, d4, d5, d6, d7 |
Jepalacioh | 0:c2ed510ee88d | 9 | Rtc_Ds1307 rtc(PTE0, PTE1); |
jclondonol | 2:bef1b1c9e387 | 10 | QEI wheel (PTD7, PTD6, NC, 30); |
Jepalacioh | 0:c2ed510ee88d | 11 | DebouncedIn button_enco(PTC5); |
jclondonol | 3:35a40be1047f | 12 | PwmOut U_pwm(PTE29); |
jclondonol | 3:35a40be1047f | 13 | AnalogOut U_analog(PTE30); |
jclondonol | 3:35a40be1047f | 14 | AnalogIn Y(A0); |
jclondonol | 3:35a40be1047f | 15 | DigitalOut pwm_analog(PTC6); |
jclondonol | 2:bef1b1c9e387 | 16 | |
Jepalacioh | 0:c2ed510ee88d | 17 | |
Jepalacioh | 0:c2ed510ee88d | 18 | int main() |
Jepalacioh | 0:c2ed510ee88d | 19 | { |
jclondonol | 3:35a40be1047f | 20 | int C1 = 0x0C; |
jclondonol | 3:35a40be1047f | 21 | int m = 0; |
jclondonol | 3:35a40be1047f | 22 | int Lugar = 0; // Definen el punto en el cual va el programa |
jclondonol | 3:35a40be1047f | 23 | int i = 0; |
jclondonol | 3:35a40be1047f | 24 | int pos = 0; |
jclondonol | 3:35a40be1047f | 25 | int Kp = 1, Ki = 1, Kd = 1, Sp = 0; |
jclondonol | 3:35a40be1047f | 26 | float sp_temp = 0; |
jclondonol | 3:35a40be1047f | 27 | float T1 = 0.1, T2 = 0.1, T3 = 0.1; |
jclondonol | 3:35a40be1047f | 28 | int flag_pwm = 0; |
jclondonol | 3:35a40be1047f | 29 | float periodo; |
jclondonol | 3:35a40be1047f | 30 | float Frecuencia = 2000; |
jclondonol | 3:35a40be1047f | 31 | float pid = 0,ai = 0,ad = 0,ap = 0,med = 0,err = 0; |
jclondonol | 3:35a40be1047f | 32 | float err_v; |
jclondonol | 3:35a40be1047f | 33 | int tiempo = 0, sec = 0, sec_ant = 0; |
jclondonol | 3:35a40be1047f | 34 | |
Jepalacioh | 0:c2ed510ee88d | 35 | Rtc_Ds1307::Time_rtc tm = {}; |
Jepalacioh | 0:c2ed510ee88d | 36 | lcd.cls(); |
Jepalacioh | 0:c2ed510ee88d | 37 | lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD |
Jepalacioh | 0:c2ed510ee88d | 38 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 39 | rtc.getTime(tm); |
Jepalacioh | 0:c2ed510ee88d | 40 | periodo=(1/Frecuencia); |
jclondonol | 3:35a40be1047f | 41 | U_pwm.period(periodo); |
jclondonol | 3:35a40be1047f | 42 | U_pwm.pulsewidth(0); |
jclondonol | 3:35a40be1047f | 43 | U_analog = 0.0; |
jclondonol | 3:35a40be1047f | 44 | pwm_analog = 0; |
jclondonol | 3:35a40be1047f | 45 | |
Jepalacioh | 0:c2ed510ee88d | 46 | |
Jepalacioh | 0:c2ed510ee88d | 47 | while(1) |
Jepalacioh | 0:c2ed510ee88d | 48 | { |
Jepalacioh | 0:c2ed510ee88d | 49 | switch (Lugar) |
jclondonol | 2:bef1b1c9e387 | 50 | { |
jclondonol | 3:35a40be1047f | 51 | case 0: // Seleccionar Configuracion |
jclondonol | 2:bef1b1c9e387 | 52 | m = wheel.getPulses(); |
jclondonol | 2:bef1b1c9e387 | 53 | if(m != 0) |
jclondonol | 2:bef1b1c9e387 | 54 | { |
jclondonol | 2:bef1b1c9e387 | 55 | wheel.reset(); |
jclondonol | 2:bef1b1c9e387 | 56 | pos = pos + m; |
jclondonol | 2:bef1b1c9e387 | 57 | m = 0; |
jclondonol | 2:bef1b1c9e387 | 58 | lcd.cls(); |
jclondonol | 2:bef1b1c9e387 | 59 | } |
jclondonol | 3:35a40be1047f | 60 | if(pos > 3){pos = 0;} |
jclondonol | 3:35a40be1047f | 61 | if(pos < 0){pos = 3;} |
Jepalacioh | 0:c2ed510ee88d | 62 | |
jclondonol | 3:35a40be1047f | 63 | switch(pos) |
jclondonol | 2:bef1b1c9e387 | 64 | { |
jclondonol | 3:35a40be1047f | 65 | case 0: |
jclondonol | 3:35a40be1047f | 66 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 67 | lcd.printf("Kp: %03d", Kp); |
jclondonol | 3:35a40be1047f | 68 | lcd.locate(8,0); |
jclondonol | 3:35a40be1047f | 69 | lcd.printf("Ki: %03d", Ki); |
jclondonol | 3:35a40be1047f | 70 | lcd.locate(0,1); |
jclondonol | 3:35a40be1047f | 71 | lcd.printf("Kd: %03d", Kd); |
jclondonol | 3:35a40be1047f | 72 | lcd.locate(8,1); |
jclondonol | 3:35a40be1047f | 73 | lcd.printf("Sp: %03d", Sp); |
jclondonol | 3:35a40be1047f | 74 | wait(0.1); |
jclondonol | 3:35a40be1047f | 75 | break; |
jclondonol | 3:35a40be1047f | 76 | case 1: |
jclondonol | 2:bef1b1c9e387 | 77 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 78 | lcd.printf("T1: %0.1f", T1); |
jclondonol | 3:35a40be1047f | 79 | lcd.locate(8,0); |
jclondonol | 3:35a40be1047f | 80 | lcd.printf("T2: %0.1f", T2); |
jclondonol | 3:35a40be1047f | 81 | lcd.locate(0,1); |
jclondonol | 3:35a40be1047f | 82 | lcd.printf("T3: %0.1f", T3); |
jclondonol | 3:35a40be1047f | 83 | lcd.locate(8,1); |
jclondonol | 3:35a40be1047f | 84 | lcd.printf("(min)"); |
jclondonol | 3:35a40be1047f | 85 | wait(0.1); |
jclondonol | 3:35a40be1047f | 86 | break; |
jclondonol | 3:35a40be1047f | 87 | case 2: |
jclondonol | 3:35a40be1047f | 88 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 89 | lcd.printf("Setup Out"); |
jclondonol | 2:bef1b1c9e387 | 90 | lcd.locate(0,1); |
jclondonol | 3:35a40be1047f | 91 | if(flag_pwm == 0) |
jclondonol | 3:35a40be1047f | 92 | { |
jclondonol | 3:35a40be1047f | 93 | lcd.printf("-> Pwm -- Analog"); |
jclondonol | 3:35a40be1047f | 94 | } |
jclondonol | 3:35a40be1047f | 95 | else |
jclondonol | 3:35a40be1047f | 96 | { |
jclondonol | 3:35a40be1047f | 97 | lcd.printf("-- Pwm -> Analog"); |
jclondonol | 3:35a40be1047f | 98 | } |
jclondonol | 3:35a40be1047f | 99 | break; |
jclondonol | 3:35a40be1047f | 100 | case 3: |
jclondonol | 3:35a40be1047f | 101 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 102 | lcd.printf("Start PID"); |
jclondonol | 3:35a40be1047f | 103 | break; |
jclondonol | 2:bef1b1c9e387 | 104 | } |
jclondonol | 2:bef1b1c9e387 | 105 | |
jclondonol | 2:bef1b1c9e387 | 106 | if (button_enco.falling()) //si se pulsa boton encoder |
jclondonol | 2:bef1b1c9e387 | 107 | { |
jclondonol | 3:35a40be1047f | 108 | if(pos == 0) |
jclondonol | 3:35a40be1047f | 109 | { |
jclondonol | 3:35a40be1047f | 110 | Lugar = 1; |
jclondonol | 3:35a40be1047f | 111 | i = 0; |
jclondonol | 3:35a40be1047f | 112 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 113 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 114 | lcd.printf("Kp: "); |
jclondonol | 3:35a40be1047f | 115 | } |
jclondonol | 3:35a40be1047f | 116 | if(pos == 1) |
jclondonol | 3:35a40be1047f | 117 | { |
jclondonol | 3:35a40be1047f | 118 | Lugar = 2; |
jclondonol | 3:35a40be1047f | 119 | i = 0; |
jclondonol | 3:35a40be1047f | 120 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 121 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 122 | lcd.printf("T1: "); |
jclondonol | 3:35a40be1047f | 123 | } |
jclondonol | 3:35a40be1047f | 124 | if(pos == 2) |
jclondonol | 3:35a40be1047f | 125 | { |
jclondonol | 3:35a40be1047f | 126 | Lugar = 3; |
jclondonol | 3:35a40be1047f | 127 | } |
jclondonol | 3:35a40be1047f | 128 | if(pos == 3) |
jclondonol | 3:35a40be1047f | 129 | { |
jclondonol | 3:35a40be1047f | 130 | Lugar = 4; |
jclondonol | 3:35a40be1047f | 131 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 132 | tm.min = 0; |
jclondonol | 3:35a40be1047f | 133 | tm.sec = 0; |
jclondonol | 3:35a40be1047f | 134 | tm.hour = 1; |
jclondonol | 3:35a40be1047f | 135 | tm.mon = 1; |
jclondonol | 3:35a40be1047f | 136 | tm.date = 1; |
jclondonol | 3:35a40be1047f | 137 | tm.year = 2018; |
jclondonol | 3:35a40be1047f | 138 | rtc.setTime(tm, false, false); |
jclondonol | 3:35a40be1047f | 139 | |
jclondonol | 3:35a40be1047f | 140 | rtc.startClock(); |
jclondonol | 3:35a40be1047f | 141 | lcd.locate(0,1); |
jclondonol | 3:35a40be1047f | 142 | lcd.printf("Time: "); |
jclondonol | 3:35a40be1047f | 143 | } |
jclondonol | 2:bef1b1c9e387 | 144 | } |
jclondonol | 2:bef1b1c9e387 | 145 | |
Jepalacioh | 0:c2ed510ee88d | 146 | break; |
Jepalacioh | 0:c2ed510ee88d | 147 | |
jclondonol | 3:35a40be1047f | 148 | case 1: // Configurar Constantes |
Jepalacioh | 0:c2ed510ee88d | 149 | switch(i) |
jclondonol | 3:35a40be1047f | 150 | { |
jclondonol | 3:35a40be1047f | 151 | case 0: // Establecer Kp |
jclondonol | 2:bef1b1c9e387 | 152 | m = wheel.getPulses(); |
jclondonol | 2:bef1b1c9e387 | 153 | if (m != 0) |
Jepalacioh | 0:c2ed510ee88d | 154 | { |
jclondonol | 3:35a40be1047f | 155 | Kp = Kp + m; |
jclondonol | 3:35a40be1047f | 156 | if(Kp > 99) |
Jepalacioh | 0:c2ed510ee88d | 157 | { |
jclondonol | 3:35a40be1047f | 158 | Kp = 0; |
Jepalacioh | 0:c2ed510ee88d | 159 | } |
jclondonol | 3:35a40be1047f | 160 | if(Kp < 0) |
Jepalacioh | 0:c2ed510ee88d | 161 | { |
jclondonol | 3:35a40be1047f | 162 | Kp = 99; |
Jepalacioh | 0:c2ed510ee88d | 163 | } |
Jepalacioh | 0:c2ed510ee88d | 164 | wheel.reset(); |
jclondonol | 2:bef1b1c9e387 | 165 | m = 0; |
Jepalacioh | 0:c2ed510ee88d | 166 | } |
jclondonol | 3:35a40be1047f | 167 | lcd.locate(4,0); |
jclondonol | 3:35a40be1047f | 168 | lcd.printf("%03d",Kp); |
Jepalacioh | 0:c2ed510ee88d | 169 | |
Jepalacioh | 0:c2ed510ee88d | 170 | if (button_enco.falling()) |
Jepalacioh | 0:c2ed510ee88d | 171 | { |
Jepalacioh | 0:c2ed510ee88d | 172 | i++; |
Jepalacioh | 0:c2ed510ee88d | 173 | lcd.cls(); |
Jepalacioh | 0:c2ed510ee88d | 174 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 175 | lcd.printf("Ki: "); |
Jepalacioh | 0:c2ed510ee88d | 176 | } |
Jepalacioh | 0:c2ed510ee88d | 177 | break; |
Jepalacioh | 0:c2ed510ee88d | 178 | |
jclondonol | 3:35a40be1047f | 179 | case 1: // Establecer Ki |
jclondonol | 2:bef1b1c9e387 | 180 | m = wheel.getPulses(); |
jclondonol | 2:bef1b1c9e387 | 181 | if (m != 0) |
Jepalacioh | 0:c2ed510ee88d | 182 | { |
jclondonol | 3:35a40be1047f | 183 | Ki = Ki + m; |
jclondonol | 3:35a40be1047f | 184 | if(Ki > 99) |
Jepalacioh | 0:c2ed510ee88d | 185 | { |
jclondonol | 3:35a40be1047f | 186 | Ki = 0; |
Jepalacioh | 0:c2ed510ee88d | 187 | } |
jclondonol | 3:35a40be1047f | 188 | if(Ki < 0) |
Jepalacioh | 0:c2ed510ee88d | 189 | { |
jclondonol | 3:35a40be1047f | 190 | Ki = 99; |
Jepalacioh | 0:c2ed510ee88d | 191 | } |
Jepalacioh | 0:c2ed510ee88d | 192 | wheel.reset(); |
jclondonol | 2:bef1b1c9e387 | 193 | m = 0; |
Jepalacioh | 0:c2ed510ee88d | 194 | } |
jclondonol | 3:35a40be1047f | 195 | lcd.locate(4,0); |
jclondonol | 3:35a40be1047f | 196 | lcd.printf("%03d",Ki); |
Jepalacioh | 0:c2ed510ee88d | 197 | |
Jepalacioh | 0:c2ed510ee88d | 198 | if (button_enco.falling()) |
Jepalacioh | 0:c2ed510ee88d | 199 | { |
Jepalacioh | 0:c2ed510ee88d | 200 | i++; |
Jepalacioh | 0:c2ed510ee88d | 201 | lcd.cls(); |
Jepalacioh | 0:c2ed510ee88d | 202 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 203 | lcd.printf("Kd: "); |
Jepalacioh | 0:c2ed510ee88d | 204 | } |
Jepalacioh | 0:c2ed510ee88d | 205 | break; |
Jepalacioh | 0:c2ed510ee88d | 206 | |
jclondonol | 3:35a40be1047f | 207 | case 2: // Establecer Kd |
jclondonol | 2:bef1b1c9e387 | 208 | m = wheel.getPulses(); |
jclondonol | 2:bef1b1c9e387 | 209 | if (m != 0) |
Jepalacioh | 0:c2ed510ee88d | 210 | { |
jclondonol | 3:35a40be1047f | 211 | Kd = Kd + m; |
jclondonol | 3:35a40be1047f | 212 | if(Kd > 99) |
Jepalacioh | 0:c2ed510ee88d | 213 | { |
jclondonol | 3:35a40be1047f | 214 | Kd = 0; |
jclondonol | 3:35a40be1047f | 215 | } |
jclondonol | 3:35a40be1047f | 216 | if(Kd < 0) |
jclondonol | 3:35a40be1047f | 217 | { |
jclondonol | 3:35a40be1047f | 218 | Kd = 99; |
Jepalacioh | 0:c2ed510ee88d | 219 | } |
Jepalacioh | 0:c2ed510ee88d | 220 | wheel.reset(); |
jclondonol | 2:bef1b1c9e387 | 221 | m = 0; |
Jepalacioh | 0:c2ed510ee88d | 222 | } |
jclondonol | 3:35a40be1047f | 223 | lcd.locate(4,0); |
jclondonol | 3:35a40be1047f | 224 | lcd.printf("%03d",Kd); |
Jepalacioh | 0:c2ed510ee88d | 225 | |
Jepalacioh | 0:c2ed510ee88d | 226 | if (button_enco.falling()) |
Jepalacioh | 0:c2ed510ee88d | 227 | { |
Jepalacioh | 0:c2ed510ee88d | 228 | i++; |
Jepalacioh | 0:c2ed510ee88d | 229 | lcd.cls(); |
Jepalacioh | 0:c2ed510ee88d | 230 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 231 | lcd.printf("Sp: "); |
Jepalacioh | 0:c2ed510ee88d | 232 | } |
Jepalacioh | 0:c2ed510ee88d | 233 | break; |
Jepalacioh | 0:c2ed510ee88d | 234 | |
jclondonol | 3:35a40be1047f | 235 | case 3: // Establecer Sp |
jclondonol | 2:bef1b1c9e387 | 236 | m = wheel.getPulses(); |
jclondonol | 2:bef1b1c9e387 | 237 | if (m != 0) |
Jepalacioh | 0:c2ed510ee88d | 238 | { |
jclondonol | 3:35a40be1047f | 239 | Sp = Sp + m*1; |
jclondonol | 3:35a40be1047f | 240 | if(Sp > 100) |
Jepalacioh | 0:c2ed510ee88d | 241 | { |
jclondonol | 3:35a40be1047f | 242 | Sp = 0; |
Jepalacioh | 0:c2ed510ee88d | 243 | } |
jclondonol | 3:35a40be1047f | 244 | if(Sp < 0) |
Jepalacioh | 0:c2ed510ee88d | 245 | { |
jclondonol | 3:35a40be1047f | 246 | Sp = 100; |
Jepalacioh | 0:c2ed510ee88d | 247 | } |
Jepalacioh | 0:c2ed510ee88d | 248 | wheel.reset(); |
jclondonol | 2:bef1b1c9e387 | 249 | m = 0; |
Jepalacioh | 0:c2ed510ee88d | 250 | } |
jclondonol | 3:35a40be1047f | 251 | lcd.locate(4,0); |
jclondonol | 3:35a40be1047f | 252 | lcd.printf("%03d",Sp); |
jclondonol | 3:35a40be1047f | 253 | |
jclondonol | 3:35a40be1047f | 254 | if (button_enco.falling()) |
jclondonol | 3:35a40be1047f | 255 | { |
jclondonol | 3:35a40be1047f | 256 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 257 | lcd.locate(0, 0); |
jclondonol | 3:35a40be1047f | 258 | lcd.printf("Parameters Set"); |
jclondonol | 3:35a40be1047f | 259 | wait(1); |
jclondonol | 3:35a40be1047f | 260 | i = 0; |
jclondonol | 3:35a40be1047f | 261 | Lugar = 0; |
jclondonol | 3:35a40be1047f | 262 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 263 | } |
jclondonol | 3:35a40be1047f | 264 | |
jclondonol | 3:35a40be1047f | 265 | break; |
jclondonol | 3:35a40be1047f | 266 | } |
jclondonol | 3:35a40be1047f | 267 | break; |
jclondonol | 3:35a40be1047f | 268 | |
jclondonol | 3:35a40be1047f | 269 | |
jclondonol | 3:35a40be1047f | 270 | case 2: // Configurar Tiempos |
jclondonol | 3:35a40be1047f | 271 | switch(i) |
jclondonol | 3:35a40be1047f | 272 | { |
jclondonol | 3:35a40be1047f | 273 | case 0: // Establecer T1 |
jclondonol | 3:35a40be1047f | 274 | m = wheel.getPulses(); |
jclondonol | 3:35a40be1047f | 275 | if (m != 0) |
jclondonol | 3:35a40be1047f | 276 | { |
jclondonol | 3:35a40be1047f | 277 | T1 = T1 + m*0.1; |
jclondonol | 3:35a40be1047f | 278 | if(T1 > 5.0) |
jclondonol | 3:35a40be1047f | 279 | { |
jclondonol | 3:35a40be1047f | 280 | T1 = 0.1; |
jclondonol | 3:35a40be1047f | 281 | } |
jclondonol | 3:35a40be1047f | 282 | if(T1 < 0.1) |
jclondonol | 3:35a40be1047f | 283 | { |
jclondonol | 3:35a40be1047f | 284 | T1 = 5.0; |
jclondonol | 3:35a40be1047f | 285 | } |
jclondonol | 3:35a40be1047f | 286 | wheel.reset(); |
jclondonol | 3:35a40be1047f | 287 | m = 0; |
jclondonol | 3:35a40be1047f | 288 | } |
jclondonol | 3:35a40be1047f | 289 | lcd.locate(4,0); |
jclondonol | 3:35a40be1047f | 290 | lcd.printf("%0.1f (min)",T1); |
Jepalacioh | 0:c2ed510ee88d | 291 | |
Jepalacioh | 0:c2ed510ee88d | 292 | if (button_enco.falling()) |
Jepalacioh | 0:c2ed510ee88d | 293 | { |
Jepalacioh | 0:c2ed510ee88d | 294 | i++; |
Jepalacioh | 0:c2ed510ee88d | 295 | lcd.cls(); |
Jepalacioh | 0:c2ed510ee88d | 296 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 297 | lcd.printf("T2: "); |
jclondonol | 3:35a40be1047f | 298 | T2 = T1 + 0.1; |
Jepalacioh | 0:c2ed510ee88d | 299 | } |
Jepalacioh | 0:c2ed510ee88d | 300 | break; |
Jepalacioh | 0:c2ed510ee88d | 301 | |
jclondonol | 3:35a40be1047f | 302 | case 1: // Establecer T2 |
jclondonol | 2:bef1b1c9e387 | 303 | m = wheel.getPulses(); |
jclondonol | 2:bef1b1c9e387 | 304 | if (m != 0) |
Jepalacioh | 0:c2ed510ee88d | 305 | { |
jclondonol | 3:35a40be1047f | 306 | T2 = T2 + m*0.1; |
jclondonol | 3:35a40be1047f | 307 | if(T2 > 5.0) |
Jepalacioh | 0:c2ed510ee88d | 308 | { |
jclondonol | 3:35a40be1047f | 309 | T2 = T1 + 0.1; |
Jepalacioh | 0:c2ed510ee88d | 310 | } |
jclondonol | 3:35a40be1047f | 311 | if(T2 < (T1 + 0.1)) |
Jepalacioh | 0:c2ed510ee88d | 312 | { |
jclondonol | 3:35a40be1047f | 313 | T2 = 5.0; |
Jepalacioh | 0:c2ed510ee88d | 314 | } |
Jepalacioh | 0:c2ed510ee88d | 315 | wheel.reset(); |
jclondonol | 2:bef1b1c9e387 | 316 | m = 0; |
Jepalacioh | 0:c2ed510ee88d | 317 | } |
jclondonol | 3:35a40be1047f | 318 | lcd.locate(4,0); |
jclondonol | 3:35a40be1047f | 319 | lcd.printf("%0.1f (min)",T2); |
Jepalacioh | 0:c2ed510ee88d | 320 | |
Jepalacioh | 0:c2ed510ee88d | 321 | if (button_enco.falling()) |
Jepalacioh | 0:c2ed510ee88d | 322 | { |
jclondonol | 3:35a40be1047f | 323 | i++; |
jclondonol | 3:35a40be1047f | 324 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 325 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 326 | lcd.printf("T3: "); |
jclondonol | 3:35a40be1047f | 327 | T3 = T2 + 0.1; |
jclondonol | 3:35a40be1047f | 328 | } |
jclondonol | 3:35a40be1047f | 329 | break; |
jclondonol | 3:35a40be1047f | 330 | |
jclondonol | 3:35a40be1047f | 331 | case 2: // Establecer T3 |
jclondonol | 3:35a40be1047f | 332 | m = wheel.getPulses(); |
jclondonol | 3:35a40be1047f | 333 | if (m != 0) |
jclondonol | 3:35a40be1047f | 334 | { |
jclondonol | 3:35a40be1047f | 335 | T3 = T3 + m*0.1; |
jclondonol | 3:35a40be1047f | 336 | if(T3 > 5.0) |
Jepalacioh | 0:c2ed510ee88d | 337 | { |
jclondonol | 3:35a40be1047f | 338 | T3 = T2 + 0.1; |
jclondonol | 3:35a40be1047f | 339 | } |
jclondonol | 3:35a40be1047f | 340 | if(T3 < (T2 + 0.1)) |
jclondonol | 3:35a40be1047f | 341 | { |
jclondonol | 3:35a40be1047f | 342 | T3 = 5.0; |
jclondonol | 3:35a40be1047f | 343 | } |
jclondonol | 3:35a40be1047f | 344 | wheel.reset(); |
jclondonol | 3:35a40be1047f | 345 | m = 0; |
jclondonol | 3:35a40be1047f | 346 | } |
jclondonol | 3:35a40be1047f | 347 | lcd.locate(4,0); |
jclondonol | 3:35a40be1047f | 348 | lcd.printf("%0.1f (min)",T3); |
jclondonol | 3:35a40be1047f | 349 | |
jclondonol | 3:35a40be1047f | 350 | if (button_enco.falling()) |
jclondonol | 3:35a40be1047f | 351 | { |
Jepalacioh | 0:c2ed510ee88d | 352 | lcd.cls(); |
jclondonol | 2:bef1b1c9e387 | 353 | lcd.locate(0, 0); |
jclondonol | 2:bef1b1c9e387 | 354 | lcd.printf("Time Set"); |
Jepalacioh | 0:c2ed510ee88d | 355 | wait(1); |
jclondonol | 2:bef1b1c9e387 | 356 | i = 0; |
jclondonol | 2:bef1b1c9e387 | 357 | Lugar = 0; |
jclondonol | 3:35a40be1047f | 358 | lcd.cls(); |
jclondonol | 2:bef1b1c9e387 | 359 | } |
jclondonol | 2:bef1b1c9e387 | 360 | |
jclondonol | 2:bef1b1c9e387 | 361 | break; |
Jepalacioh | 0:c2ed510ee88d | 362 | } |
Jepalacioh | 0:c2ed510ee88d | 363 | break; |
Jepalacioh | 0:c2ed510ee88d | 364 | |
jclondonol | 3:35a40be1047f | 365 | case 3: // Configurar salida |
jclondonol | 3:35a40be1047f | 366 | |
jclondonol | 2:bef1b1c9e387 | 367 | m = wheel.getPulses(); |
jclondonol | 3:35a40be1047f | 368 | if(flag_pwm == 0) |
jclondonol | 2:bef1b1c9e387 | 369 | { |
jclondonol | 2:bef1b1c9e387 | 370 | if(m != 0) |
Jepalacioh | 0:c2ed510ee88d | 371 | { |
jclondonol | 3:35a40be1047f | 372 | flag_pwm = 1; |
Jepalacioh | 0:c2ed510ee88d | 373 | wheel.reset(); |
jclondonol | 2:bef1b1c9e387 | 374 | m = 0; |
jclondonol | 2:bef1b1c9e387 | 375 | lcd.locate(1,1); |
Jepalacioh | 0:c2ed510ee88d | 376 | lcd.printf("-"); |
jclondonol | 3:35a40be1047f | 377 | lcd.locate(8,1); |
Jepalacioh | 0:c2ed510ee88d | 378 | lcd.printf(">"); |
Jepalacioh | 0:c2ed510ee88d | 379 | } |
Jepalacioh | 0:c2ed510ee88d | 380 | } |
Jepalacioh | 0:c2ed510ee88d | 381 | |
jclondonol | 3:35a40be1047f | 382 | if(flag_pwm == 1) |
Jepalacioh | 0:c2ed510ee88d | 383 | { |
jclondonol | 2:bef1b1c9e387 | 384 | if(m != 0) |
Jepalacioh | 0:c2ed510ee88d | 385 | { |
jclondonol | 3:35a40be1047f | 386 | flag_pwm = 0; |
Jepalacioh | 0:c2ed510ee88d | 387 | wheel.reset(); |
jclondonol | 2:bef1b1c9e387 | 388 | m = 0; |
jclondonol | 2:bef1b1c9e387 | 389 | lcd.locate(1,1); |
Jepalacioh | 0:c2ed510ee88d | 390 | lcd.printf(">"); |
jclondonol | 3:35a40be1047f | 391 | lcd.locate(8,1); |
Jepalacioh | 0:c2ed510ee88d | 392 | lcd.printf("-"); |
Jepalacioh | 0:c2ed510ee88d | 393 | } |
Jepalacioh | 0:c2ed510ee88d | 394 | } |
Jepalacioh | 0:c2ed510ee88d | 395 | |
Jepalacioh | 0:c2ed510ee88d | 396 | if (button_enco.falling()) |
Jepalacioh | 0:c2ed510ee88d | 397 | { |
jclondonol | 3:35a40be1047f | 398 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 399 | lcd.locate(0, 0); |
jclondonol | 3:35a40be1047f | 400 | lcd.printf("Out Set"); |
jclondonol | 3:35a40be1047f | 401 | if(flag_pwm == 1){pwm_analog = 1;} |
jclondonol | 3:35a40be1047f | 402 | else{pwm_analog = 0;} |
jclondonol | 3:35a40be1047f | 403 | |
jclondonol | 3:35a40be1047f | 404 | wait(1); |
jclondonol | 2:bef1b1c9e387 | 405 | Lugar = 0; |
jclondonol | 3:35a40be1047f | 406 | lcd.cls(); |
Jepalacioh | 0:c2ed510ee88d | 407 | } |
jclondonol | 3:35a40be1047f | 408 | |
jclondonol | 2:bef1b1c9e387 | 409 | break; |
jclondonol | 2:bef1b1c9e387 | 410 | |
jclondonol | 3:35a40be1047f | 411 | |
jclondonol | 3:35a40be1047f | 412 | case 4: // CICLO PRINCIPAL CONTROLADOR PID |
jclondonol | 3:35a40be1047f | 413 | lop1: rtc.getTime(tm); |
jclondonol | 3:35a40be1047f | 414 | lcd.locate(0,0); |
jclondonol | 3:35a40be1047f | 415 | lcd.printf("%Y : %0.0f ", med); |
jclondonol | 3:35a40be1047f | 416 | lcd.locate(6,1); |
jclondonol | 3:35a40be1047f | 417 | lcd.printf("%02d:",tm.min); |
jclondonol | 3:35a40be1047f | 418 | lcd.printf("%02d",tm.sec); |
jclondonol | 3:35a40be1047f | 419 | |
jclondonol | 3:35a40be1047f | 420 | tiempo = tm.sec + tm.min*60; |
jclondonol | 3:35a40be1047f | 421 | sec = tm.sec; |
jclondonol | 3:35a40be1047f | 422 | |
jclondonol | 3:35a40be1047f | 423 | if(sec != sec_ant) |
jclondonol | 2:bef1b1c9e387 | 424 | { |
jclondonol | 3:35a40be1047f | 425 | sec_ant = sec; |
jclondonol | 3:35a40be1047f | 426 | if(tiempo <= (T1*60)) |
jclondonol | 2:bef1b1c9e387 | 427 | { |
jclondonol | 3:35a40be1047f | 428 | sp_temp = sp_temp + Sp/(T1*60); |
jclondonol | 2:bef1b1c9e387 | 429 | } |
jclondonol | 3:35a40be1047f | 430 | |
jclondonol | 3:35a40be1047f | 431 | if( (tiempo > (T2*60)) && (tiempo < (T3*60)) ) |
jclondonol | 2:bef1b1c9e387 | 432 | { |
jclondonol | 3:35a40be1047f | 433 | sp_temp = sp_temp + ((10)-Sp)/((T3*60)-(T2*60)); |
jclondonol | 2:bef1b1c9e387 | 434 | } |
jclondonol | 3:35a40be1047f | 435 | //if(tiempo > (T3*60)) |
jclondonol | 3:35a40be1047f | 436 | //{ |
jclondonol | 3:35a40be1047f | 437 | //sp_temp = 0; |
jclondonol | 3:35a40be1047f | 438 | //} |
jclondonol | 3:35a40be1047f | 439 | } |
jclondonol | 3:35a40be1047f | 440 | med = Y.read()*100.0; |
jclondonol | 3:35a40be1047f | 441 | err = (sp_temp-med); //se calcula el error |
jclondonol | 3:35a40be1047f | 442 | ap = Kp*10*err*0.01f; //se calcula la accion proporcinal |
jclondonol | 3:35a40be1047f | 443 | ai =(Ki*10*err*0.01f)+ai; //calculo de la integral del error |
jclondonol | 3:35a40be1047f | 444 | ad = Kd*10*(err-err_v)*0.01f; //calculo de la accion derivativa |
jclondonol | 3:35a40be1047f | 445 | pid = (ap+ai+ad); |
jclondonol | 3:35a40be1047f | 446 | // se verifica que pid sea positivo ************************************** |
jclondonol | 3:35a40be1047f | 447 | if(pid<0) |
jclondonol | 3:35a40be1047f | 448 | { |
jclondonol | 3:35a40be1047f | 449 | pid = 0; |
jclondonol | 2:bef1b1c9e387 | 450 | } |
jclondonol | 3:35a40be1047f | 451 | |
jclondonol | 3:35a40be1047f | 452 | // se verifica que pid sea menor o igual la valor maximo ***************** |
jclondonol | 3:35a40be1047f | 453 | if (pid > 100) |
jclondonol | 3:35a40be1047f | 454 | { |
jclondonol | 3:35a40be1047f | 455 | pid = 100; |
jclondonol | 3:35a40be1047f | 456 | } |
jclondonol | 3:35a40be1047f | 457 | |
jclondonol | 3:35a40be1047f | 458 | //Normalizacion de la salida |
jclondonol | 3:35a40be1047f | 459 | // se actualizan las variables ******************************************* |
jclondonol | 3:35a40be1047f | 460 | err_v = err; |
jclondonol | 3:35a40be1047f | 461 | U_analog = pid/100; |
jclondonol | 3:35a40be1047f | 462 | U_pwm.pulsewidth(U_analog*periodo); |
jclondonol | 3:35a40be1047f | 463 | // se envia el valor pid a puerto analogico de salida (D/A) ************** |
jclondonol | 3:35a40be1047f | 464 | // se repite el ciclo |
jclondonol | 3:35a40be1047f | 465 | if (button_enco.falling()) |
jclondonol | 3:35a40be1047f | 466 | { |
jclondonol | 3:35a40be1047f | 467 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 468 | lcd.locate(0, 0); |
jclondonol | 3:35a40be1047f | 469 | lcd.printf("PID Stop"); |
jclondonol | 3:35a40be1047f | 470 | wait(1); |
jclondonol | 3:35a40be1047f | 471 | Lugar = 0; |
jclondonol | 3:35a40be1047f | 472 | lcd.cls(); |
jclondonol | 3:35a40be1047f | 473 | U_analog = 0.0; |
jclondonol | 3:35a40be1047f | 474 | U_pwm.pulsewidth(0); |
jclondonol | 3:35a40be1047f | 475 | sec = 0; |
jclondonol | 3:35a40be1047f | 476 | sec_ant = 0; |
jclondonol | 3:35a40be1047f | 477 | } |
jclondonol | 3:35a40be1047f | 478 | else |
jclondonol | 3:35a40be1047f | 479 | { |
jclondonol | 3:35a40be1047f | 480 | wait_ms(300); |
jclondonol | 3:35a40be1047f | 481 | goto lop1; |
jclondonol | 3:35a40be1047f | 482 | } |
jclondonol | 3:35a40be1047f | 483 | |
jclondonol | 3:35a40be1047f | 484 | |
jclondonol | 3:35a40be1047f | 485 | break; |
Jepalacioh | 0:c2ed510ee88d | 486 | |
Jepalacioh | 0:c2ed510ee88d | 487 | } |
Jepalacioh | 0:c2ed510ee88d | 488 | } |
jclondonol | 3:35a40be1047f | 489 | } |