sdhfdhfudhg

Dependencies:   DebouncedIn TextLCDa mbed

Committer:
javiernegrette
Date:
Fri Nov 08 17:01:54 2013 +0000
Revision:
0:54dde34c33f3
dhguhguehgueg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
javiernegrette 0:54dde34c33f3 1 #include "mbed.h"
javiernegrette 0:54dde34c33f3 2 #include "DebouncedIn.h"
javiernegrette 0:54dde34c33f3 3 #include "TextLCD.h"
javiernegrette 0:54dde34c33f3 4
javiernegrette 0:54dde34c33f3 5 AnalogIn Vin(PTC2);
javiernegrette 0:54dde34c33f3 6 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
javiernegrette 0:54dde34c33f3 7
javiernegrette 0:54dde34c33f3 8 AnalogIn y(PTB0);
javiernegrette 0:54dde34c33f3 9 AnalogOut u(PTE30);
javiernegrette 0:54dde34c33f3 10
javiernegrette 0:54dde34c33f3 11 DigitalOut led1(LED1);
javiernegrette 0:54dde34c33f3 12 DigitalOut led2(LED2);
javiernegrette 0:54dde34c33f3 13 DigitalOut led3(LED3);
javiernegrette 0:54dde34c33f3 14 DigitalIn button1(PTC12);
javiernegrette 0:54dde34c33f3 15 DigitalIn button2(PTC13);
javiernegrette 0:54dde34c33f3 16 DigitalIn button3(PTC16);
javiernegrette 0:54dde34c33f3 17 DigitalIn button4(PTC17);
javiernegrette 0:54dde34c33f3 18
javiernegrette 0:54dde34c33f3 19
javiernegrette 0:54dde34c33f3 20 /* codigos movimiento del cursor
javiernegrette 0:54dde34c33f3 21 18 para izquierda
javiernegrette 0:54dde34c33f3 22 1A para derecha
javiernegrette 0:54dde34c33f3 23 */
javiernegrette 0:54dde34c33f3 24
javiernegrette 0:54dde34c33f3 25
javiernegrette 0:54dde34c33f3 26 //int C1=0x0E; // solo muestra el cursor
javiernegrette 0:54dde34c33f3 27 int C2=0x18; // desplaza izquierda
javiernegrette 0:54dde34c33f3 28 int C3=0x1A; // desplaza derecha
javiernegrette 0:54dde34c33f3 29 int C4=0x0C; // quito cursor bajo
javiernegrette 0:54dde34c33f3 30
javiernegrette 0:54dde34c33f3 31 int C1=0x0F;
javiernegrette 0:54dde34c33f3 32 int err, med, yr, pid, ap, ai, ad, err_v, cycle;
javiernegrette 0:54dde34c33f3 33 float pidn;
javiernegrette 0:54dde34c33f3 34 int spnum=0,kinum=0,kpnum=0,kdnum=0,pos=1;
javiernegrette 0:54dde34c33f3 35 int incremento=1,f=0;
javiernegrette 0:54dde34c33f3 36 Timer t;
javiernegrette 0:54dde34c33f3 37
javiernegrette 0:54dde34c33f3 38 int main()
javiernegrette 0:54dde34c33f3 39 {
javiernegrette 0:54dde34c33f3 40 lcd.cls(); // Borrar Pantalla
javiernegrette 0:54dde34c33f3 41 lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
javiernegrette 0:54dde34c33f3 42
javiernegrette 0:54dde34c33f3 43 lcd.locate(8,0);
javiernegrette 0:54dde34c33f3 44 lcd.printf("Kp=%d",kpnum);
javiernegrette 0:54dde34c33f3 45 lcd.locate(0,1);
javiernegrette 0:54dde34c33f3 46 lcd.printf("Ki=%d",kinum);
javiernegrette 0:54dde34c33f3 47 lcd.locate(8,1);
javiernegrette 0:54dde34c33f3 48 lcd.printf("Kd=%d",kdnum);
javiernegrette 0:54dde34c33f3 49 lcd.locate(0,0);
javiernegrette 0:54dde34c33f3 50 lcd.printf("Sp=%d",spnum);
javiernegrette 0:54dde34c33f3 51
javiernegrette 0:54dde34c33f3 52 while(1)
javiernegrette 0:54dde34c33f3 53 {
javiernegrette 0:54dde34c33f3 54 if (!button1)
javiernegrette 0:54dde34c33f3 55 {
javiernegrette 0:54dde34c33f3 56 if(f==0)
javiernegrette 0:54dde34c33f3 57 {
javiernegrette 0:54dde34c33f3 58 t.start();
javiernegrette 0:54dde34c33f3 59 f=1;
javiernegrette 0:54dde34c33f3 60 }
javiernegrette 0:54dde34c33f3 61
javiernegrette 0:54dde34c33f3 62 led1 =!led1;
javiernegrette 0:54dde34c33f3 63 wait(0.50);
javiernegrette 0:54dde34c33f3 64 if(!button1)
javiernegrette 0:54dde34c33f3 65 {
javiernegrette 0:54dde34c33f3 66 if(t.read()>10)
javiernegrette 0:54dde34c33f3 67 {
javiernegrette 0:54dde34c33f3 68 incremento=100;
javiernegrette 0:54dde34c33f3 69 }
javiernegrette 0:54dde34c33f3 70 else if(t.read()>5.5)
javiernegrette 0:54dde34c33f3 71 {
javiernegrette 0:54dde34c33f3 72 incremento=10;
javiernegrette 0:54dde34c33f3 73 }
javiernegrette 0:54dde34c33f3 74
javiernegrette 0:54dde34c33f3 75 if(pos==1)
javiernegrette 0:54dde34c33f3 76 {
javiernegrette 0:54dde34c33f3 77 if(spnum+incremento>=999)
javiernegrette 0:54dde34c33f3 78 {
javiernegrette 0:54dde34c33f3 79 spnum=999;
javiernegrette 0:54dde34c33f3 80 lcd.locate(3,0);
javiernegrette 0:54dde34c33f3 81 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 82 lcd.locate(3,0);
javiernegrette 0:54dde34c33f3 83 lcd.printf("%d", spnum);
javiernegrette 0:54dde34c33f3 84 }
javiernegrette 0:54dde34c33f3 85 else
javiernegrette 0:54dde34c33f3 86 {
javiernegrette 0:54dde34c33f3 87 spnum+=incremento;
javiernegrette 0:54dde34c33f3 88 lcd.locate(3,0);
javiernegrette 0:54dde34c33f3 89 lcd.printf("%d", spnum);
javiernegrette 0:54dde34c33f3 90 }
javiernegrette 0:54dde34c33f3 91 }
javiernegrette 0:54dde34c33f3 92 else if(pos==2)
javiernegrette 0:54dde34c33f3 93 {
javiernegrette 0:54dde34c33f3 94 if(kpnum+incremento>=999)
javiernegrette 0:54dde34c33f3 95 {
javiernegrette 0:54dde34c33f3 96 kpnum=999;
javiernegrette 0:54dde34c33f3 97 lcd.locate(11,0);
javiernegrette 0:54dde34c33f3 98 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 99 lcd.locate(11,0);
javiernegrette 0:54dde34c33f3 100 lcd.printf("%d", kpnum);
javiernegrette 0:54dde34c33f3 101 }
javiernegrette 0:54dde34c33f3 102 else
javiernegrette 0:54dde34c33f3 103 {
javiernegrette 0:54dde34c33f3 104 kpnum+=incremento;
javiernegrette 0:54dde34c33f3 105 lcd.locate(11,0);
javiernegrette 0:54dde34c33f3 106 lcd.printf("%d", kpnum);
javiernegrette 0:54dde34c33f3 107 }
javiernegrette 0:54dde34c33f3 108 }
javiernegrette 0:54dde34c33f3 109 else if(pos==3)
javiernegrette 0:54dde34c33f3 110 {
javiernegrette 0:54dde34c33f3 111 if(kinum+incremento>=999)
javiernegrette 0:54dde34c33f3 112 {
javiernegrette 0:54dde34c33f3 113 kinum=999;
javiernegrette 0:54dde34c33f3 114 lcd.locate(3,1);
javiernegrette 0:54dde34c33f3 115 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 116 lcd.locate(3,1);
javiernegrette 0:54dde34c33f3 117 lcd.printf("%d", kinum);
javiernegrette 0:54dde34c33f3 118 }
javiernegrette 0:54dde34c33f3 119 else
javiernegrette 0:54dde34c33f3 120 {
javiernegrette 0:54dde34c33f3 121 kinum+=incremento;
javiernegrette 0:54dde34c33f3 122 lcd.locate(3,1);
javiernegrette 0:54dde34c33f3 123 lcd.printf("%d", kinum);
javiernegrette 0:54dde34c33f3 124 }
javiernegrette 0:54dde34c33f3 125 }
javiernegrette 0:54dde34c33f3 126 else if(pos==4)
javiernegrette 0:54dde34c33f3 127 {
javiernegrette 0:54dde34c33f3 128 if(kdnum+incremento>=999)
javiernegrette 0:54dde34c33f3 129 {
javiernegrette 0:54dde34c33f3 130 kdnum=999;
javiernegrette 0:54dde34c33f3 131 lcd.locate(11,1);
javiernegrette 0:54dde34c33f3 132 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 133 lcd.locate(11,1);
javiernegrette 0:54dde34c33f3 134 lcd.printf("%d", kdnum);
javiernegrette 0:54dde34c33f3 135 }
javiernegrette 0:54dde34c33f3 136 else
javiernegrette 0:54dde34c33f3 137 {
javiernegrette 0:54dde34c33f3 138 kdnum+=incremento;
javiernegrette 0:54dde34c33f3 139 lcd.locate(11,1);
javiernegrette 0:54dde34c33f3 140 lcd.printf("%d", kdnum);
javiernegrette 0:54dde34c33f3 141 }
javiernegrette 0:54dde34c33f3 142 }
javiernegrette 0:54dde34c33f3 143 }
javiernegrette 0:54dde34c33f3 144 }
javiernegrette 0:54dde34c33f3 145
javiernegrette 0:54dde34c33f3 146 if (!button2)
javiernegrette 0:54dde34c33f3 147 {
javiernegrette 0:54dde34c33f3 148 if(f==0)
javiernegrette 0:54dde34c33f3 149 {
javiernegrette 0:54dde34c33f3 150 //t.reset();
javiernegrette 0:54dde34c33f3 151 t.start();
javiernegrette 0:54dde34c33f3 152 f=1;
javiernegrette 0:54dde34c33f3 153 }
javiernegrette 0:54dde34c33f3 154
javiernegrette 0:54dde34c33f3 155 led1 =!led1;
javiernegrette 0:54dde34c33f3 156 wait(0.50);
javiernegrette 0:54dde34c33f3 157
javiernegrette 0:54dde34c33f3 158 if(!button2)
javiernegrette 0:54dde34c33f3 159 {
javiernegrette 0:54dde34c33f3 160 if(t.read()>10)
javiernegrette 0:54dde34c33f3 161 {
javiernegrette 0:54dde34c33f3 162 incremento=100;
javiernegrette 0:54dde34c33f3 163 }
javiernegrette 0:54dde34c33f3 164 else if(t.read()>5.5)
javiernegrette 0:54dde34c33f3 165 {
javiernegrette 0:54dde34c33f3 166 incremento=10;
javiernegrette 0:54dde34c33f3 167 }
javiernegrette 0:54dde34c33f3 168
javiernegrette 0:54dde34c33f3 169 led2 =!led2;
javiernegrette 0:54dde34c33f3 170 if(pos==1)
javiernegrette 0:54dde34c33f3 171 {
javiernegrette 0:54dde34c33f3 172 if(spnum-incremento<0)
javiernegrette 0:54dde34c33f3 173 {
javiernegrette 0:54dde34c33f3 174 //No ocurre nada
javiernegrette 0:54dde34c33f3 175 }
javiernegrette 0:54dde34c33f3 176 else
javiernegrette 0:54dde34c33f3 177 {
javiernegrette 0:54dde34c33f3 178 spnum-=incremento;
javiernegrette 0:54dde34c33f3 179 lcd.locate(3,0);
javiernegrette 0:54dde34c33f3 180 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 181 lcd.locate(3,0);
javiernegrette 0:54dde34c33f3 182 lcd.printf("%d", spnum);
javiernegrette 0:54dde34c33f3 183 }
javiernegrette 0:54dde34c33f3 184 }
javiernegrette 0:54dde34c33f3 185 else if(pos==2)
javiernegrette 0:54dde34c33f3 186 {
javiernegrette 0:54dde34c33f3 187 if(kpnum-incremento<0)
javiernegrette 0:54dde34c33f3 188 {
javiernegrette 0:54dde34c33f3 189 //No ocurre nada
javiernegrette 0:54dde34c33f3 190 }
javiernegrette 0:54dde34c33f3 191 else
javiernegrette 0:54dde34c33f3 192 {
javiernegrette 0:54dde34c33f3 193 kpnum-=incremento;
javiernegrette 0:54dde34c33f3 194 lcd.locate(11,0);
javiernegrette 0:54dde34c33f3 195 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 196 lcd.locate(11,0);
javiernegrette 0:54dde34c33f3 197 lcd.printf("%d", kpnum);
javiernegrette 0:54dde34c33f3 198 }
javiernegrette 0:54dde34c33f3 199 }
javiernegrette 0:54dde34c33f3 200 else if(pos==3)
javiernegrette 0:54dde34c33f3 201 {
javiernegrette 0:54dde34c33f3 202 if(kinum-incremento<0)
javiernegrette 0:54dde34c33f3 203 {
javiernegrette 0:54dde34c33f3 204 //No ocurre nada
javiernegrette 0:54dde34c33f3 205 }
javiernegrette 0:54dde34c33f3 206 else
javiernegrette 0:54dde34c33f3 207 {
javiernegrette 0:54dde34c33f3 208 kinum-=incremento;
javiernegrette 0:54dde34c33f3 209 lcd.locate(3,1);
javiernegrette 0:54dde34c33f3 210 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 211 lcd.locate(3,1);
javiernegrette 0:54dde34c33f3 212 lcd.printf("%d", kinum);
javiernegrette 0:54dde34c33f3 213 }
javiernegrette 0:54dde34c33f3 214 }
javiernegrette 0:54dde34c33f3 215 else if(pos==4)
javiernegrette 0:54dde34c33f3 216 {
javiernegrette 0:54dde34c33f3 217 if(kdnum-incremento<0)
javiernegrette 0:54dde34c33f3 218 {
javiernegrette 0:54dde34c33f3 219 //No ocurre nada
javiernegrette 0:54dde34c33f3 220 }
javiernegrette 0:54dde34c33f3 221 else
javiernegrette 0:54dde34c33f3 222 {
javiernegrette 0:54dde34c33f3 223 kdnum-=incremento;
javiernegrette 0:54dde34c33f3 224 lcd.locate(11,1);
javiernegrette 0:54dde34c33f3 225 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 226 lcd.locate(11,1);
javiernegrette 0:54dde34c33f3 227 lcd.printf("%d", kdnum);
javiernegrette 0:54dde34c33f3 228 }
javiernegrette 0:54dde34c33f3 229 }
javiernegrette 0:54dde34c33f3 230 }
javiernegrette 0:54dde34c33f3 231 }
javiernegrette 0:54dde34c33f3 232
javiernegrette 0:54dde34c33f3 233 if (!button3)
javiernegrette 0:54dde34c33f3 234 {
javiernegrette 0:54dde34c33f3 235 led3 =!led3;
javiernegrette 0:54dde34c33f3 236 if(pos==4)
javiernegrette 0:54dde34c33f3 237 {
javiernegrette 0:54dde34c33f3 238 pos=1;
javiernegrette 0:54dde34c33f3 239 lcd.locate(3,0);
javiernegrette 0:54dde34c33f3 240 lcd.printf("%d", spnum);
javiernegrette 0:54dde34c33f3 241 }
javiernegrette 0:54dde34c33f3 242 else if (pos==1)
javiernegrette 0:54dde34c33f3 243 {
javiernegrette 0:54dde34c33f3 244 pos++;
javiernegrette 0:54dde34c33f3 245 lcd.locate(11,0);
javiernegrette 0:54dde34c33f3 246 lcd.printf("%d", kpnum);
javiernegrette 0:54dde34c33f3 247 }
javiernegrette 0:54dde34c33f3 248 else if(pos==2)
javiernegrette 0:54dde34c33f3 249 {
javiernegrette 0:54dde34c33f3 250 pos++;
javiernegrette 0:54dde34c33f3 251 lcd.locate(3,1);
javiernegrette 0:54dde34c33f3 252 lcd.printf("%d", kinum);
javiernegrette 0:54dde34c33f3 253 }
javiernegrette 0:54dde34c33f3 254 else if(pos==3)
javiernegrette 0:54dde34c33f3 255 {
javiernegrette 0:54dde34c33f3 256 pos++;
javiernegrette 0:54dde34c33f3 257 lcd.locate(11,1);
javiernegrette 0:54dde34c33f3 258 lcd.printf("%d", kdnum);
javiernegrette 0:54dde34c33f3 259 }
javiernegrette 0:54dde34c33f3 260 wait(0.25);
javiernegrette 0:54dde34c33f3 261
javiernegrette 0:54dde34c33f3 262 }
javiernegrette 0:54dde34c33f3 263
javiernegrette 0:54dde34c33f3 264 if (button1 && button2)
javiernegrette 0:54dde34c33f3 265 {
javiernegrette 0:54dde34c33f3 266 f=0;
javiernegrette 0:54dde34c33f3 267 t.reset();
javiernegrette 0:54dde34c33f3 268 incremento=1;
javiernegrette 0:54dde34c33f3 269 }
javiernegrette 0:54dde34c33f3 270 if (!button4){
javiernegrette 0:54dde34c33f3 271 break; //sale del bucle si pisan suiche4
javiernegrette 0:54dde34c33f3 272 }
javiernegrette 0:54dde34c33f3 273 }
javiernegrette 0:54dde34c33f3 274
javiernegrette 0:54dde34c33f3 275
javiernegrette 0:54dde34c33f3 276 lcd.writeCommand(C4);//escribimos un comando segun el manual del modulo LCD para quitar cursor bajo
javiernegrette 0:54dde34c33f3 277 lcd.cls(); //borra la pantalla
javiernegrette 0:54dde34c33f3 278 lcd.printf("GUARDAMOS \nVALORES |m|");
javiernegrette 0:54dde34c33f3 279 wait(2);
javiernegrette 0:54dde34c33f3 280
javiernegrette 0:54dde34c33f3 281 // se imprimen los parches del control *****************************************
javiernegrette 0:54dde34c33f3 282 lcd.cls();
javiernegrette 0:54dde34c33f3 283 lcd.printf("Er%d",err);
javiernegrette 0:54dde34c33f3 284 lcd.locate(8,0);
javiernegrette 0:54dde34c33f3 285 lcd.printf("Me%d",med);
javiernegrette 0:54dde34c33f3 286 lcd.locate(0,1);
javiernegrette 0:54dde34c33f3 287 lcd.printf("Sp%d",spnum);
javiernegrette 0:54dde34c33f3 288 lcd.locate(8,1);
javiernegrette 0:54dde34c33f3 289 lcd.printf("Co%d",pid);
javiernegrette 0:54dde34c33f3 290 wait(5);
javiernegrette 0:54dde34c33f3 291
javiernegrette 0:54dde34c33f3 292 // CICLO PRINCIPAL CONTROLADOR PID
javiernegrette 0:54dde34c33f3 293
javiernegrette 0:54dde34c33f3 294 while(1) {
javiernegrette 0:54dde34c33f3 295 med=999*y.read(); //leer puerto analogo y asignar a med
javiernegrette 0:54dde34c33f3 296 err = (spnum-med);
javiernegrette 0:54dde34c33f3 297 ap = kpnum*err;
javiernegrette 0:54dde34c33f3 298
javiernegrette 0:54dde34c33f3 299 // se verifica que la accion integral no sea muy grande
javiernegrette 0:54dde34c33f3 300 if(ai<100) {
javiernegrette 0:54dde34c33f3 301 ai =(kinum*err)+ai; //calculo de la integral del error
javiernegrette 0:54dde34c33f3 302 }
javiernegrette 0:54dde34c33f3 303 else{
javiernegrette 0:54dde34c33f3 304 //Dejo de sumar la accion integral
javiernegrette 0:54dde34c33f3 305 }
javiernegrette 0:54dde34c33f3 306
javiernegrette 0:54dde34c33f3 307 ad = kdnum*(err-err_v); //calculo de la accion derivativa
javiernegrette 0:54dde34c33f3 308 pid = (ap+ai+ad);
javiernegrette 0:54dde34c33f3 309
javiernegrette 0:54dde34c33f3 310 // se actualizan las variables *******************************************
javiernegrette 0:54dde34c33f3 311 err_v = err;
javiernegrette 0:54dde34c33f3 312 // se verifica que pid sea positivo **************************************
javiernegrette 0:54dde34c33f3 313 if(pid<=0){
javiernegrette 0:54dde34c33f3 314 pid=0;
javiernegrette 0:54dde34c33f3 315 }
javiernegrette 0:54dde34c33f3 316 // se verifica que pid sea menor o igual la valor maximo *****************
javiernegrette 0:54dde34c33f3 317 if (pid > 999){
javiernegrette 0:54dde34c33f3 318 pid=999;
javiernegrette 0:54dde34c33f3 319 }
javiernegrette 0:54dde34c33f3 320
javiernegrette 0:54dde34c33f3 321 // se actualizan las variables *******************************************
javiernegrette 0:54dde34c33f3 322 err_v = err;
javiernegrette 0:54dde34c33f3 323
javiernegrette 0:54dde34c33f3 324 //se muestran las variables******************************************
javiernegrette 0:54dde34c33f3 325
javiernegrette 0:54dde34c33f3 326 wait(0.3);
javiernegrette 0:54dde34c33f3 327 lcd.locate(2,0);
javiernegrette 0:54dde34c33f3 328 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 329 lcd.locate(2,0);
javiernegrette 0:54dde34c33f3 330 lcd.printf("%d",err);
javiernegrette 0:54dde34c33f3 331 lcd.locate(10,0);
javiernegrette 0:54dde34c33f3 332 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 333 lcd.locate(10,0);
javiernegrette 0:54dde34c33f3 334 lcd.printf("%d",med);
javiernegrette 0:54dde34c33f3 335 lcd.locate(2,1);
javiernegrette 0:54dde34c33f3 336 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 337 lcd.locate(2,1);
javiernegrette 0:54dde34c33f3 338 lcd.printf("%d",spnum);
javiernegrette 0:54dde34c33f3 339 lcd.locate(10,1);
javiernegrette 0:54dde34c33f3 340 lcd.printf(" ");
javiernegrette 0:54dde34c33f3 341 lcd.locate(10,1);
javiernegrette 0:54dde34c33f3 342 lcd.printf("%d",pid);
javiernegrette 0:54dde34c33f3 343
javiernegrette 0:54dde34c33f3 344
javiernegrette 0:54dde34c33f3 345 //Normalizacion de la salida
javiernegrette 0:54dde34c33f3 346 pidn=pid/999;
javiernegrette 0:54dde34c33f3 347 // se envia el valor pid a puerto analogico de salida (D/A) **************
javiernegrette 0:54dde34c33f3 348 u.write(pidn);
javiernegrette 0:54dde34c33f3 349 // se repite el ciclo
javiernegrette 0:54dde34c33f3 350 }
javiernegrette 0:54dde34c33f3 351
javiernegrette 0:54dde34c33f3 352 }