Jose Calle / Mbed 2 deprecated PID_Simpl_Reto

Dependencies:   Debounced TextLCD1 mbed

Committer:
jmcallef
Date:
Fri Nov 01 00:51:04 2013 +0000
Revision:
1:ce04971eceb4
Parent:
0:ab047fb2215f
Child:
2:12dac32e2a8b
IIII

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