PID
Dependencies: TextLCD-modificad mbed
main.cpp@0:9d62b34e332d, 2013-11-15 (annotated)
- Committer:
- salondonog
- Date:
- Fri Nov 15 17:43:51 2013 +0000
- Revision:
- 0:9d62b34e332d
Pid
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
salondonog | 0:9d62b34e332d | 1 | #include "mbed.h" |
salondonog | 0:9d62b34e332d | 2 | #include "TextLCD.h" |
salondonog | 0:9d62b34e332d | 3 | #include "DebouncedIn.h" |
salondonog | 0:9d62b34e332d | 4 | |
salondonog | 0:9d62b34e332d | 5 | TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); //configura los puestos PTE0,PTE1,PTE2,PTE3,PTE4,PTE5, donde se conectara el LCD 16x2 |
salondonog | 0:9d62b34e332d | 6 | DigitalIn mas(PTC12); |
salondonog | 0:9d62b34e332d | 7 | DigitalIn menos(PTC13); |
salondonog | 0:9d62b34e332d | 8 | DebouncedIn salto(PTC16); |
salondonog | 0:9d62b34e332d | 9 | DebouncedIn set(PTC17); |
salondonog | 0:9d62b34e332d | 10 | AnalogIn Vin(PTB0); |
salondonog | 0:9d62b34e332d | 11 | AnalogOut Vout(PTE30); |
salondonog | 0:9d62b34e332d | 12 | Timer t; |
salondonog | 0:9d62b34e332d | 13 | int flag; |
salondonog | 0:9d62b34e332d | 14 | int q; |
salondonog | 0:9d62b34e332d | 15 | int C1=0x0E; //configurar el lcd para mostrar el guin bajo |
salondonog | 0:9d62b34e332d | 16 | int C2=0x0C; //configurar el lcd para no mostrar el guion bajo |
salondonog | 0:9d62b34e332d | 17 | int s=0; //set point |
salondonog | 0:9d62b34e332d | 18 | int p=0; //ganancia proporcional |
salondonog | 0:9d62b34e332d | 19 | int i=0; //ganancia integral |
salondonog | 0:9d62b34e332d | 20 | int d=0; //ganancia derivativa |
salondonog | 0:9d62b34e332d | 21 | int k=0; //variable de control} |
salondonog | 0:9d62b34e332d | 22 | int err, med, yr, ap, ai, ad, err_v, cycle; |
salondonog | 0:9d62b34e332d | 23 | int pid; |
salondonog | 0:9d62b34e332d | 24 | |
salondonog | 0:9d62b34e332d | 25 | int conteo_creciente(int incremento){ |
salondonog | 0:9d62b34e332d | 26 | if(incremento==999){ |
salondonog | 0:9d62b34e332d | 27 | return incremento; |
salondonog | 0:9d62b34e332d | 28 | } |
salondonog | 0:9d62b34e332d | 29 | else if(!mas.read()){ |
salondonog | 0:9d62b34e332d | 30 | for(int t=0;t<10;t++){ |
salondonog | 0:9d62b34e332d | 31 | if(mas.read()){ |
salondonog | 0:9d62b34e332d | 32 | break; |
salondonog | 0:9d62b34e332d | 33 | } |
salondonog | 0:9d62b34e332d | 34 | if(incremento>=999){ |
salondonog | 0:9d62b34e332d | 35 | incremento=999; |
salondonog | 0:9d62b34e332d | 36 | if (k==0){ |
salondonog | 0:9d62b34e332d | 37 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 38 | } |
salondonog | 0:9d62b34e332d | 39 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 40 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 41 | } |
salondonog | 0:9d62b34e332d | 42 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 43 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 44 | } |
salondonog | 0:9d62b34e332d | 45 | else { |
salondonog | 0:9d62b34e332d | 46 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 47 | } |
salondonog | 0:9d62b34e332d | 48 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 49 | break; |
salondonog | 0:9d62b34e332d | 50 | } |
salondonog | 0:9d62b34e332d | 51 | incremento++; |
salondonog | 0:9d62b34e332d | 52 | if (k==0){ |
salondonog | 0:9d62b34e332d | 53 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 54 | } |
salondonog | 0:9d62b34e332d | 55 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 56 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 57 | } |
salondonog | 0:9d62b34e332d | 58 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 59 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 60 | } |
salondonog | 0:9d62b34e332d | 61 | else { |
salondonog | 0:9d62b34e332d | 62 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 63 | } |
salondonog | 0:9d62b34e332d | 64 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 65 | wait(0.5); |
salondonog | 0:9d62b34e332d | 66 | } |
salondonog | 0:9d62b34e332d | 67 | |
salondonog | 0:9d62b34e332d | 68 | for(int t=0;t<10;t++){ |
salondonog | 0:9d62b34e332d | 69 | if(mas.read()){ |
salondonog | 0:9d62b34e332d | 70 | break; |
salondonog | 0:9d62b34e332d | 71 | } |
salondonog | 0:9d62b34e332d | 72 | if(incremento>=990){ |
salondonog | 0:9d62b34e332d | 73 | incremento=999; |
salondonog | 0:9d62b34e332d | 74 | if (k==0){ |
salondonog | 0:9d62b34e332d | 75 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 76 | } |
salondonog | 0:9d62b34e332d | 77 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 78 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 79 | } |
salondonog | 0:9d62b34e332d | 80 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 81 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 82 | } |
salondonog | 0:9d62b34e332d | 83 | else { |
salondonog | 0:9d62b34e332d | 84 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 85 | } |
salondonog | 0:9d62b34e332d | 86 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 87 | break; |
salondonog | 0:9d62b34e332d | 88 | } |
salondonog | 0:9d62b34e332d | 89 | incremento+=10; |
salondonog | 0:9d62b34e332d | 90 | if (k==0){ |
salondonog | 0:9d62b34e332d | 91 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 92 | } |
salondonog | 0:9d62b34e332d | 93 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 94 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 95 | } |
salondonog | 0:9d62b34e332d | 96 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 97 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 98 | } |
salondonog | 0:9d62b34e332d | 99 | else { |
salondonog | 0:9d62b34e332d | 100 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 101 | } |
salondonog | 0:9d62b34e332d | 102 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 103 | wait(0.5); |
salondonog | 0:9d62b34e332d | 104 | } |
salondonog | 0:9d62b34e332d | 105 | for(int t=0;t<10;t++){ |
salondonog | 0:9d62b34e332d | 106 | if(mas.read()){ |
salondonog | 0:9d62b34e332d | 107 | break; |
salondonog | 0:9d62b34e332d | 108 | } |
salondonog | 0:9d62b34e332d | 109 | if(incremento>=900){ |
salondonog | 0:9d62b34e332d | 110 | incremento=999; |
salondonog | 0:9d62b34e332d | 111 | if (k==0){ |
salondonog | 0:9d62b34e332d | 112 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 113 | } |
salondonog | 0:9d62b34e332d | 114 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 115 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 116 | } |
salondonog | 0:9d62b34e332d | 117 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 118 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 119 | } |
salondonog | 0:9d62b34e332d | 120 | else { |
salondonog | 0:9d62b34e332d | 121 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 122 | } |
salondonog | 0:9d62b34e332d | 123 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 124 | break; |
salondonog | 0:9d62b34e332d | 125 | } |
salondonog | 0:9d62b34e332d | 126 | incremento+=100; |
salondonog | 0:9d62b34e332d | 127 | if (k==0){ |
salondonog | 0:9d62b34e332d | 128 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 129 | } |
salondonog | 0:9d62b34e332d | 130 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 131 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 132 | } |
salondonog | 0:9d62b34e332d | 133 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 134 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 135 | } |
salondonog | 0:9d62b34e332d | 136 | else { |
salondonog | 0:9d62b34e332d | 137 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 138 | } |
salondonog | 0:9d62b34e332d | 139 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 140 | wait(0.5); |
salondonog | 0:9d62b34e332d | 141 | } |
salondonog | 0:9d62b34e332d | 142 | } |
salondonog | 0:9d62b34e332d | 143 | return incremento; |
salondonog | 0:9d62b34e332d | 144 | } |
salondonog | 0:9d62b34e332d | 145 | |
salondonog | 0:9d62b34e332d | 146 | |
salondonog | 0:9d62b34e332d | 147 | |
salondonog | 0:9d62b34e332d | 148 | int conteo_decreciente(int incremento){ |
salondonog | 0:9d62b34e332d | 149 | if (incremento==0){ |
salondonog | 0:9d62b34e332d | 150 | return incremento; |
salondonog | 0:9d62b34e332d | 151 | } |
salondonog | 0:9d62b34e332d | 152 | else if(!menos.read()){ |
salondonog | 0:9d62b34e332d | 153 | for(int t=0;t<10;t++){ |
salondonog | 0:9d62b34e332d | 154 | if(menos.read()){ |
salondonog | 0:9d62b34e332d | 155 | break; |
salondonog | 0:9d62b34e332d | 156 | } |
salondonog | 0:9d62b34e332d | 157 | if(incremento<=1){ |
salondonog | 0:9d62b34e332d | 158 | incremento=0; |
salondonog | 0:9d62b34e332d | 159 | if (k==0){ |
salondonog | 0:9d62b34e332d | 160 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 161 | } |
salondonog | 0:9d62b34e332d | 162 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 163 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 164 | } |
salondonog | 0:9d62b34e332d | 165 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 166 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 167 | } |
salondonog | 0:9d62b34e332d | 168 | else { |
salondonog | 0:9d62b34e332d | 169 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 170 | } |
salondonog | 0:9d62b34e332d | 171 | lcd.printf("%d",incremento); |
salondonog | 0:9d62b34e332d | 172 | break; |
salondonog | 0:9d62b34e332d | 173 | } |
salondonog | 0:9d62b34e332d | 174 | --incremento; |
salondonog | 0:9d62b34e332d | 175 | if (k==0){ |
salondonog | 0:9d62b34e332d | 176 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 177 | } |
salondonog | 0:9d62b34e332d | 178 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 179 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 180 | } |
salondonog | 0:9d62b34e332d | 181 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 182 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 183 | } |
salondonog | 0:9d62b34e332d | 184 | else { |
salondonog | 0:9d62b34e332d | 185 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 186 | } |
salondonog | 0:9d62b34e332d | 187 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 188 | wait(0.5); |
salondonog | 0:9d62b34e332d | 189 | } |
salondonog | 0:9d62b34e332d | 190 | |
salondonog | 0:9d62b34e332d | 191 | for(int t=0;t<10;t++){ |
salondonog | 0:9d62b34e332d | 192 | if(menos.read()){ |
salondonog | 0:9d62b34e332d | 193 | break; |
salondonog | 0:9d62b34e332d | 194 | } |
salondonog | 0:9d62b34e332d | 195 | if(incremento<=10){ |
salondonog | 0:9d62b34e332d | 196 | incremento=0; |
salondonog | 0:9d62b34e332d | 197 | if (k==0){ |
salondonog | 0:9d62b34e332d | 198 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 199 | } |
salondonog | 0:9d62b34e332d | 200 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 201 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 202 | } |
salondonog | 0:9d62b34e332d | 203 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 204 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 205 | } |
salondonog | 0:9d62b34e332d | 206 | else { |
salondonog | 0:9d62b34e332d | 207 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 208 | } |
salondonog | 0:9d62b34e332d | 209 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 210 | break; |
salondonog | 0:9d62b34e332d | 211 | } |
salondonog | 0:9d62b34e332d | 212 | incremento-=10; |
salondonog | 0:9d62b34e332d | 213 | if (k==0){ |
salondonog | 0:9d62b34e332d | 214 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 215 | } |
salondonog | 0:9d62b34e332d | 216 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 217 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 218 | } |
salondonog | 0:9d62b34e332d | 219 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 220 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 221 | } |
salondonog | 0:9d62b34e332d | 222 | else { |
salondonog | 0:9d62b34e332d | 223 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 224 | } |
salondonog | 0:9d62b34e332d | 225 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 226 | wait(0.5); |
salondonog | 0:9d62b34e332d | 227 | } |
salondonog | 0:9d62b34e332d | 228 | for(int t=0;t<10;t++){ |
salondonog | 0:9d62b34e332d | 229 | if(menos.read()){ |
salondonog | 0:9d62b34e332d | 230 | break; |
salondonog | 0:9d62b34e332d | 231 | } |
salondonog | 0:9d62b34e332d | 232 | if(incremento<=100){ |
salondonog | 0:9d62b34e332d | 233 | incremento=0; |
salondonog | 0:9d62b34e332d | 234 | if (k==0){ |
salondonog | 0:9d62b34e332d | 235 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 236 | } |
salondonog | 0:9d62b34e332d | 237 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 238 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 239 | } |
salondonog | 0:9d62b34e332d | 240 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 241 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 242 | } |
salondonog | 0:9d62b34e332d | 243 | else { |
salondonog | 0:9d62b34e332d | 244 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 245 | } |
salondonog | 0:9d62b34e332d | 246 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 247 | break; |
salondonog | 0:9d62b34e332d | 248 | } |
salondonog | 0:9d62b34e332d | 249 | incremento-=100; |
salondonog | 0:9d62b34e332d | 250 | if (k==0){ |
salondonog | 0:9d62b34e332d | 251 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 252 | } |
salondonog | 0:9d62b34e332d | 253 | else if(k==1){ |
salondonog | 0:9d62b34e332d | 254 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 255 | } |
salondonog | 0:9d62b34e332d | 256 | else if (k==2){ |
salondonog | 0:9d62b34e332d | 257 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 258 | } |
salondonog | 0:9d62b34e332d | 259 | else { |
salondonog | 0:9d62b34e332d | 260 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 261 | } |
salondonog | 0:9d62b34e332d | 262 | lcd.printf("%d ",incremento); |
salondonog | 0:9d62b34e332d | 263 | wait(0.5); |
salondonog | 0:9d62b34e332d | 264 | } |
salondonog | 0:9d62b34e332d | 265 | } |
salondonog | 0:9d62b34e332d | 266 | return incremento; |
salondonog | 0:9d62b34e332d | 267 | } |
salondonog | 0:9d62b34e332d | 268 | |
salondonog | 0:9d62b34e332d | 269 | |
salondonog | 0:9d62b34e332d | 270 | void def_posicion(int h){ |
salondonog | 0:9d62b34e332d | 271 | if (h==0){ |
salondonog | 0:9d62b34e332d | 272 | lcd.locate(3,0); lcd.printf("%d",s); |
salondonog | 0:9d62b34e332d | 273 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 274 | } |
salondonog | 0:9d62b34e332d | 275 | else if(h==1){ |
salondonog | 0:9d62b34e332d | 276 | lcd.locate(11,0); lcd.printf("%d",p); |
salondonog | 0:9d62b34e332d | 277 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 278 | } |
salondonog | 0:9d62b34e332d | 279 | else if (h==2){ |
salondonog | 0:9d62b34e332d | 280 | lcd.locate(3,1); lcd.printf("%d",i); |
salondonog | 0:9d62b34e332d | 281 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 282 | } |
salondonog | 0:9d62b34e332d | 283 | else { |
salondonog | 0:9d62b34e332d | 284 | lcd.locate(11,1); lcd.printf("%d",d); |
salondonog | 0:9d62b34e332d | 285 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 286 | } |
salondonog | 0:9d62b34e332d | 287 | } |
salondonog | 0:9d62b34e332d | 288 | |
salondonog | 0:9d62b34e332d | 289 | void decremento(int u){ //Funcion que decrementa los valores |
salondonog | 0:9d62b34e332d | 290 | if(u==0){ |
salondonog | 0:9d62b34e332d | 291 | s=conteo_decreciente(s); |
salondonog | 0:9d62b34e332d | 292 | } |
salondonog | 0:9d62b34e332d | 293 | else if(u==1){ |
salondonog | 0:9d62b34e332d | 294 | p=conteo_decreciente(p) ; |
salondonog | 0:9d62b34e332d | 295 | } |
salondonog | 0:9d62b34e332d | 296 | else if(u==2){ |
salondonog | 0:9d62b34e332d | 297 | i=conteo_decreciente(i); |
salondonog | 0:9d62b34e332d | 298 | } |
salondonog | 0:9d62b34e332d | 299 | else{ |
salondonog | 0:9d62b34e332d | 300 | d=conteo_decreciente(d); |
salondonog | 0:9d62b34e332d | 301 | } |
salondonog | 0:9d62b34e332d | 302 | } |
salondonog | 0:9d62b34e332d | 303 | |
salondonog | 0:9d62b34e332d | 304 | void incremento(int h){ //Funcion que incremente los valores |
salondonog | 0:9d62b34e332d | 305 | if(h==0){ |
salondonog | 0:9d62b34e332d | 306 | s=conteo_creciente(s); |
salondonog | 0:9d62b34e332d | 307 | } |
salondonog | 0:9d62b34e332d | 308 | else if(h==1){ |
salondonog | 0:9d62b34e332d | 309 | p=conteo_creciente(p) ; |
salondonog | 0:9d62b34e332d | 310 | } |
salondonog | 0:9d62b34e332d | 311 | else if(h==2){ |
salondonog | 0:9d62b34e332d | 312 | i=conteo_creciente(i); |
salondonog | 0:9d62b34e332d | 313 | } |
salondonog | 0:9d62b34e332d | 314 | else{ |
salondonog | 0:9d62b34e332d | 315 | d=conteo_creciente(d); |
salondonog | 0:9d62b34e332d | 316 | } |
salondonog | 0:9d62b34e332d | 317 | |
salondonog | 0:9d62b34e332d | 318 | } |
salondonog | 0:9d62b34e332d | 319 | |
salondonog | 0:9d62b34e332d | 320 | void star_patch1(void){ //funcion que imprime los caracteres que no van a variar en el display |
salondonog | 0:9d62b34e332d | 321 | lcd.cls(); |
salondonog | 0:9d62b34e332d | 322 | lcd.locate(8,0); |
salondonog | 0:9d62b34e332d | 323 | lcd.printf("Kp=%d",p); |
salondonog | 0:9d62b34e332d | 324 | lcd.locate(0,1); |
salondonog | 0:9d62b34e332d | 325 | lcd.printf("Ki=%d",i); |
salondonog | 0:9d62b34e332d | 326 | lcd.locate(8,1); |
salondonog | 0:9d62b34e332d | 327 | lcd.printf("Kd=%d",d); |
salondonog | 0:9d62b34e332d | 328 | lcd.writeCommand(C1); //permite que el cursor se vea y sea intermitente |
salondonog | 0:9d62b34e332d | 329 | lcd.locate(0,0); |
salondonog | 0:9d62b34e332d | 330 | lcd.printf("Sp=%d",s); |
salondonog | 0:9d62b34e332d | 331 | } |
salondonog | 0:9d62b34e332d | 332 | |
salondonog | 0:9d62b34e332d | 333 | void star_patch2(void){ //funcion que imprime los caracteres que no van a variar en el display |
salondonog | 0:9d62b34e332d | 334 | lcd.writeCommand(C2); |
salondonog | 0:9d62b34e332d | 335 | lcd.cls(); |
salondonog | 0:9d62b34e332d | 336 | lcd.printf("***INICIA PID***/n"); lcd.printf("***************"); |
salondonog | 0:9d62b34e332d | 337 | wait(2); |
salondonog | 0:9d62b34e332d | 338 | lcd.cls(); |
salondonog | 0:9d62b34e332d | 339 | lcd.printf("Er%=d",err); |
salondonog | 0:9d62b34e332d | 340 | lcd.locate(8,0); lcd.printf("Me=%d",med); |
salondonog | 0:9d62b34e332d | 341 | lcd.locate(0,1); lcd.printf("Sp=%d",s); |
salondonog | 0:9d62b34e332d | 342 | lcd.locate(8,1); lcd.printf("Co=%d",pid); |
salondonog | 0:9d62b34e332d | 343 | wait(3); |
salondonog | 0:9d62b34e332d | 344 | } |
salondonog | 0:9d62b34e332d | 345 | |
salondonog | 0:9d62b34e332d | 346 | int main(){ |
salondonog | 0:9d62b34e332d | 347 | star_patch1(); |
salondonog | 0:9d62b34e332d | 348 | while(1){ |
salondonog | 0:9d62b34e332d | 349 | if(k>=3 && salto.falling()){ |
salondonog | 0:9d62b34e332d | 350 | k=0; |
salondonog | 0:9d62b34e332d | 351 | def_posicion(k); |
salondonog | 0:9d62b34e332d | 352 | } |
salondonog | 0:9d62b34e332d | 353 | if(salto.falling()){ |
salondonog | 0:9d62b34e332d | 354 | ++k; |
salondonog | 0:9d62b34e332d | 355 | def_posicion(k); |
salondonog | 0:9d62b34e332d | 356 | } |
salondonog | 0:9d62b34e332d | 357 | else if(!mas.read()){ |
salondonog | 0:9d62b34e332d | 358 | incremento(k); |
salondonog | 0:9d62b34e332d | 359 | } |
salondonog | 0:9d62b34e332d | 360 | else if(!menos.read()){ |
salondonog | 0:9d62b34e332d | 361 | decremento(k); |
salondonog | 0:9d62b34e332d | 362 | } |
salondonog | 0:9d62b34e332d | 363 | else if(set.falling()){ |
salondonog | 0:9d62b34e332d | 364 | break; |
salondonog | 0:9d62b34e332d | 365 | } |
salondonog | 0:9d62b34e332d | 366 | } |
salondonog | 0:9d62b34e332d | 367 | star_patch2(); |
salondonog | 0:9d62b34e332d | 368 | |
salondonog | 0:9d62b34e332d | 369 | while (1){ |
salondonog | 0:9d62b34e332d | 370 | |
salondonog | 0:9d62b34e332d | 371 | med=Vin.read()*1000; |
salondonog | 0:9d62b34e332d | 372 | err = (s-med); |
salondonog | 0:9d62b34e332d | 373 | ap = k*err; |
salondonog | 0:9d62b34e332d | 374 | ai =(i*err)+ai; //calculo de la integral del error |
salondonog | 0:9d62b34e332d | 375 | // se verifica que la accion integral no sea muy grande |
salondonog | 0:9d62b34e332d | 376 | ad = d*(err-err_v); //calculo de la accion derivativa |
salondonog | 0:9d62b34e332d | 377 | pid = (ap+ai+ad); |
salondonog | 0:9d62b34e332d | 378 | //****se muestran las variables****************************************** |
salondonog | 0:9d62b34e332d | 379 | if (pid > 999){ |
salondonog | 0:9d62b34e332d | 380 | pid=1000; |
salondonog | 0:9d62b34e332d | 381 | } |
salondonog | 0:9d62b34e332d | 382 | else if (pid<0){ |
salondonog | 0:9d62b34e332d | 383 | pid=0; |
salondonog | 0:9d62b34e332d | 384 | } |
salondonog | 0:9d62b34e332d | 385 | Vout.write(pid/1000); |
salondonog | 0:9d62b34e332d | 386 | if(flag==0){ |
salondonog | 0:9d62b34e332d | 387 | t.start(); |
salondonog | 0:9d62b34e332d | 388 | flag=1; |
salondonog | 0:9d62b34e332d | 389 | } |
salondonog | 0:9d62b34e332d | 390 | if (t>0.3){ |
salondonog | 0:9d62b34e332d | 391 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 392 | lcd.printf(" "); |
salondonog | 0:9d62b34e332d | 393 | lcd.locate(3,0); |
salondonog | 0:9d62b34e332d | 394 | lcd.printf("%d",err); |
salondonog | 0:9d62b34e332d | 395 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 396 | lcd.printf(" "); |
salondonog | 0:9d62b34e332d | 397 | lcd.locate(11,0); |
salondonog | 0:9d62b34e332d | 398 | lcd.printf("%d",med); |
salondonog | 0:9d62b34e332d | 399 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 400 | lcd.printf(" "); |
salondonog | 0:9d62b34e332d | 401 | lcd.locate(3,1); |
salondonog | 0:9d62b34e332d | 402 | lcd.printf("%d",s); |
salondonog | 0:9d62b34e332d | 403 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 404 | lcd.printf(" "); |
salondonog | 0:9d62b34e332d | 405 | lcd.locate(11,1); |
salondonog | 0:9d62b34e332d | 406 | lcd.printf("%d ",pid); |
salondonog | 0:9d62b34e332d | 407 | t.reset(); |
salondonog | 0:9d62b34e332d | 408 | flag=0; |
salondonog | 0:9d62b34e332d | 409 | wait(.3); |
salondonog | 0:9d62b34e332d | 410 | } |
salondonog | 0:9d62b34e332d | 411 | // se actualizan las variables ******************************************* |
salondonog | 0:9d62b34e332d | 412 | err_v = err; |
salondonog | 0:9d62b34e332d | 413 | } |
salondonog | 0:9d62b34e332d | 414 | } |