Horno de Reflujo
Dependencies: Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed
main.cpp@0:7b257afa105f, 2018-06-05 (annotated)
- Committer:
- EstebanLage
- Date:
- Tue Jun 05 17:37:09 2018 +0000
- Revision:
- 0:7b257afa105f
Tarea 4 Horno de Reflujo Ok
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
EstebanLage | 0:7b257afa105f | 1 | #include "mbed.h" |
EstebanLage | 0:7b257afa105f | 2 | #include "DebouncedIn.h" |
EstebanLage | 0:7b257afa105f | 3 | #include "TextLCD.h" |
EstebanLage | 0:7b257afa105f | 4 | #include "QEI.h" |
EstebanLage | 0:7b257afa105f | 5 | #include "Rtc_Ds1307.h" |
EstebanLage | 0:7b257afa105f | 6 | |
EstebanLage | 0:7b257afa105f | 7 | |
EstebanLage | 0:7b257afa105f | 8 | TextLCD lcd(PTB0, PTB1, PTB2, PTB3, PTC2, PTC1); // rs, e, d4, d5, d6, d7 |
EstebanLage | 0:7b257afa105f | 9 | Rtc_Ds1307 rtc(PTE0, PTE1); |
EstebanLage | 0:7b257afa105f | 10 | QEI wheel (PTD7, PTD6, NC, 30); |
EstebanLage | 0:7b257afa105f | 11 | DebouncedIn button_enco(PTC5); |
EstebanLage | 0:7b257afa105f | 12 | PwmOut PIDWM(PTC9); |
EstebanLage | 0:7b257afa105f | 13 | PwmOut PIDANAL(PTE24); |
EstebanLage | 0:7b257afa105f | 14 | DigitalOut Sel(PTE31); |
EstebanLage | 0:7b257afa105f | 15 | AnalogIn y(PTE16); |
EstebanLage | 0:7b257afa105f | 16 | float periodo; |
EstebanLage | 0:7b257afa105f | 17 | float Frecuencia=200; |
EstebanLage | 0:7b257afa105f | 18 | int C1=0x0C; |
EstebanLage | 0:7b257afa105f | 19 | int m; |
EstebanLage | 0:7b257afa105f | 20 | int Conf=0; // |
EstebanLage | 0:7b257afa105f | 21 | int Lugar=0; // Definen el punto en el cual va el programa |
EstebanLage | 0:7b257afa105f | 22 | int i=0; |
EstebanLage | 0:7b257afa105f | 23 | int Ref = 0, Kp = 0, Ti = 0, Td = 0; |
EstebanLage | 0:7b257afa105f | 24 | float t1 = 0, t2 = 0, t3 = 0, ai = 0, ap = 0, ad = 0, pid = 0, med = 0, RefPID = 0,Taza = 0, o = 0; |
EstebanLage | 0:7b257afa105f | 25 | float err = 0, err_v = 0; |
EstebanLage | 0:7b257afa105f | 26 | |
EstebanLage | 0:7b257afa105f | 27 | int main() |
EstebanLage | 0:7b257afa105f | 28 | { |
EstebanLage | 0:7b257afa105f | 29 | Rtc_Ds1307::Time_rtc tm = {}; |
EstebanLage | 0:7b257afa105f | 30 | lcd.cls(); |
EstebanLage | 0:7b257afa105f | 31 | lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD |
EstebanLage | 0:7b257afa105f | 32 | lcd.locate(0,0); |
EstebanLage | 0:7b257afa105f | 33 | lcd.printf("--ANALOG --PWM"); |
EstebanLage | 0:7b257afa105f | 34 | |
EstebanLage | 0:7b257afa105f | 35 | periodo=(1/Frecuencia); |
EstebanLage | 0:7b257afa105f | 36 | rtc.getTime(tm); //lee el tiempo del DS1307 |
EstebanLage | 0:7b257afa105f | 37 | Sel = 1; |
EstebanLage | 0:7b257afa105f | 38 | while(1) |
EstebanLage | 0:7b257afa105f | 39 | { |
EstebanLage | 0:7b257afa105f | 40 | switch (Lugar) |
EstebanLage | 0:7b257afa105f | 41 | { |
EstebanLage | 0:7b257afa105f | 42 | case 0: |
EstebanLage | 0:7b257afa105f | 43 | m=wheel.getPulses(); // m son los datos del encoder |
EstebanLage | 0:7b257afa105f | 44 | if(m!=0 && Conf==0){ |
EstebanLage | 0:7b257afa105f | 45 | Conf=1; |
EstebanLage | 0:7b257afa105f | 46 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 47 | m=0; |
EstebanLage | 0:7b257afa105f | 48 | } |
EstebanLage | 0:7b257afa105f | 49 | |
EstebanLage | 0:7b257afa105f | 50 | if(m!=0 && Conf==1){ |
EstebanLage | 0:7b257afa105f | 51 | Conf=0; |
EstebanLage | 0:7b257afa105f | 52 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 53 | m=0; |
EstebanLage | 0:7b257afa105f | 54 | } |
EstebanLage | 0:7b257afa105f | 55 | if(Conf==0){ |
EstebanLage | 0:7b257afa105f | 56 | |
EstebanLage | 0:7b257afa105f | 57 | lcd.locate(11,0); |
EstebanLage | 0:7b257afa105f | 58 | lcd.printf("-"); |
EstebanLage | 0:7b257afa105f | 59 | lcd.locate(1,0); |
EstebanLage | 0:7b257afa105f | 60 | lcd.printf(">"); |
EstebanLage | 0:7b257afa105f | 61 | lcd.locate(0,1); |
EstebanLage | 0:7b257afa105f | 62 | wait(0.1); |
EstebanLage | 0:7b257afa105f | 63 | |
EstebanLage | 0:7b257afa105f | 64 | } |
EstebanLage | 0:7b257afa105f | 65 | |
EstebanLage | 0:7b257afa105f | 66 | if(Conf==1){ |
EstebanLage | 0:7b257afa105f | 67 | |
EstebanLage | 0:7b257afa105f | 68 | lcd.locate(1,0); |
EstebanLage | 0:7b257afa105f | 69 | lcd.printf("-"); |
EstebanLage | 0:7b257afa105f | 70 | lcd.locate(11,0); |
EstebanLage | 0:7b257afa105f | 71 | lcd.printf(">"); |
EstebanLage | 0:7b257afa105f | 72 | lcd.locate(0,1); |
EstebanLage | 0:7b257afa105f | 73 | wait(0.1); |
EstebanLage | 0:7b257afa105f | 74 | } |
EstebanLage | 0:7b257afa105f | 75 | |
EstebanLage | 0:7b257afa105f | 76 | if (button_enco.falling()){ //si se pulsa boton encoder |
EstebanLage | 0:7b257afa105f | 77 | Lugar++; |
EstebanLage | 0:7b257afa105f | 78 | m=0; |
EstebanLage | 0:7b257afa105f | 79 | } |
EstebanLage | 0:7b257afa105f | 80 | |
EstebanLage | 0:7b257afa105f | 81 | break; |
EstebanLage | 0:7b257afa105f | 82 | |
EstebanLage | 0:7b257afa105f | 83 | case 1: |
EstebanLage | 0:7b257afa105f | 84 | switch(i) |
EstebanLage | 0:7b257afa105f | 85 | { |
EstebanLage | 0:7b257afa105f | 86 | case 0: |
EstebanLage | 0:7b257afa105f | 87 | |
EstebanLage | 0:7b257afa105f | 88 | |
EstebanLage | 0:7b257afa105f | 89 | if(Conf==0) |
EstebanLage | 0:7b257afa105f | 90 | { |
EstebanLage | 0:7b257afa105f | 91 | lcd.cls(); |
EstebanLage | 0:7b257afa105f | 92 | lcd.locate(0,0); |
EstebanLage | 0:7b257afa105f | 93 | lcd.printf("Parametros"); |
EstebanLage | 0:7b257afa105f | 94 | wait(1); |
EstebanLage | 0:7b257afa105f | 95 | i++; |
EstebanLage | 0:7b257afa105f | 96 | m=0; |
EstebanLage | 0:7b257afa105f | 97 | lcd.cls(); |
EstebanLage | 0:7b257afa105f | 98 | lcd.locate(0,0); |
EstebanLage | 0:7b257afa105f | 99 | lcd.printf("Ref: Kp: "); |
EstebanLage | 0:7b257afa105f | 100 | lcd.locate(0,1); |
EstebanLage | 0:7b257afa105f | 101 | lcd.printf("Ti: Td: "); |
EstebanLage | 0:7b257afa105f | 102 | } |
EstebanLage | 0:7b257afa105f | 103 | |
EstebanLage | 0:7b257afa105f | 104 | if(Conf==1) |
EstebanLage | 0:7b257afa105f | 105 | { |
EstebanLage | 0:7b257afa105f | 106 | lcd.cls(); |
EstebanLage | 0:7b257afa105f | 107 | lcd.locate(0,0); |
EstebanLage | 0:7b257afa105f | 108 | lcd.printf("Parametros"); |
EstebanLage | 0:7b257afa105f | 109 | wait(1); |
EstebanLage | 0:7b257afa105f | 110 | i++; |
EstebanLage | 0:7b257afa105f | 111 | m=0; |
EstebanLage | 0:7b257afa105f | 112 | lcd.cls(); |
EstebanLage | 0:7b257afa105f | 113 | lcd.locate(0,0); |
EstebanLage | 0:7b257afa105f | 114 | lcd.printf("Ref: Kp: "); |
EstebanLage | 0:7b257afa105f | 115 | lcd.locate(0,1); |
EstebanLage | 0:7b257afa105f | 116 | lcd.printf("Ti: Td: "); |
EstebanLage | 0:7b257afa105f | 117 | } |
EstebanLage | 0:7b257afa105f | 118 | |
EstebanLage | 0:7b257afa105f | 119 | break; |
EstebanLage | 0:7b257afa105f | 120 | |
EstebanLage | 0:7b257afa105f | 121 | case 1: |
EstebanLage | 0:7b257afa105f | 122 | m=wheel.getPulses(); |
EstebanLage | 0:7b257afa105f | 123 | if (m!=0) |
EstebanLage | 0:7b257afa105f | 124 | { |
EstebanLage | 0:7b257afa105f | 125 | Ref=Ref+m; |
EstebanLage | 0:7b257afa105f | 126 | if(Ref>99) |
EstebanLage | 0:7b257afa105f | 127 | { |
EstebanLage | 0:7b257afa105f | 128 | Ref=99; // Configuracion de la ref para analg |
EstebanLage | 0:7b257afa105f | 129 | } |
EstebanLage | 0:7b257afa105f | 130 | if(Ref<0) |
EstebanLage | 0:7b257afa105f | 131 | { |
EstebanLage | 0:7b257afa105f | 132 | Ref=0; |
EstebanLage | 0:7b257afa105f | 133 | } |
EstebanLage | 0:7b257afa105f | 134 | |
EstebanLage | 0:7b257afa105f | 135 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 136 | m=0; |
EstebanLage | 0:7b257afa105f | 137 | } |
EstebanLage | 0:7b257afa105f | 138 | lcd.locate(5,0); |
EstebanLage | 0:7b257afa105f | 139 | lcd.printf("%02d",Ref); |
EstebanLage | 0:7b257afa105f | 140 | |
EstebanLage | 0:7b257afa105f | 141 | if (button_enco.falling()) |
EstebanLage | 0:7b257afa105f | 142 | { |
EstebanLage | 0:7b257afa105f | 143 | i++; |
EstebanLage | 0:7b257afa105f | 144 | m=0; |
EstebanLage | 0:7b257afa105f | 145 | lcd.locate(13,0); |
EstebanLage | 0:7b257afa105f | 146 | //tm.mon=1; |
EstebanLage | 0:7b257afa105f | 147 | } |
EstebanLage | 0:7b257afa105f | 148 | |
EstebanLage | 0:7b257afa105f | 149 | break; |
EstebanLage | 0:7b257afa105f | 150 | |
EstebanLage | 0:7b257afa105f | 151 | case 2: |
EstebanLage | 0:7b257afa105f | 152 | m=wheel.getPulses(); |
EstebanLage | 0:7b257afa105f | 153 | if (m!=0) |
EstebanLage | 0:7b257afa105f | 154 | { |
EstebanLage | 0:7b257afa105f | 155 | Kp=Kp+m; |
EstebanLage | 0:7b257afa105f | 156 | if(Kp>99) |
EstebanLage | 0:7b257afa105f | 157 | { |
EstebanLage | 0:7b257afa105f | 158 | Kp=99; |
EstebanLage | 0:7b257afa105f | 159 | } |
EstebanLage | 0:7b257afa105f | 160 | if(Kp<0) // Configuracion de Kp para analg |
EstebanLage | 0:7b257afa105f | 161 | { |
EstebanLage | 0:7b257afa105f | 162 | Kp=0; |
EstebanLage | 0:7b257afa105f | 163 | } |
EstebanLage | 0:7b257afa105f | 164 | |
EstebanLage | 0:7b257afa105f | 165 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 166 | m=0; |
EstebanLage | 0:7b257afa105f | 167 | } |
EstebanLage | 0:7b257afa105f | 168 | lcd.locate(13,0); |
EstebanLage | 0:7b257afa105f | 169 | lcd.printf("%02d",Kp); |
EstebanLage | 0:7b257afa105f | 170 | |
EstebanLage | 0:7b257afa105f | 171 | if (button_enco.falling()) |
EstebanLage | 0:7b257afa105f | 172 | { |
EstebanLage | 0:7b257afa105f | 173 | i++; |
EstebanLage | 0:7b257afa105f | 174 | m=0; |
EstebanLage | 0:7b257afa105f | 175 | lcd.locate(4,1); |
EstebanLage | 0:7b257afa105f | 176 | } |
EstebanLage | 0:7b257afa105f | 177 | |
EstebanLage | 0:7b257afa105f | 178 | break; |
EstebanLage | 0:7b257afa105f | 179 | |
EstebanLage | 0:7b257afa105f | 180 | case 3: |
EstebanLage | 0:7b257afa105f | 181 | m=wheel.getPulses(); |
EstebanLage | 0:7b257afa105f | 182 | if (m!=0) |
EstebanLage | 0:7b257afa105f | 183 | { |
EstebanLage | 0:7b257afa105f | 184 | Ti=Ti+m; // Configuracion de Ti para analg |
EstebanLage | 0:7b257afa105f | 185 | |
EstebanLage | 0:7b257afa105f | 186 | if(Ti>99) |
EstebanLage | 0:7b257afa105f | 187 | { |
EstebanLage | 0:7b257afa105f | 188 | Ti=99; |
EstebanLage | 0:7b257afa105f | 189 | } |
EstebanLage | 0:7b257afa105f | 190 | if(Ti<0) |
EstebanLage | 0:7b257afa105f | 191 | { |
EstebanLage | 0:7b257afa105f | 192 | Ti=0; |
EstebanLage | 0:7b257afa105f | 193 | } |
EstebanLage | 0:7b257afa105f | 194 | |
EstebanLage | 0:7b257afa105f | 195 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 196 | m=0; |
EstebanLage | 0:7b257afa105f | 197 | } |
EstebanLage | 0:7b257afa105f | 198 | lcd.locate(4,1); |
EstebanLage | 0:7b257afa105f | 199 | lcd.printf("%02d",Ti); |
EstebanLage | 0:7b257afa105f | 200 | |
EstebanLage | 0:7b257afa105f | 201 | if (button_enco.falling()) |
EstebanLage | 0:7b257afa105f | 202 | { |
EstebanLage | 0:7b257afa105f | 203 | i++; |
EstebanLage | 0:7b257afa105f | 204 | m=0; |
EstebanLage | 0:7b257afa105f | 205 | lcd.locate(13,1); |
EstebanLage | 0:7b257afa105f | 206 | |
EstebanLage | 0:7b257afa105f | 207 | } |
EstebanLage | 0:7b257afa105f | 208 | |
EstebanLage | 0:7b257afa105f | 209 | break; |
EstebanLage | 0:7b257afa105f | 210 | |
EstebanLage | 0:7b257afa105f | 211 | case 4: |
EstebanLage | 0:7b257afa105f | 212 | m=wheel.getPulses(); |
EstebanLage | 0:7b257afa105f | 213 | |
EstebanLage | 0:7b257afa105f | 214 | if (m!=0) |
EstebanLage | 0:7b257afa105f | 215 | { |
EstebanLage | 0:7b257afa105f | 216 | Td=Td+m; // Configuracion de Ti para analg |
EstebanLage | 0:7b257afa105f | 217 | |
EstebanLage | 0:7b257afa105f | 218 | if(Td>99) |
EstebanLage | 0:7b257afa105f | 219 | { |
EstebanLage | 0:7b257afa105f | 220 | Td=99; |
EstebanLage | 0:7b257afa105f | 221 | } |
EstebanLage | 0:7b257afa105f | 222 | if(Td<0) // Configuracion de Td para analg |
EstebanLage | 0:7b257afa105f | 223 | { |
EstebanLage | 0:7b257afa105f | 224 | Td=0; |
EstebanLage | 0:7b257afa105f | 225 | } |
EstebanLage | 0:7b257afa105f | 226 | |
EstebanLage | 0:7b257afa105f | 227 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 228 | m=0; |
EstebanLage | 0:7b257afa105f | 229 | } |
EstebanLage | 0:7b257afa105f | 230 | lcd.locate(13,1); |
EstebanLage | 0:7b257afa105f | 231 | lcd.printf("%02d",Td); |
EstebanLage | 0:7b257afa105f | 232 | |
EstebanLage | 0:7b257afa105f | 233 | if (button_enco.falling()) |
EstebanLage | 0:7b257afa105f | 234 | { |
EstebanLage | 0:7b257afa105f | 235 | i++; |
EstebanLage | 0:7b257afa105f | 236 | m=0; |
EstebanLage | 0:7b257afa105f | 237 | lcd.cls(); |
EstebanLage | 0:7b257afa105f | 238 | lcd.locate(0,0); |
EstebanLage | 0:7b257afa105f | 239 | lcd.printf("t1: t2: "); |
EstebanLage | 0:7b257afa105f | 240 | lcd.locate(0,1); |
EstebanLage | 0:7b257afa105f | 241 | lcd.printf("t3: "); |
EstebanLage | 0:7b257afa105f | 242 | lcd.locate(4,0); |
EstebanLage | 0:7b257afa105f | 243 | } |
EstebanLage | 0:7b257afa105f | 244 | break; |
EstebanLage | 0:7b257afa105f | 245 | |
EstebanLage | 0:7b257afa105f | 246 | case 5: |
EstebanLage | 0:7b257afa105f | 247 | m=wheel.getPulses(); |
EstebanLage | 0:7b257afa105f | 248 | if (m!=0) |
EstebanLage | 0:7b257afa105f | 249 | { |
EstebanLage | 0:7b257afa105f | 250 | t1=t1+m; // Configuracion de Ti para analg |
EstebanLage | 0:7b257afa105f | 251 | if(t1>60) |
EstebanLage | 0:7b257afa105f | 252 | { |
EstebanLage | 0:7b257afa105f | 253 | t1=60; |
EstebanLage | 0:7b257afa105f | 254 | } |
EstebanLage | 0:7b257afa105f | 255 | if(t1<0) // Configuracion de Td para analg |
EstebanLage | 0:7b257afa105f | 256 | { |
EstebanLage | 0:7b257afa105f | 257 | t1=0; |
EstebanLage | 0:7b257afa105f | 258 | } |
EstebanLage | 0:7b257afa105f | 259 | |
EstebanLage | 0:7b257afa105f | 260 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 261 | m=0; |
EstebanLage | 0:7b257afa105f | 262 | } |
EstebanLage | 0:7b257afa105f | 263 | lcd.locate(4,0); |
EstebanLage | 0:7b257afa105f | 264 | lcd.printf("%.1f",t1); |
EstebanLage | 0:7b257afa105f | 265 | |
EstebanLage | 0:7b257afa105f | 266 | |
EstebanLage | 0:7b257afa105f | 267 | if (button_enco.falling()) |
EstebanLage | 0:7b257afa105f | 268 | { |
EstebanLage | 0:7b257afa105f | 269 | i++; |
EstebanLage | 0:7b257afa105f | 270 | m=0; |
EstebanLage | 0:7b257afa105f | 271 | lcd.locate(12,0); |
EstebanLage | 0:7b257afa105f | 272 | } |
EstebanLage | 0:7b257afa105f | 273 | |
EstebanLage | 0:7b257afa105f | 274 | break; |
EstebanLage | 0:7b257afa105f | 275 | |
EstebanLage | 0:7b257afa105f | 276 | case 6: |
EstebanLage | 0:7b257afa105f | 277 | m=wheel.getPulses(); |
EstebanLage | 0:7b257afa105f | 278 | |
EstebanLage | 0:7b257afa105f | 279 | if (m!=0) |
EstebanLage | 0:7b257afa105f | 280 | { |
EstebanLage | 0:7b257afa105f | 281 | t2=t2+m; // Configuracion de Ti para anal |
EstebanLage | 0:7b257afa105f | 282 | if(t2>60) |
EstebanLage | 0:7b257afa105f | 283 | { |
EstebanLage | 0:7b257afa105f | 284 | t2=60; |
EstebanLage | 0:7b257afa105f | 285 | } |
EstebanLage | 0:7b257afa105f | 286 | if(t2<0) // Configuracion de Td para analg |
EstebanLage | 0:7b257afa105f | 287 | { |
EstebanLage | 0:7b257afa105f | 288 | t2=0; |
EstebanLage | 0:7b257afa105f | 289 | } |
EstebanLage | 0:7b257afa105f | 290 | |
EstebanLage | 0:7b257afa105f | 291 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 292 | m=0; |
EstebanLage | 0:7b257afa105f | 293 | } |
EstebanLage | 0:7b257afa105f | 294 | lcd.locate(12,0); |
EstebanLage | 0:7b257afa105f | 295 | lcd.printf("%.1f",t2); |
EstebanLage | 0:7b257afa105f | 296 | |
EstebanLage | 0:7b257afa105f | 297 | |
EstebanLage | 0:7b257afa105f | 298 | if (button_enco.falling()) |
EstebanLage | 0:7b257afa105f | 299 | { |
EstebanLage | 0:7b257afa105f | 300 | i++; |
EstebanLage | 0:7b257afa105f | 301 | m=0; |
EstebanLage | 0:7b257afa105f | 302 | lcd.locate(4,1); |
EstebanLage | 0:7b257afa105f | 303 | } |
EstebanLage | 0:7b257afa105f | 304 | |
EstebanLage | 0:7b257afa105f | 305 | break; |
EstebanLage | 0:7b257afa105f | 306 | |
EstebanLage | 0:7b257afa105f | 307 | case 7: |
EstebanLage | 0:7b257afa105f | 308 | m=wheel.getPulses(); |
EstebanLage | 0:7b257afa105f | 309 | |
EstebanLage | 0:7b257afa105f | 310 | if (m!=0) |
EstebanLage | 0:7b257afa105f | 311 | { |
EstebanLage | 0:7b257afa105f | 312 | t3=t3+m; // Configuracion de Ti para analg |
EstebanLage | 0:7b257afa105f | 313 | if(t3>60) |
EstebanLage | 0:7b257afa105f | 314 | { |
EstebanLage | 0:7b257afa105f | 315 | t3=60; |
EstebanLage | 0:7b257afa105f | 316 | } |
EstebanLage | 0:7b257afa105f | 317 | if(t3<0) // Configuracion de Td para analg |
EstebanLage | 0:7b257afa105f | 318 | { |
EstebanLage | 0:7b257afa105f | 319 | t3=0; |
EstebanLage | 0:7b257afa105f | 320 | } |
EstebanLage | 0:7b257afa105f | 321 | |
EstebanLage | 0:7b257afa105f | 322 | wheel.reset(); |
EstebanLage | 0:7b257afa105f | 323 | m=0; |
EstebanLage | 0:7b257afa105f | 324 | } |
EstebanLage | 0:7b257afa105f | 325 | lcd.locate(4,1); |
EstebanLage | 0:7b257afa105f | 326 | lcd.printf("%.1f",t3); |
EstebanLage | 0:7b257afa105f | 327 | |
EstebanLage | 0:7b257afa105f | 328 | if (button_enco.falling()) |
EstebanLage | 0:7b257afa105f | 329 | { |
EstebanLage | 0:7b257afa105f | 330 | /////////////////// |
EstebanLage | 0:7b257afa105f | 331 | if(Conf==0 || Conf==1) |
EstebanLage | 0:7b257afa105f | 332 | { |
EstebanLage | 0:7b257afa105f | 333 | lcd.cls(); |
EstebanLage | 0:7b257afa105f | 334 | lcd.locate(0,0); |
EstebanLage | 0:7b257afa105f | 335 | lcd.printf(" Parametros OK "); |
EstebanLage | 0:7b257afa105f | 336 | wait(1); |
EstebanLage | 0:7b257afa105f | 337 | i=0; |
EstebanLage | 0:7b257afa105f | 338 | m=0; |
EstebanLage | 0:7b257afa105f | 339 | Lugar++; |
EstebanLage | 0:7b257afa105f | 340 | lcd.cls(); |
EstebanLage | 0:7b257afa105f | 341 | tm.sec = 0; |
EstebanLage | 0:7b257afa105f | 342 | tm.min = 0; |
EstebanLage | 0:7b257afa105f | 343 | tm.hour = 1; |
EstebanLage | 0:7b257afa105f | 344 | tm.date = 1; |
EstebanLage | 0:7b257afa105f | 345 | tm.mon = 1; |
EstebanLage | 0:7b257afa105f | 346 | tm.year = 2000; |
EstebanLage | 0:7b257afa105f | 347 | PIDWM.pulsewidth(0); |
EstebanLage | 0:7b257afa105f | 348 | rtc.setTime(tm,false,false); |
EstebanLage | 0:7b257afa105f | 349 | rtc.startClock(); |
EstebanLage | 0:7b257afa105f | 350 | |
EstebanLage | 0:7b257afa105f | 351 | } |
EstebanLage | 0:7b257afa105f | 352 | /////////////////// |
EstebanLage | 0:7b257afa105f | 353 | } |
EstebanLage | 0:7b257afa105f | 354 | break; |
EstebanLage | 0:7b257afa105f | 355 | } |
EstebanLage | 0:7b257afa105f | 356 | break; |
EstebanLage | 0:7b257afa105f | 357 | case 2: |
EstebanLage | 0:7b257afa105f | 358 | if (Conf == 1 || Conf == 0){ |
EstebanLage | 0:7b257afa105f | 359 | |
EstebanLage | 0:7b257afa105f | 360 | lop1: med = y.read()*100; |
EstebanLage | 0:7b257afa105f | 361 | rtc.getTime(tm); |
EstebanLage | 0:7b257afa105f | 362 | if ((tm.sec)<t1) |
EstebanLage | 0:7b257afa105f | 363 | { |
EstebanLage | 0:7b257afa105f | 364 | Taza = Ref/t1; |
EstebanLage | 0:7b257afa105f | 365 | RefPID = tm.sec*Taza; |
EstebanLage | 0:7b257afa105f | 366 | } |
EstebanLage | 0:7b257afa105f | 367 | if ((tm.sec)>=t1 && (tm.sec)<=(t2+t1)){ |
EstebanLage | 0:7b257afa105f | 368 | RefPID = Ref; |
EstebanLage | 0:7b257afa105f | 369 | } |
EstebanLage | 0:7b257afa105f | 370 | if ((tm.sec)>(t2+t1)){ |
EstebanLage | 0:7b257afa105f | 371 | if (RefPID<23){ |
EstebanLage | 0:7b257afa105f | 372 | RefPID=23; |
EstebanLage | 0:7b257afa105f | 373 | } |
EstebanLage | 0:7b257afa105f | 374 | else if (RefPID>23){ |
EstebanLage | 0:7b257afa105f | 375 | Taza = (23-Ref)/t3/60; |
EstebanLage | 0:7b257afa105f | 376 | RefPID = RefPID + tm.sec*Taza; |
EstebanLage | 0:7b257afa105f | 377 | } |
EstebanLage | 0:7b257afa105f | 378 | } |
EstebanLage | 0:7b257afa105f | 379 | if ((tm.sec)>(t1+t2+t3) && med < 23){ |
EstebanLage | 0:7b257afa105f | 380 | RefPID = 23; |
EstebanLage | 0:7b257afa105f | 381 | } |
EstebanLage | 0:7b257afa105f | 382 | err = (RefPID-med); //se calcula el error |
EstebanLage | 0:7b257afa105f | 383 | ap = Kp*err*0.01f; //se calcula la accion proporcinal |
EstebanLage | 0:7b257afa105f | 384 | ai =(Ti*err*0.01f)+ai; //calculo de la integral del error |
EstebanLage | 0:7b257afa105f | 385 | ad = Td*(err-err_v)*0.01f; //calculo de la accion derivativa |
EstebanLage | 0:7b257afa105f | 386 | pid = (ap+ai+ad); |
EstebanLage | 0:7b257afa105f | 387 | // se verifica que pid sea positivo ************************************** |
EstebanLage | 0:7b257afa105f | 388 | if(pid<=0) |
EstebanLage | 0:7b257afa105f | 389 | { |
EstebanLage | 0:7b257afa105f | 390 | pid=0; |
EstebanLage | 0:7b257afa105f | 391 | } |
EstebanLage | 0:7b257afa105f | 392 | |
EstebanLage | 0:7b257afa105f | 393 | // se verifica que pid sea menor o igual la valor maximo ***************** |
EstebanLage | 0:7b257afa105f | 394 | if (pid > 100) |
EstebanLage | 0:7b257afa105f | 395 | { |
EstebanLage | 0:7b257afa105f | 396 | pid=100; |
EstebanLage | 0:7b257afa105f | 397 | } |
EstebanLage | 0:7b257afa105f | 398 | |
EstebanLage | 0:7b257afa105f | 399 | |
EstebanLage | 0:7b257afa105f | 400 | //se muestran las variables****************************************** |
EstebanLage | 0:7b257afa105f | 401 | lcd.locate(1,0); |
EstebanLage | 0:7b257afa105f | 402 | lcd.printf("err: med:"); |
EstebanLage | 0:7b257afa105f | 403 | lcd.locate(4,0); |
EstebanLage | 0:7b257afa105f | 404 | lcd.printf("%3.0f",err); |
EstebanLage | 0:7b257afa105f | 405 | lcd.locate(13,0); |
EstebanLage | 0:7b257afa105f | 406 | lcd.printf("%3.0f",med); |
EstebanLage | 0:7b257afa105f | 407 | lcd.locate(1,1); |
EstebanLage | 0:7b257afa105f | 408 | lcd.printf("Ref: pid:"); |
EstebanLage | 0:7b257afa105f | 409 | lcd.locate(4,1); |
EstebanLage | 0:7b257afa105f | 410 | lcd.printf("%3.0f",RefPID); |
EstebanLage | 0:7b257afa105f | 411 | lcd.locate(13,1); |
EstebanLage | 0:7b257afa105f | 412 | lcd.printf("%3.0f",pid); |
EstebanLage | 0:7b257afa105f | 413 | |
EstebanLage | 0:7b257afa105f | 414 | |
EstebanLage | 0:7b257afa105f | 415 | |
EstebanLage | 0:7b257afa105f | 416 | |
EstebanLage | 0:7b257afa105f | 417 | //Normalizacion de la salida |
EstebanLage | 0:7b257afa105f | 418 | // se actualizan las variables ******************************************* |
EstebanLage | 0:7b257afa105f | 419 | err_v = err; |
EstebanLage | 0:7b257afa105f | 420 | o = pid/100; |
EstebanLage | 0:7b257afa105f | 421 | PIDWM.pulsewidth(o*periodo); |
EstebanLage | 0:7b257afa105f | 422 | // se envia el valor pid a puerto analogico de salida (D/A) ************** |
EstebanLage | 0:7b257afa105f | 423 | |
EstebanLage | 0:7b257afa105f | 424 | // se repite el ciclo |
EstebanLage | 0:7b257afa105f | 425 | wait_ms(100); |
EstebanLage | 0:7b257afa105f | 426 | goto lop1; |
EstebanLage | 0:7b257afa105f | 427 | } |
EstebanLage | 0:7b257afa105f | 428 | } |
EstebanLage | 0:7b257afa105f | 429 | } |
EstebanLage | 0:7b257afa105f | 430 | } |
EstebanLage | 0:7b257afa105f | 431 |