PID Sencillo - Primera Prueba

Dependencies:   Debounced TextLCD1 mbed

Committer:
jmcallef
Date:
Thu Nov 14 07:07:48 2013 +0000
Revision:
2:12dac32e2a8b
Parent:
1:ce04971eceb4
3ra entrega a revizar

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmcallef 0:ab047fb2215f 1 #include "mbed.h"
jmcallef 0:ab047fb2215f 2 #include "DebouncedIn.h"
jmcallef 0:ab047fb2215f 3 #include "TextLCD.h"
jmcallef 0:ab047fb2215f 4
jmcallef 0:ab047fb2215f 5 AnalogIn Vin(PTC2);
jmcallef 2:12dac32e2a8b 6 AnalogOut Vout(PTE30);
jmcallef 0:ab047fb2215f 7 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
jmcallef 0:ab047fb2215f 8
jmcallef 0:ab047fb2215f 9 DigitalOut led1(LED1);
jmcallef 0:ab047fb2215f 10 DigitalOut led2(LED2);
jmcallef 0:ab047fb2215f 11 DigitalOut led3(LED3);
jmcallef 0:ab047fb2215f 12 DigitalOut led4(LED4);
jmcallef 0:ab047fb2215f 13 DebouncedIn button1(PTC12); // Aumento
jmcallef 0:ab047fb2215f 14 DebouncedIn button2(PTC13); // Disminución
jmcallef 0:ab047fb2215f 15 DebouncedIn button3(PTC16); // Cambio de variable
jmcallef 0:ab047fb2215f 16 DebouncedIn button4(PTC17); // Reset
jmcallef 0:ab047fb2215f 17
jmcallef 0:ab047fb2215f 18 int C1=0x0E; // solo muestra el curzor.
jmcallef 0:ab047fb2215f 19 int C2=0x18; // desplaza izquierda.
jmcallef 0:ab047fb2215f 20 int C3=0x1A; // desplaza derecha.
jmcallef 0:ab047fb2215f 21 int C4=0x0C; // quito cursor bajo.
jmcallef 0:ab047fb2215f 22
jmcallef 0:ab047fb2215f 23 int i; // Indice de la variable.
jmcallef 0:ab047fb2215f 24 int j; // Controla cambio de posición.
jmcallef 0:ab047fb2215f 25 int kp, ki, kd, sp, cont;
jmcallef 2:12dac32e2a8b 26 int Error, Medida, Co, pid, ap, ai, ad, err_v;
jmcallef 2:12dac32e2a8b 27 // float pidn, err, med, sal;
jmcallef 2:12dac32e2a8b 28 int pidn, err, med, sal;
jmcallef 0:ab047fb2215f 29
jmcallef 0:ab047fb2215f 30 int main(){
jmcallef 0:ab047fb2215f 31 lcd.writeCommand(C1); // Escribimos un comando segun el manual del modulo LCD
jmcallef 0:ab047fb2215f 32 lcd.cls(); // Borro toda la pantalla
jmcallef 0:ab047fb2215f 33 lcd.locate(0,0); // Localizo donde se escribirá el siguiente comando.
jmcallef 0:ab047fb2215f 34 lcd.printf("Sp %d",sp); // Escribe Sp (aparecen desde el punto (0,0)
jmcallef 0:ab047fb2215f 35 lcd.locate(8,0); // Localizo donde se escribirá el siguiente comando.
jmcallef 0:ab047fb2215f 36 lcd.printf("Kp %d",kp); // Escribe Kp (aparecen desde el punto (8,0)
jmcallef 0:ab047fb2215f 37 lcd.locate(0,1);
jmcallef 0:ab047fb2215f 38 lcd.printf("Ki %d",ki);
jmcallef 0:ab047fb2215f 39 lcd.locate(8,1);
jmcallef 0:ab047fb2215f 40 lcd.printf("Kd %d",kd);
jmcallef 0:ab047fb2215f 41
jmcallef 0:ab047fb2215f 42
jmcallef 0:ab047fb2215f 43 while(1){
jmcallef 0:ab047fb2215f 44 led3 =1;
jmcallef 0:ab047fb2215f 45 if (button3.falling()){
jmcallef 0:ab047fb2215f 46 led3 =!led3; // Prendo el LED color rojo cada vez que pulso el boton 3 ya que pasa a valer 0 (encendido).
jmcallef 0:ab047fb2215f 47 ++j;
jmcallef 0:ab047fb2215f 48 } // INCREMENTA POSICION DEL MENU CON BOTON 3
jmcallef 0:ab047fb2215f 49 if (j==0){
jmcallef 0:ab047fb2215f 50 lcd.locate(3,0);
jmcallef 0:ab047fb2215f 51 lcd.printf("%d",sp);
jmcallef 0:ab047fb2215f 52 wait(0.2);
jmcallef 0:ab047fb2215f 53
jmcallef 0:ab047fb2215f 54 led1 = 1;
jmcallef 0:ab047fb2215f 55
jmcallef 0:ab047fb2215f 56 if(button1.falling()) {
jmcallef 0:ab047fb2215f 57 led1 =!led1; // Prendo el LED color azul cada vez que pulso el boton 1 ya que pasa a valer 0 (encendido).
jmcallef 0:ab047fb2215f 58 //++sp; // Incrementa valor al pulsar el botón --> Ahora no lo usamos acá ya que necesitamos incremental.
jmcallef 0:ab047fb2215f 59
jmcallef 0:ab047fb2215f 60
jmcallef 0:ab047fb2215f 61 // Ahora comienza el incremental.
jmcallef 0:ab047fb2215f 62
jmcallef 0:ab047fb2215f 63 if (!button1) {
jmcallef 0:ab047fb2215f 64 cont=0;
jmcallef 0:ab047fb2215f 65 wait(0.2);
jmcallef 0:ab047fb2215f 66
jmcallef 0:ab047fb2215f 67 while(cont<20){
jmcallef 0:ab047fb2215f 68 cont = cont + 1;
jmcallef 0:ab047fb2215f 69 sp=sp+1;
jmcallef 0:ab047fb2215f 70 if (sp>1000){ // Ponemos un tope incremental en 1.000
jmcallef 0:ab047fb2215f 71 sp=1000;
jmcallef 0:ab047fb2215f 72 }
jmcallef 0:ab047fb2215f 73 lcd.locate(0,0);
jmcallef 0:ab047fb2215f 74 lcd.printf("Sp %d",sp);
jmcallef 0:ab047fb2215f 75
jmcallef 0:ab047fb2215f 76 wait(0.3);
jmcallef 0:ab047fb2215f 77 if(button1){
jmcallef 0:ab047fb2215f 78 break;
jmcallef 0:ab047fb2215f 79 }
jmcallef 0:ab047fb2215f 80 while(cont>=20 and cont<=40){
jmcallef 0:ab047fb2215f 81 cont=cont+1;
jmcallef 0:ab047fb2215f 82 sp=sp+10;
jmcallef 0:ab047fb2215f 83 if (sp>1000){ // Ponemos un tope incremental en 10.000
jmcallef 0:ab047fb2215f 84 sp=1000;
jmcallef 0:ab047fb2215f 85 }
jmcallef 0:ab047fb2215f 86 lcd.locate(0,0);
jmcallef 0:ab047fb2215f 87 lcd.printf("Sp %d",sp);
jmcallef 0:ab047fb2215f 88
jmcallef 0:ab047fb2215f 89 wait(0.3);
jmcallef 0:ab047fb2215f 90 if(button1){
jmcallef 0:ab047fb2215f 91 break;
jmcallef 0:ab047fb2215f 92 }
jmcallef 0:ab047fb2215f 93
jmcallef 0:ab047fb2215f 94 while(cont>40){
jmcallef 0:ab047fb2215f 95 cont = cont + 1;
jmcallef 0:ab047fb2215f 96 sp=sp+100;
jmcallef 0:ab047fb2215f 97 if (sp>1000){ // Ponemos un tope incremental en 10.000
jmcallef 0:ab047fb2215f 98 sp=1000;
jmcallef 0:ab047fb2215f 99 }
jmcallef 0:ab047fb2215f 100 lcd.locate(0,0);
jmcallef 0:ab047fb2215f 101 lcd.printf("Sp %d",sp);
jmcallef 0:ab047fb2215f 102
jmcallef 0:ab047fb2215f 103 wait(0.3);
jmcallef 0:ab047fb2215f 104 if(button1){
jmcallef 0:ab047fb2215f 105 break;
jmcallef 0:ab047fb2215f 106 }
jmcallef 0:ab047fb2215f 107 }
jmcallef 0:ab047fb2215f 108 }
jmcallef 0:ab047fb2215f 109 }
jmcallef 0:ab047fb2215f 110 }
jmcallef 0:ab047fb2215f 111
jmcallef 0:ab047fb2215f 112 // Aqui termina el incremental.
jmcallef 0:ab047fb2215f 113 }
jmcallef 0:ab047fb2215f 114
jmcallef 0:ab047fb2215f 115
jmcallef 0:ab047fb2215f 116 led2 =1;
jmcallef 0:ab047fb2215f 117 if (button2.falling()) {
jmcallef 0:ab047fb2215f 118 led2 =!led2; // Prendo el LED color rojo cada vez que pulso el boton 2 ya que pasa a valer 0 (encendido).
jmcallef 0:ab047fb2215f 119
jmcallef 0:ab047fb2215f 120 //--sp; // Reduce el valor al pulsar el botón.
jmcallef 0:ab047fb2215f 121 }
jmcallef 0:ab047fb2215f 122
jmcallef 0:ab047fb2215f 123
jmcallef 0:ab047fb2215f 124 // Ahora comienza el decremental.
jmcallef 0:ab047fb2215f 125
jmcallef 0:ab047fb2215f 126 if (!button2) {
jmcallef 0:ab047fb2215f 127 cont=0;
jmcallef 0:ab047fb2215f 128 wait(0.2);
jmcallef 0:ab047fb2215f 129
jmcallef 0:ab047fb2215f 130 while(cont<20){
jmcallef 0:ab047fb2215f 131 cont = cont + 1;
jmcallef 0:ab047fb2215f 132 sp=sp-1;
jmcallef 0:ab047fb2215f 133
jmcallef 0:ab047fb2215f 134 if (sp<=0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 135 sp=0;
jmcallef 0:ab047fb2215f 136 }
jmcallef 0:ab047fb2215f 137 lcd.locate(3,0);
jmcallef 0:ab047fb2215f 138 lcd.printf(" ");
jmcallef 0:ab047fb2215f 139 lcd.locate(0,0);
jmcallef 0:ab047fb2215f 140 lcd.printf("Sp %d",sp);
jmcallef 0:ab047fb2215f 141
jmcallef 0:ab047fb2215f 142 wait(0.3);
jmcallef 0:ab047fb2215f 143 if(button2){
jmcallef 0:ab047fb2215f 144 break;
jmcallef 0:ab047fb2215f 145 }
jmcallef 0:ab047fb2215f 146
jmcallef 0:ab047fb2215f 147 while(cont>=20 and cont<=40){
jmcallef 0:ab047fb2215f 148 cont=cont+1;
jmcallef 0:ab047fb2215f 149 sp=sp-10;
jmcallef 0:ab047fb2215f 150 if (sp<0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 151 sp=0;
jmcallef 0:ab047fb2215f 152 }
jmcallef 0:ab047fb2215f 153
jmcallef 0:ab047fb2215f 154 lcd.locate(0,0);
jmcallef 0:ab047fb2215f 155 lcd.printf("Sp %d ",sp);
jmcallef 0:ab047fb2215f 156
jmcallef 0:ab047fb2215f 157
jmcallef 0:ab047fb2215f 158 wait(0.3);
jmcallef 0:ab047fb2215f 159 if(button2){
jmcallef 0:ab047fb2215f 160 break;
jmcallef 0:ab047fb2215f 161 }
jmcallef 0:ab047fb2215f 162
jmcallef 0:ab047fb2215f 163 while(cont>40){
jmcallef 0:ab047fb2215f 164 cont = cont + 1;
jmcallef 0:ab047fb2215f 165 sp=sp-100;
jmcallef 0:ab047fb2215f 166
jmcallef 0:ab047fb2215f 167 if (sp<0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 168 sp=0;
jmcallef 0:ab047fb2215f 169 }
jmcallef 0:ab047fb2215f 170
jmcallef 0:ab047fb2215f 171 lcd.locate(0,0);
jmcallef 0:ab047fb2215f 172 lcd.printf("Sp %d ",sp);
jmcallef 0:ab047fb2215f 173
jmcallef 0:ab047fb2215f 174
jmcallef 0:ab047fb2215f 175 wait(0.3);
jmcallef 0:ab047fb2215f 176 if(button2){
jmcallef 0:ab047fb2215f 177 break;
jmcallef 0:ab047fb2215f 178 }
jmcallef 0:ab047fb2215f 179 }
jmcallef 0:ab047fb2215f 180 }
jmcallef 0:ab047fb2215f 181 }
jmcallef 0:ab047fb2215f 182 }
jmcallef 0:ab047fb2215f 183
jmcallef 0:ab047fb2215f 184 // Aqui termina el decremental.
jmcallef 0:ab047fb2215f 185
jmcallef 0:ab047fb2215f 186
jmcallef 0:ab047fb2215f 187 }
jmcallef 0:ab047fb2215f 188 if (j==1){
jmcallef 0:ab047fb2215f 189 lcd.locate(11,0);
jmcallef 0:ab047fb2215f 190 lcd.printf("%d",kp);
jmcallef 0:ab047fb2215f 191 wait(0.3);
jmcallef 0:ab047fb2215f 192 led1 =1;
jmcallef 0:ab047fb2215f 193 if (button1.falling()) {
jmcallef 0:ab047fb2215f 194 led1 =!led1;
jmcallef 0:ab047fb2215f 195 // ++kp;
jmcallef 0:ab047fb2215f 196 }
jmcallef 0:ab047fb2215f 197
jmcallef 0:ab047fb2215f 198 // Ahora comienza el incremental.
jmcallef 0:ab047fb2215f 199
jmcallef 0:ab047fb2215f 200 if (!button1) {
jmcallef 0:ab047fb2215f 201 cont=0;
jmcallef 0:ab047fb2215f 202 wait(0.2);
jmcallef 0:ab047fb2215f 203
jmcallef 0:ab047fb2215f 204 while(cont<20){
jmcallef 0:ab047fb2215f 205 cont = cont + 1;
jmcallef 0:ab047fb2215f 206 kp=kp+1;
jmcallef 0:ab047fb2215f 207 if (kp>1000){ // Ponemos un tope incremental en 10.000
jmcallef 0:ab047fb2215f 208 kp=1000;
jmcallef 0:ab047fb2215f 209 }
jmcallef 0:ab047fb2215f 210 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 211 lcd.printf("Kp %d",kp);
jmcallef 0:ab047fb2215f 212
jmcallef 0:ab047fb2215f 213 wait(0.3);
jmcallef 0:ab047fb2215f 214 if(button1){
jmcallef 0:ab047fb2215f 215 break;
jmcallef 0:ab047fb2215f 216 }
jmcallef 0:ab047fb2215f 217 while(cont>=20){
jmcallef 0:ab047fb2215f 218 cont=cont+1;
jmcallef 0:ab047fb2215f 219 kp=kp+10;
jmcallef 0:ab047fb2215f 220 if (kp>1000){ // Ponemos un tope incremental en 10.000
jmcallef 0:ab047fb2215f 221 kp=1000;
jmcallef 0:ab047fb2215f 222 }
jmcallef 0:ab047fb2215f 223 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 224 lcd.printf("Kp %d",kp);
jmcallef 0:ab047fb2215f 225
jmcallef 0:ab047fb2215f 226 wait(0.3);
jmcallef 0:ab047fb2215f 227 if(button1){
jmcallef 0:ab047fb2215f 228 break;
jmcallef 0:ab047fb2215f 229 }
jmcallef 0:ab047fb2215f 230
jmcallef 0:ab047fb2215f 231 while(cont>40){
jmcallef 0:ab047fb2215f 232 cont = cont + 1;
jmcallef 0:ab047fb2215f 233 kp=kp+100;
jmcallef 0:ab047fb2215f 234 if (kp>1000){ // Ponemos un tope incremental en 10.000
jmcallef 0:ab047fb2215f 235 kp=1000;
jmcallef 0:ab047fb2215f 236 }
jmcallef 0:ab047fb2215f 237 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 238 lcd.printf("Kp %d",kp);
jmcallef 0:ab047fb2215f 239
jmcallef 0:ab047fb2215f 240 wait(0.3);
jmcallef 0:ab047fb2215f 241 if(button1){
jmcallef 0:ab047fb2215f 242 break;
jmcallef 0:ab047fb2215f 243 }
jmcallef 0:ab047fb2215f 244 }
jmcallef 0:ab047fb2215f 245 }
jmcallef 0:ab047fb2215f 246 }
jmcallef 0:ab047fb2215f 247 }
jmcallef 0:ab047fb2215f 248
jmcallef 0:ab047fb2215f 249 // Aqui termina el incremental.
jmcallef 0:ab047fb2215f 250 }
jmcallef 0:ab047fb2215f 251
jmcallef 0:ab047fb2215f 252
jmcallef 0:ab047fb2215f 253 led2 =1;
jmcallef 0:ab047fb2215f 254 if (button2.falling()) {
jmcallef 0:ab047fb2215f 255 led2 =!led2; // Prendo el LED color rojo cada vez que pulso el boton 2 ya que pasa a valer 0 (encendido).
jmcallef 0:ab047fb2215f 256
jmcallef 0:ab047fb2215f 257 //--sp; // Reduce el valor al pulsar el botón.
jmcallef 0:ab047fb2215f 258 }
jmcallef 0:ab047fb2215f 259
jmcallef 0:ab047fb2215f 260
jmcallef 0:ab047fb2215f 261 // Ahora comienza el decremental.
jmcallef 0:ab047fb2215f 262
jmcallef 0:ab047fb2215f 263 if (!button2) {
jmcallef 0:ab047fb2215f 264 cont=0;
jmcallef 0:ab047fb2215f 265 wait(0.2);
jmcallef 0:ab047fb2215f 266
jmcallef 0:ab047fb2215f 267 while(cont<20){
jmcallef 0:ab047fb2215f 268 cont = cont + 1;
jmcallef 0:ab047fb2215f 269
jmcallef 0:ab047fb2215f 270 kp=kp-1;
jmcallef 0:ab047fb2215f 271
jmcallef 0:ab047fb2215f 272 if (kp<=0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 273 kp=0;
jmcallef 0:ab047fb2215f 274 }
jmcallef 0:ab047fb2215f 275
jmcallef 0:ab047fb2215f 276 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 277 lcd.printf(" ");
jmcallef 0:ab047fb2215f 278 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 279 lcd.printf("Kp %d",kp);
jmcallef 0:ab047fb2215f 280
jmcallef 0:ab047fb2215f 281 wait(0.3);
jmcallef 0:ab047fb2215f 282 if(button2){
jmcallef 0:ab047fb2215f 283 break;
jmcallef 0:ab047fb2215f 284 }
jmcallef 0:ab047fb2215f 285
jmcallef 0:ab047fb2215f 286 while(cont>=20){
jmcallef 0:ab047fb2215f 287 cont=cont+1;
jmcallef 0:ab047fb2215f 288 kp=kp-10;
jmcallef 0:ab047fb2215f 289 if (kp<0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 290 kp=0;
jmcallef 0:ab047fb2215f 291 }
jmcallef 0:ab047fb2215f 292
jmcallef 0:ab047fb2215f 293 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 294 lcd.printf(" ");
jmcallef 0:ab047fb2215f 295 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 296 lcd.printf("Kp %d ",kp);
jmcallef 0:ab047fb2215f 297
jmcallef 0:ab047fb2215f 298 wait(0.3);
jmcallef 0:ab047fb2215f 299 if(button2){
jmcallef 0:ab047fb2215f 300 break;
jmcallef 0:ab047fb2215f 301 }
jmcallef 0:ab047fb2215f 302
jmcallef 0:ab047fb2215f 303 while(cont>40){
jmcallef 0:ab047fb2215f 304 cont = cont + 1;
jmcallef 0:ab047fb2215f 305 kp=kp-100;
jmcallef 0:ab047fb2215f 306
jmcallef 0:ab047fb2215f 307 if (kp<0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 308 kp=0;
jmcallef 0:ab047fb2215f 309 }
jmcallef 0:ab047fb2215f 310 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 311 lcd.printf(" ");
jmcallef 0:ab047fb2215f 312 lcd.locate(8,0);
jmcallef 0:ab047fb2215f 313 lcd.printf("Kp %d ",kp);
jmcallef 0:ab047fb2215f 314
jmcallef 0:ab047fb2215f 315
jmcallef 0:ab047fb2215f 316 wait(0.3);
jmcallef 0:ab047fb2215f 317 if(button2){
jmcallef 0:ab047fb2215f 318 break;
jmcallef 0:ab047fb2215f 319 }
jmcallef 0:ab047fb2215f 320 }
jmcallef 0:ab047fb2215f 321 }
jmcallef 0:ab047fb2215f 322 }
jmcallef 0:ab047fb2215f 323 }
jmcallef 0:ab047fb2215f 324
jmcallef 0:ab047fb2215f 325
jmcallef 0:ab047fb2215f 326
jmcallef 0:ab047fb2215f 327 if (j==2){
jmcallef 0:ab047fb2215f 328 lcd.locate(3,1);
jmcallef 0:ab047fb2215f 329 lcd.printf("%d",ki);
jmcallef 0:ab047fb2215f 330 wait(0.3);
jmcallef 0:ab047fb2215f 331 led1 =1;
jmcallef 0:ab047fb2215f 332 if (button1.falling()){
jmcallef 0:ab047fb2215f 333 led1 =!led1;
jmcallef 0:ab047fb2215f 334
jmcallef 0:ab047fb2215f 335 //++sp; // Incrementa valor al pulsar el botón --> Ahora no lo usamos acá ya que necesitamos incremental.
jmcallef 0:ab047fb2215f 336
jmcallef 0:ab047fb2215f 337
jmcallef 0:ab047fb2215f 338 // Ahora comienza el incremental.
jmcallef 0:ab047fb2215f 339
jmcallef 0:ab047fb2215f 340 if (!button1) {
jmcallef 0:ab047fb2215f 341 cont=0;
jmcallef 0:ab047fb2215f 342 wait(0.2);
jmcallef 0:ab047fb2215f 343
jmcallef 0:ab047fb2215f 344 while(cont<20){
jmcallef 0:ab047fb2215f 345 cont = cont + 1;
jmcallef 0:ab047fb2215f 346 ki=ki+1;
jmcallef 0:ab047fb2215f 347 if (ki>1000){ // Ponemos un tope incremental en 1.000
jmcallef 0:ab047fb2215f 348 ki=1000;
jmcallef 0:ab047fb2215f 349 }
jmcallef 0:ab047fb2215f 350 lcd.locate(0,1);
jmcallef 0:ab047fb2215f 351 lcd.printf("Ki %d",ki);
jmcallef 0:ab047fb2215f 352
jmcallef 0:ab047fb2215f 353 wait(0.3);
jmcallef 0:ab047fb2215f 354 if(button1){
jmcallef 0:ab047fb2215f 355 break;
jmcallef 0:ab047fb2215f 356 }
jmcallef 0:ab047fb2215f 357 while(cont>=20 and cont<=40){
jmcallef 0:ab047fb2215f 358 cont=cont+1;
jmcallef 0:ab047fb2215f 359 ki=ki+10;
jmcallef 0:ab047fb2215f 360 if (ki>1000){ // Ponemos un tope incremental en 10.000
jmcallef 0:ab047fb2215f 361 ki=1000;
jmcallef 0:ab047fb2215f 362 }
jmcallef 0:ab047fb2215f 363 lcd.locate(0,1);
jmcallef 0:ab047fb2215f 364 lcd.printf("Ki %d",ki);
jmcallef 0:ab047fb2215f 365
jmcallef 0:ab047fb2215f 366 wait(0.3);
jmcallef 0:ab047fb2215f 367 if(button1){
jmcallef 0:ab047fb2215f 368 break;
jmcallef 0:ab047fb2215f 369 }
jmcallef 0:ab047fb2215f 370
jmcallef 0:ab047fb2215f 371 while(cont>40){
jmcallef 0:ab047fb2215f 372 cont = cont + 1;
jmcallef 0:ab047fb2215f 373 ki=ki+100;
jmcallef 0:ab047fb2215f 374 if (ki>1000){ // Ponemos un tope incremental en 10.000
jmcallef 0:ab047fb2215f 375 ki=1000;
jmcallef 0:ab047fb2215f 376 }
jmcallef 0:ab047fb2215f 377 lcd.locate(0,1);
jmcallef 0:ab047fb2215f 378 lcd.printf("Ki %d",ki);
jmcallef 0:ab047fb2215f 379
jmcallef 0:ab047fb2215f 380 wait(0.3);
jmcallef 0:ab047fb2215f 381 if(button1){
jmcallef 0:ab047fb2215f 382 break;
jmcallef 0:ab047fb2215f 383 }
jmcallef 0:ab047fb2215f 384 }
jmcallef 0:ab047fb2215f 385 }
jmcallef 0:ab047fb2215f 386 }
jmcallef 0:ab047fb2215f 387 }
jmcallef 0:ab047fb2215f 388 }
jmcallef 0:ab047fb2215f 389 // Aqui termina el incremental.
jmcallef 0:ab047fb2215f 390 }
jmcallef 0:ab047fb2215f 391
jmcallef 0:ab047fb2215f 392
jmcallef 0:ab047fb2215f 393 led2 =1;
jmcallef 0:ab047fb2215f 394 if (button2.falling()) {
jmcallef 0:ab047fb2215f 395 led2 =!led2; // Prendo el LED color rojo cada vez que pulso el boton 2 ya que pasa a valer 0 (encendido).
jmcallef 0:ab047fb2215f 396
jmcallef 0:ab047fb2215f 397 //--sp; // Reduce el valor al pulsar el botón.
jmcallef 0:ab047fb2215f 398 }
jmcallef 0:ab047fb2215f 399
jmcallef 0:ab047fb2215f 400
jmcallef 0:ab047fb2215f 401 // Ahora comienza el decremental.
jmcallef 0:ab047fb2215f 402
jmcallef 0:ab047fb2215f 403 if (!button2) {
jmcallef 0:ab047fb2215f 404 cont=0;
jmcallef 0:ab047fb2215f 405 wait(0.2);
jmcallef 0:ab047fb2215f 406
jmcallef 0:ab047fb2215f 407 while(cont<20){
jmcallef 0:ab047fb2215f 408 cont = cont + 1;
jmcallef 0:ab047fb2215f 409 ki=ki-1;
jmcallef 0:ab047fb2215f 410
jmcallef 0:ab047fb2215f 411 if (ki<=0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 412 ki=0;
jmcallef 0:ab047fb2215f 413 }
jmcallef 0:ab047fb2215f 414 lcd.locate(3,1);
jmcallef 0:ab047fb2215f 415 lcd.printf(" ");
jmcallef 0:ab047fb2215f 416 lcd.locate(0,1);
jmcallef 0:ab047fb2215f 417 lcd.printf("Ki %d",ki);
jmcallef 0:ab047fb2215f 418
jmcallef 0:ab047fb2215f 419 wait(0.3);
jmcallef 0:ab047fb2215f 420 if(button2){
jmcallef 0:ab047fb2215f 421 break;
jmcallef 0:ab047fb2215f 422 }
jmcallef 0:ab047fb2215f 423
jmcallef 0:ab047fb2215f 424 while(cont>=20 and cont<=40){
jmcallef 0:ab047fb2215f 425 cont=cont+1;
jmcallef 0:ab047fb2215f 426 ki=ki-10;
jmcallef 0:ab047fb2215f 427 if (sp<0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 428 ki=0;
jmcallef 0:ab047fb2215f 429 }
jmcallef 0:ab047fb2215f 430
jmcallef 0:ab047fb2215f 431 lcd.locate(3,1);
jmcallef 0:ab047fb2215f 432 lcd.printf(" ");
jmcallef 0:ab047fb2215f 433 lcd.locate(0,0);
jmcallef 0:ab047fb2215f 434 lcd.printf("Ki %d ",ki);
jmcallef 0:ab047fb2215f 435
jmcallef 0:ab047fb2215f 436
jmcallef 0:ab047fb2215f 437 wait(0.3);
jmcallef 0:ab047fb2215f 438 if(button2){
jmcallef 0:ab047fb2215f 439 break;
jmcallef 0:ab047fb2215f 440 }
jmcallef 0:ab047fb2215f 441
jmcallef 0:ab047fb2215f 442 while(cont>40){
jmcallef 0:ab047fb2215f 443 cont = cont + 1;
jmcallef 0:ab047fb2215f 444 ki=ki-100;
jmcallef 0:ab047fb2215f 445
jmcallef 0:ab047fb2215f 446 if (ki<0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 447 ki=0;
jmcallef 0:ab047fb2215f 448 }
jmcallef 0:ab047fb2215f 449
jmcallef 0:ab047fb2215f 450 lcd.locate(3,1);
jmcallef 0:ab047fb2215f 451 lcd.printf(" ");
jmcallef 0:ab047fb2215f 452 lcd.locate(0,0);
jmcallef 0:ab047fb2215f 453 lcd.printf("Ki %d ",ki);
jmcallef 0:ab047fb2215f 454
jmcallef 0:ab047fb2215f 455
jmcallef 0:ab047fb2215f 456 wait(0.3);
jmcallef 0:ab047fb2215f 457 if(button2){
jmcallef 0:ab047fb2215f 458 break;
jmcallef 0:ab047fb2215f 459 }
jmcallef 0:ab047fb2215f 460 }
jmcallef 0:ab047fb2215f 461 }
jmcallef 0:ab047fb2215f 462 }
jmcallef 0:ab047fb2215f 463 }
jmcallef 0:ab047fb2215f 464
jmcallef 0:ab047fb2215f 465 // Aqui termina el decremental.
jmcallef 0:ab047fb2215f 466
jmcallef 0:ab047fb2215f 467 if (j==3){
jmcallef 0:ab047fb2215f 468 lcd.locate(11,1);
jmcallef 0:ab047fb2215f 469 lcd.printf("%d",kd);
jmcallef 0:ab047fb2215f 470 wait(0.3);
jmcallef 0:ab047fb2215f 471 led1 =1;
jmcallef 0:ab047fb2215f 472 if (button1.falling()){
jmcallef 0:ab047fb2215f 473 led1 =!led1;
jmcallef 0:ab047fb2215f 474
jmcallef 0:ab047fb2215f 475 //++sp; // Incrementa valor al pulsar el botón --> Ahora no lo usamos acá ya que necesitamos incremental.
jmcallef 0:ab047fb2215f 476
jmcallef 0:ab047fb2215f 477
jmcallef 0:ab047fb2215f 478 // Ahora comienza el incremental.
jmcallef 0:ab047fb2215f 479
jmcallef 0:ab047fb2215f 480 if (!button1) {
jmcallef 0:ab047fb2215f 481 cont=0;
jmcallef 0:ab047fb2215f 482 wait(0.2);
jmcallef 0:ab047fb2215f 483
jmcallef 0:ab047fb2215f 484 while(cont<20){
jmcallef 0:ab047fb2215f 485 cont = cont + 1;
jmcallef 0:ab047fb2215f 486 kd=kd+1;
jmcallef 0:ab047fb2215f 487
jmcallef 0:ab047fb2215f 488 if (kd>1000){ // Ponemos un tope incremental en 1.000
jmcallef 0:ab047fb2215f 489 kd=1000;
jmcallef 0:ab047fb2215f 490 }
jmcallef 0:ab047fb2215f 491 lcd.locate(8,1);
jmcallef 0:ab047fb2215f 492 lcd.printf("Kd %d",kd);
jmcallef 0:ab047fb2215f 493
jmcallef 0:ab047fb2215f 494 wait(0.3);
jmcallef 0:ab047fb2215f 495 if(button1){
jmcallef 0:ab047fb2215f 496 break;
jmcallef 0:ab047fb2215f 497 }
jmcallef 0:ab047fb2215f 498 while(cont>=20 and cont<=40){
jmcallef 0:ab047fb2215f 499 cont=cont+1;
jmcallef 0:ab047fb2215f 500 kd=kd+10;
jmcallef 0:ab047fb2215f 501 if (kd>1000){ // Ponemos un tope incremental en 100
jmcallef 0:ab047fb2215f 502 kd=1000;
jmcallef 0:ab047fb2215f 503 }
jmcallef 0:ab047fb2215f 504 lcd.locate(8,1);
jmcallef 0:ab047fb2215f 505 lcd.printf("Kd %d",kd);
jmcallef 0:ab047fb2215f 506
jmcallef 0:ab047fb2215f 507 wait(0.3);
jmcallef 0:ab047fb2215f 508 if(button1){
jmcallef 0:ab047fb2215f 509 break;
jmcallef 0:ab047fb2215f 510 }
jmcallef 0:ab047fb2215f 511
jmcallef 0:ab047fb2215f 512 while(cont>40){
jmcallef 0:ab047fb2215f 513 cont = cont + 1;
jmcallef 0:ab047fb2215f 514 kd=kd+100;
jmcallef 0:ab047fb2215f 515 if (kd>1000){ // Ponemos un tope incremental en 1000
jmcallef 0:ab047fb2215f 516 kd=1000;
jmcallef 0:ab047fb2215f 517 }
jmcallef 0:ab047fb2215f 518 lcd.locate(8,1);
jmcallef 0:ab047fb2215f 519 lcd.printf("Kd %d",kd);
jmcallef 0:ab047fb2215f 520
jmcallef 0:ab047fb2215f 521 wait(0.3);
jmcallef 0:ab047fb2215f 522 if(button1){
jmcallef 0:ab047fb2215f 523 break;
jmcallef 0:ab047fb2215f 524 }
jmcallef 0:ab047fb2215f 525 }
jmcallef 0:ab047fb2215f 526 }
jmcallef 0:ab047fb2215f 527 }
jmcallef 0:ab047fb2215f 528 }
jmcallef 0:ab047fb2215f 529 }
jmcallef 0:ab047fb2215f 530 // Aqui termina el incremental.
jmcallef 0:ab047fb2215f 531 }
jmcallef 0:ab047fb2215f 532
jmcallef 0:ab047fb2215f 533
jmcallef 0:ab047fb2215f 534 led2 =1;
jmcallef 0:ab047fb2215f 535 if (button2.falling()) {
jmcallef 0:ab047fb2215f 536 led2 =!led2; // Prendo el LED color rojo cada vez que pulso el boton 2 ya que pasa a valer 0 (encendido).
jmcallef 0:ab047fb2215f 537
jmcallef 0:ab047fb2215f 538 //--sp; // Reduce el valor al pulsar el botón.
jmcallef 0:ab047fb2215f 539 }
jmcallef 0:ab047fb2215f 540
jmcallef 0:ab047fb2215f 541
jmcallef 0:ab047fb2215f 542 // Ahora comienza el decremental.
jmcallef 0:ab047fb2215f 543
jmcallef 0:ab047fb2215f 544 if (!button2) {
jmcallef 0:ab047fb2215f 545 cont=0;
jmcallef 0:ab047fb2215f 546 wait(0.2);
jmcallef 0:ab047fb2215f 547
jmcallef 0:ab047fb2215f 548 while(cont<20){
jmcallef 0:ab047fb2215f 549 cont = cont + 1;
jmcallef 0:ab047fb2215f 550 kd=kd-1;
jmcallef 0:ab047fb2215f 551
jmcallef 0:ab047fb2215f 552 if (kd<=0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 553 kd=0;
jmcallef 0:ab047fb2215f 554 }
jmcallef 0:ab047fb2215f 555 lcd.locate(11,1);
jmcallef 0:ab047fb2215f 556 lcd.printf(" ");
jmcallef 0:ab047fb2215f 557 lcd.locate(8,1);
jmcallef 0:ab047fb2215f 558 lcd.printf("Kd %d",kd);
jmcallef 0:ab047fb2215f 559
jmcallef 0:ab047fb2215f 560 wait(0.3);
jmcallef 0:ab047fb2215f 561 if(button2){
jmcallef 0:ab047fb2215f 562 break;
jmcallef 0:ab047fb2215f 563 }
jmcallef 0:ab047fb2215f 564
jmcallef 0:ab047fb2215f 565 while(cont>=20 and cont<=40){
jmcallef 0:ab047fb2215f 566 cont=cont+1;
jmcallef 0:ab047fb2215f 567 kd=kd-10;
jmcallef 0:ab047fb2215f 568 if (kd<0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 569 kd=0;
jmcallef 0:ab047fb2215f 570 }
jmcallef 0:ab047fb2215f 571
jmcallef 0:ab047fb2215f 572 lcd.locate(11,1);
jmcallef 0:ab047fb2215f 573 lcd.printf(" ");
jmcallef 0:ab047fb2215f 574 lcd.locate(8,1);
jmcallef 0:ab047fb2215f 575 lcd.printf("Kd %d ",kd);
jmcallef 0:ab047fb2215f 576
jmcallef 0:ab047fb2215f 577
jmcallef 0:ab047fb2215f 578 wait(0.3);
jmcallef 0:ab047fb2215f 579 if(button2){
jmcallef 0:ab047fb2215f 580 break;
jmcallef 0:ab047fb2215f 581 }
jmcallef 0:ab047fb2215f 582
jmcallef 0:ab047fb2215f 583 while(cont>40){
jmcallef 0:ab047fb2215f 584 cont = cont + 1;
jmcallef 0:ab047fb2215f 585 kd=kd-100;
jmcallef 0:ab047fb2215f 586
jmcallef 0:ab047fb2215f 587 if (kd<0){ // No permitimos valores negativos, definimos valor mínimo en 0.
jmcallef 0:ab047fb2215f 588 kd=0;
jmcallef 0:ab047fb2215f 589 }
jmcallef 0:ab047fb2215f 590
jmcallef 0:ab047fb2215f 591 lcd.locate(11,1);
jmcallef 0:ab047fb2215f 592 lcd.printf(" ");
jmcallef 0:ab047fb2215f 593 lcd.locate(8,1);
jmcallef 0:ab047fb2215f 594 lcd.printf("Kd %d ",kd);
jmcallef 0:ab047fb2215f 595
jmcallef 0:ab047fb2215f 596
jmcallef 0:ab047fb2215f 597 wait(0.3);
jmcallef 0:ab047fb2215f 598 if(button2){
jmcallef 0:ab047fb2215f 599 break;
jmcallef 2:12dac32e2a8b 600 }
jmcallef 2:12dac32e2a8b 601
jmcallef 0:ab047fb2215f 602 }
jmcallef 0:ab047fb2215f 603 }
jmcallef 0:ab047fb2215f 604 }
jmcallef 0:ab047fb2215f 605 }
jmcallef 0:ab047fb2215f 606
jmcallef 0:ab047fb2215f 607 // Aqui termina el decremental.
jmcallef 0:ab047fb2215f 608
jmcallef 0:ab047fb2215f 609 if (button4.falling()){
jmcallef 0:ab047fb2215f 610 break; //sale del bucle si pisan suiche4
jmcallef 0:ab047fb2215f 611 }
jmcallef 0:ab047fb2215f 612 }
jmcallef 0:ab047fb2215f 613
jmcallef 0:ab047fb2215f 614 //**********************************************************************************
jmcallef 0:ab047fb2215f 615 //*******************************************************************************************************
jmcallef 0:ab047fb2215f 616
jmcallef 0:ab047fb2215f 617
jmcallef 0:ab047fb2215f 618
jmcallef 2:12dac32e2a8b 619 lcd.writeCommand(C4); // Comando para quitar cursor bajo (segun el manual del modulo LCD).
jmcallef 2:12dac32e2a8b 620 lcd.cls(); // Borra la pantalla
jmcallef 0:ab047fb2215f 621 lcd.printf(" GUARDADOS!");
jmcallef 2:12dac32e2a8b 622 wait(1);
jmcallef 0:ab047fb2215f 623 lcd.cls();
jmcallef 0:ab047fb2215f 624 lcd.printf(" INICIA EL PID");
jmcallef 2:12dac32e2a8b 625 wait(1);
jmcallef 2:12dac32e2a8b 626
jmcallef 2:12dac32e2a8b 627 // Se imprimen los parches del control.
jmcallef 2:12dac32e2a8b 628
jmcallef 0:ab047fb2215f 629 lcd.cls();
jmcallef 2:12dac32e2a8b 630 lcd.printf("Err %d",err);
jmcallef 0:ab047fb2215f 631 lcd.locate(8,0);
jmcallef 2:12dac32e2a8b 632 lcd.printf("Med %d",med);
jmcallef 0:ab047fb2215f 633 lcd.locate(0,1);
jmcallef 2:12dac32e2a8b 634 lcd.printf("Sp %d",sp);
jmcallef 0:ab047fb2215f 635 lcd.locate(8,1);
jmcallef 2:12dac32e2a8b 636 lcd.printf("Co %d",pid);
jmcallef 2:12dac32e2a8b 637 wait(1);
jmcallef 2:12dac32e2a8b 638
jmcallef 2:12dac32e2a8b 639
jmcallef 0:ab047fb2215f 640 // CICLO PRINCIPAL CONTROLADOR PID
jmcallef 0:ab047fb2215f 641
jmcallef 0:ab047fb2215f 642 while(1) {
jmcallef 2:12dac32e2a8b 643 med=Vout*100; // Se le asigna al puerto Análogo la variable med.
jmcallef 0:ab047fb2215f 644 err = (sp-med);
jmcallef 2:12dac32e2a8b 645
jmcallef 2:12dac32e2a8b 646 // Verificamos que la accion integral no sea muy grande.
jmcallef 2:12dac32e2a8b 647
jmcallef 2:12dac32e2a8b 648 if (ai < 1000){
jmcallef 2:12dac32e2a8b 649 ai =(ki*err)+ai; //Cálculo de la integral del error;
jmcallef 2:12dac32e2a8b 650 }
jmcallef 2:12dac32e2a8b 651
jmcallef 2:12dac32e2a8b 652 if (ap < 1000){
jmcallef 2:12dac32e2a8b 653 ap = kp*err; //Cálculo de la integral del error;
jmcallef 2:12dac32e2a8b 654 }
jmcallef 2:12dac32e2a8b 655
jmcallef 2:12dac32e2a8b 656 if (ad < 1000){
jmcallef 2:12dac32e2a8b 657 ad = kd*(err-err_v); //Cálculo de la integral del error;
jmcallef 2:12dac32e2a8b 658 }
jmcallef 2:12dac32e2a8b 659
jmcallef 2:12dac32e2a8b 660 pid = (ap+ai+ad); // Calculo del PID
jmcallef 2:12dac32e2a8b 661
jmcallef 2:12dac32e2a8b 662 if(pid<0){
jmcallef 2:12dac32e2a8b 663 pid=0;
jmcallef 2:12dac32e2a8b 664 }
jmcallef 2:12dac32e2a8b 665
jmcallef 2:12dac32e2a8b 666 if (pid > 1000){
jmcallef 0:ab047fb2215f 667 pid=1000;
jmcallef 2:12dac32e2a8b 668 }
jmcallef 2:12dac32e2a8b 669
jmcallef 2:12dac32e2a8b 670 //Vout=pid/999;
jmcallef 0:ab047fb2215f 671
jmcallef 0:ab047fb2215f 672
jmcallef 2:12dac32e2a8b 673 lcd.locate(4,0);
jmcallef 2:12dac32e2a8b 674 lcd.printf("%d",err);
jmcallef 2:12dac32e2a8b 675 lcd.locate(12,0);
jmcallef 2:12dac32e2a8b 676 lcd.printf("%d",med);
jmcallef 2:12dac32e2a8b 677 lcd.locate(3,1);
jmcallef 2:12dac32e2a8b 678 lcd.printf("%d",sp);
jmcallef 2:12dac32e2a8b 679 lcd.locate(12,1);
jmcallef 2:12dac32e2a8b 680 lcd.printf("%d",pid);
jmcallef 2:12dac32e2a8b 681 wait(0.2);
jmcallef 1:ce04971eceb4 682
jmcallef 0:ab047fb2215f 683 // se actualizan las variables *******************************************
jmcallef 2:12dac32e2a8b 684
jmcallef 0:ab047fb2215f 685 // se verifica que pid sea positivo **************************************
jmcallef 2:12dac32e2a8b 686 if (pid < 0){
jmcallef 2:12dac32e2a8b 687 pid=0;
jmcallef 2:12dac32e2a8b 688 }
jmcallef 0:ab047fb2215f 689
jmcallef 0:ab047fb2215f 690
jmcallef 0:ab047fb2215f 691 // se envia el valor pid a puerto analogico de salida (D/A) **************
jmcallef 2:12dac32e2a8b 692
jmcallef 2:12dac32e2a8b 693 Vout=pid;
jmcallef 2:12dac32e2a8b 694 err_v = err;
jmcallef 2:12dac32e2a8b 695
jmcallef 0:ab047fb2215f 696 }
jmcallef 2:12dac32e2a8b 697 }