Teclado para control PID

Dependencies:   Debounced FPointer TextLCD11 keypad mbed

/media/uploads/mandres7/img_0151.jpg /media/uploads/mandres7/img_0153.jpg /media/uploads/mandres7/img_0155.jpg /media/uploads/mandres7/img_0154.jpg

Committer:
mandres7
Date:
Wed Dec 04 20:29:58 2013 +0000
Revision:
2:da30c4b60cf4
Parent:
1:f578cd888e48
Teclado para control PID

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mandres7 0:17aecb7bba09 1 #include "mbed.h"
mandres7 0:17aecb7bba09 2 #include "keypad.h"
mandres7 0:17aecb7bba09 3 #include "TextLCD.h"
mandres7 0:17aecb7bba09 4
mandres7 0:17aecb7bba09 5
mandres7 0:17aecb7bba09 6 TextLCD lcd(PTC10, PTC11, PTC12, PTC13, PTC16, PTC17); // rs, e, d4-d7
mandres7 0:17aecb7bba09 7
mandres7 0:17aecb7bba09 8 AnalogIn Ain(PTC2);
mandres7 0:17aecb7bba09 9 AnalogOut Aout(PTE30);
mandres7 0:17aecb7bba09 10
mandres7 0:17aecb7bba09 11 int C4=0x0C;
mandres7 0:17aecb7bba09 12 int C1=0x0E;
mandres7 0:17aecb7bba09 13 int p=0;
mandres7 0:17aecb7bba09 14
mandres7 0:17aecb7bba09 15 int c=0;
mandres7 0:17aecb7bba09 16 int y=0;
mandres7 0:17aecb7bba09 17 float i; // set point
mandres7 0:17aecb7bba09 18 float j=0; // salida planta
mandres7 0:17aecb7bba09 19 float ji=0; //variable proceso interno
mandres7 0:17aecb7bba09 20 float spi=0; //variable proceso interno
mandres7 0:17aecb7bba09 21 float h=0; // entrada planta
mandres7 0:17aecb7bba09 22 float m=0; // Error
mandres7 0:17aecb7bba09 23 float mv=0;
mandres7 0:17aecb7bba09 24 float g=0;
mandres7 0:17aecb7bba09 25
mandres7 0:17aecb7bba09 26
mandres7 0:17aecb7bba09 27 float ap,ai,ad;
mandres7 0:17aecb7bba09 28 int sp=0;
mandres7 0:17aecb7bba09 29 int kp=0;
mandres7 0:17aecb7bba09 30 int ki=0;
mandres7 0:17aecb7bba09 31 int kd=0;
mandres7 0:17aecb7bba09 32
mandres7 0:17aecb7bba09 33
mandres7 0:17aecb7bba09 34
mandres7 0:17aecb7bba09 35
mandres7 0:17aecb7bba09 36 // Define your own keypad values
mandres7 0:17aecb7bba09 37 char Keytable[] = { '1', '2', '3', '*',
mandres7 0:17aecb7bba09 38 '4', '5', '6', '0',
mandres7 0:17aecb7bba09 39 '7', '8', '9', '#',
mandres7 0:17aecb7bba09 40 'A', 'B', 'C', 'D'
mandres7 0:17aecb7bba09 41 };
mandres7 0:17aecb7bba09 42
mandres7 0:17aecb7bba09 43 int Teclado[] = { 1, 4, 7, 13,
mandres7 0:17aecb7bba09 44 2, 5, 8, 0,
mandres7 0:17aecb7bba09 45 3, 6, 9, 14,
mandres7 0:17aecb7bba09 46 10,11,12, 15
mandres7 0:17aecb7bba09 47 };
mandres7 0:17aecb7bba09 48
mandres7 0:17aecb7bba09 49 uint32_t cbAfterInput(uint32_t key)
mandres7 0:17aecb7bba09 50 {
mandres7 0:17aecb7bba09 51
mandres7 0:17aecb7bba09 52 if (Keytable[key]=='A') {
mandres7 0:17aecb7bba09 53 Teclado[key]=0;
mandres7 0:17aecb7bba09 54 ++c;
mandres7 0:17aecb7bba09 55 }
mandres7 0:17aecb7bba09 56
mandres7 0:17aecb7bba09 57 if(Keytable[key]=='B') {
mandres7 0:17aecb7bba09 58 Teclado[key]=0;
mandres7 0:17aecb7bba09 59 sp=0;
mandres7 0:17aecb7bba09 60 kp=0;
mandres7 0:17aecb7bba09 61 ki=0;
mandres7 0:17aecb7bba09 62 kd=0;
mandres7 0:17aecb7bba09 63 }
mandres7 0:17aecb7bba09 64
mandres7 0:17aecb7bba09 65
mandres7 0:17aecb7bba09 66 if(Keytable[key]=='D'){
mandres7 0:17aecb7bba09 67 Teclado[key]=0;
mandres7 0:17aecb7bba09 68 p=1;
mandres7 0:17aecb7bba09 69 }
mandres7 0:17aecb7bba09 70
mandres7 0:17aecb7bba09 71 ////////////
mandres7 0:17aecb7bba09 72
mandres7 0:17aecb7bba09 73 if (c==0){
mandres7 0:17aecb7bba09 74
mandres7 0:17aecb7bba09 75 sp=sp+Teclado[key];
mandres7 0:17aecb7bba09 76
mandres7 0:17aecb7bba09 77 }
mandres7 0:17aecb7bba09 78
mandres7 0:17aecb7bba09 79 if (c==1) {
mandres7 0:17aecb7bba09 80
mandres7 0:17aecb7bba09 81 kp=kp+Teclado[key];
mandres7 0:17aecb7bba09 82
mandres7 0:17aecb7bba09 83 }
mandres7 0:17aecb7bba09 84 if (c==2) {
mandres7 0:17aecb7bba09 85
mandres7 0:17aecb7bba09 86 ki=ki+Teclado[key];
mandres7 0:17aecb7bba09 87
mandres7 0:17aecb7bba09 88 }
mandres7 0:17aecb7bba09 89 if (c==3) {
mandres7 0:17aecb7bba09 90
mandres7 0:17aecb7bba09 91 kd=kd+Teclado[key];
mandres7 0:17aecb7bba09 92
mandres7 0:17aecb7bba09 93 }
mandres7 0:17aecb7bba09 94
mandres7 0:17aecb7bba09 95 ////////////
mandres7 0:17aecb7bba09 96
mandres7 0:17aecb7bba09 97
mandres7 0:17aecb7bba09 98 return 0;
mandres7 0:17aecb7bba09 99 }//fin unit32_t
mandres7 0:17aecb7bba09 100
mandres7 0:17aecb7bba09 101
mandres7 0:17aecb7bba09 102
mandres7 0:17aecb7bba09 103 int main() {
mandres7 0:17aecb7bba09 104 Keypad keypad(PTA2,PTD4,PTD3,PTD1,PTD2,PTD0,PTD5,PTA13);
mandres7 0:17aecb7bba09 105 keypad.CallAfterInput(&cbAfterInput);
mandres7 0:17aecb7bba09 106 keypad.Start();
mandres7 0:17aecb7bba09 107
mandres7 0:17aecb7bba09 108 lcd.cls();
mandres7 0:17aecb7bba09 109 lcd.printf("Sp: %d",sp);
mandres7 0:17aecb7bba09 110 lcd.locate(8,0);
mandres7 0:17aecb7bba09 111 lcd.printf("Kp: %d",kp);
mandres7 0:17aecb7bba09 112 lcd.locate(0,1);
mandres7 0:17aecb7bba09 113 lcd.printf("Ki: %d",ki);
mandres7 0:17aecb7bba09 114 lcd.locate(8,1);
mandres7 0:17aecb7bba09 115 lcd.printf("Kd: %d",kd);
mandres7 0:17aecb7bba09 116 lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
mandres7 0:17aecb7bba09 117 lcd.locate(0,0);
mandres7 0:17aecb7bba09 118 lcd.printf("Sp: %d",sp);
mandres7 0:17aecb7bba09 119
mandres7 0:17aecb7bba09 120 while (1) {
mandres7 0:17aecb7bba09 121
mandres7 0:17aecb7bba09 122
mandres7 0:17aecb7bba09 123 if (c==0){
mandres7 0:17aecb7bba09 124 lcd.locate(3,0);
mandres7 0:17aecb7bba09 125 lcd.putc(0xFE);
mandres7 0:17aecb7bba09 126 lcd.locate(4,0);
mandres7 1:f578cd888e48 127 lcd.printf("%d",sp);
mandres7 1:f578cd888e48 128
mandres7 1:f578cd888e48 129 //NEW !! (not zeros in -- process)
mandres7 1:f578cd888e48 130 if(sp<10){
mandres7 1:f578cd888e48 131 lcd.locate(5,0);
mandres7 1:f578cd888e48 132 lcd.putc(0xFE);
mandres7 1:f578cd888e48 133 }
mandres7 1:f578cd888e48 134
mandres7 1:f578cd888e48 135 if(sp<100){
mandres7 1:f578cd888e48 136 lcd.locate(6,0);
mandres7 1:f578cd888e48 137 lcd.putc(0xFE);
mandres7 1:f578cd888e48 138 }
mandres7 1:f578cd888e48 139
mandres7 1:f578cd888e48 140 lcd.locate(4,0);
mandres7 1:f578cd888e48 141 lcd.printf("%d", sp);
mandres7 1:f578cd888e48 142 //wait(0.1);
mandres7 0:17aecb7bba09 143
mandres7 1:f578cd888e48 144 //
mandres7 1:f578cd888e48 145
mandres7 0:17aecb7bba09 146 }
mandres7 0:17aecb7bba09 147
mandres7 0:17aecb7bba09 148 if (c==1){
mandres7 0:17aecb7bba09 149 lcd.locate(11,0);
mandres7 0:17aecb7bba09 150 lcd.putc(0xFE);
mandres7 0:17aecb7bba09 151 lcd.locate(12,0);
mandres7 0:17aecb7bba09 152 lcd.printf("%d",kp);
mandres7 0:17aecb7bba09 153
mandres7 1:f578cd888e48 154 //NEW !! (not zeros in -- process)
mandres7 1:f578cd888e48 155 if(kp<10){
mandres7 1:f578cd888e48 156 lcd.locate(13,0);
mandres7 1:f578cd888e48 157 lcd.putc(0xFE);
mandres7 1:f578cd888e48 158 }
mandres7 1:f578cd888e48 159
mandres7 2:da30c4b60cf4 160 if(kp<100){
mandres7 1:f578cd888e48 161 lcd.locate(14,0);
mandres7 1:f578cd888e48 162 lcd.putc(0xFE);
mandres7 1:f578cd888e48 163 }
mandres7 1:f578cd888e48 164
mandres7 1:f578cd888e48 165 lcd.locate(12,0);
mandres7 1:f578cd888e48 166 lcd.printf("%d", kp);
mandres7 1:f578cd888e48 167 //wait(0.1);
mandres7 1:f578cd888e48 168
mandres7 1:f578cd888e48 169 //
mandres7 1:f578cd888e48 170
mandres7 0:17aecb7bba09 171 }
mandres7 0:17aecb7bba09 172
mandres7 1:f578cd888e48 173 if (c==2) {
mandres7 0:17aecb7bba09 174 lcd.locate(3,1);
mandres7 0:17aecb7bba09 175 lcd.putc(0xFE);
mandres7 0:17aecb7bba09 176 lcd.locate(4,1);
mandres7 1:f578cd888e48 177 lcd.printf("%d",ki);
mandres7 1:f578cd888e48 178
mandres7 1:f578cd888e48 179 //NEW !! (not zeros in -- process)
mandres7 1:f578cd888e48 180 if(ki<10){
mandres7 1:f578cd888e48 181 lcd.locate(5,1);
mandres7 1:f578cd888e48 182 lcd.putc(0xFE);
mandres7 1:f578cd888e48 183 }
mandres7 1:f578cd888e48 184
mandres7 1:f578cd888e48 185 if(ki<100){
mandres7 1:f578cd888e48 186 lcd.locate(6,1);
mandres7 1:f578cd888e48 187 lcd.putc(0xFE);
mandres7 1:f578cd888e48 188 }
mandres7 1:f578cd888e48 189
mandres7 1:f578cd888e48 190 lcd.locate(4,1);
mandres7 1:f578cd888e48 191 lcd.printf("%d", ki);
mandres7 1:f578cd888e48 192 //wait(0.2);
mandres7 1:f578cd888e48 193
mandres7 1:f578cd888e48 194 //
mandres7 1:f578cd888e48 195
mandres7 0:17aecb7bba09 196 }
mandres7 1:f578cd888e48 197 if (c==3) {
mandres7 0:17aecb7bba09 198 lcd.locate(11,1);
mandres7 0:17aecb7bba09 199 lcd.putc(0xFE);
mandres7 0:17aecb7bba09 200 lcd.locate(12,1);
mandres7 0:17aecb7bba09 201 lcd.printf("%d",kd);
mandres7 0:17aecb7bba09 202
mandres7 1:f578cd888e48 203 //NEW !! (not zeros in -- process)
mandres7 1:f578cd888e48 204 if(kd<10){
mandres7 1:f578cd888e48 205 lcd.locate(13,1);
mandres7 1:f578cd888e48 206 lcd.putc(0xFE);
mandres7 1:f578cd888e48 207 }
mandres7 1:f578cd888e48 208
mandres7 1:f578cd888e48 209 if(kd<100){
mandres7 1:f578cd888e48 210 lcd.locate(14,1);
mandres7 1:f578cd888e48 211 lcd.putc(0xFE);
mandres7 1:f578cd888e48 212 }
mandres7 1:f578cd888e48 213
mandres7 1:f578cd888e48 214 lcd.locate(12,1);
mandres7 1:f578cd888e48 215 lcd.printf("%d", kd);
mandres7 1:f578cd888e48 216 //wait(0.2);
mandres7 1:f578cd888e48 217 }
mandres7 0:17aecb7bba09 218
mandres7 0:17aecb7bba09 219 if(c==4 || c>4){
mandres7 0:17aecb7bba09 220 c=0;
mandres7 0:17aecb7bba09 221 }
mandres7 0:17aecb7bba09 222
mandres7 0:17aecb7bba09 223 if(p==1){
mandres7 0:17aecb7bba09 224 c=0;
mandres7 0:17aecb7bba09 225 break;
mandres7 0:17aecb7bba09 226 }
mandres7 0:17aecb7bba09 227
mandres7 0:17aecb7bba09 228 }
mandres7 0:17aecb7bba09 229
mandres7 0:17aecb7bba09 230
mandres7 0:17aecb7bba09 231 lcd.writeCommand(C4);//escribimos un comando segun el manual del modulo LCD para quitar cursor bajo
mandres7 0:17aecb7bba09 232 lcd.cls(); //borra la pantalla
mandres7 0:17aecb7bba09 233 lcd.printf(" GUARDADOS!");
mandres7 0:17aecb7bba09 234 wait(2);
mandres7 0:17aecb7bba09 235 lcd.cls();
mandres7 0:17aecb7bba09 236 lcd.printf(" INICIA EL PID");
mandres7 0:17aecb7bba09 237 wait(2);
mandres7 0:17aecb7bba09 238 // se imprimen los parches del control *****************************************
mandres7 0:17aecb7bba09 239
mandres7 0:17aecb7bba09 240 i=sp/999;
mandres7 0:17aecb7bba09 241 lcd.cls();
mandres7 0:17aecb7bba09 242 lcd.printf("Er:%.2f",m);
mandres7 0:17aecb7bba09 243 lcd.locate(8,0);
mandres7 0:17aecb7bba09 244 lcd.printf("Me:%.2f",j);
mandres7 0:17aecb7bba09 245 lcd.locate(0,1);
mandres7 0:17aecb7bba09 246 lcd.printf("Sp:%d",sp);
mandres7 0:17aecb7bba09 247 lcd.locate(8,1);
mandres7 0:17aecb7bba09 248 lcd.printf("Co:%.1f",h);
mandres7 0:17aecb7bba09 249 wait(2);
mandres7 0:17aecb7bba09 250
mandres7 0:17aecb7bba09 251 //
mandres7 0:17aecb7bba09 252 while(1) {
mandres7 0:17aecb7bba09 253
mandres7 0:17aecb7bba09 254 spi=sp*(3.3/999);
mandres7 0:17aecb7bba09 255
mandres7 0:17aecb7bba09 256 //wait(0.3);
mandres7 0:17aecb7bba09 257 i=sp/999;
mandres7 0:17aecb7bba09 258 if(i<=1){
mandres7 0:17aecb7bba09 259
mandres7 0:17aecb7bba09 260 j=Ain;
mandres7 0:17aecb7bba09 261 ji=j*3.3;
mandres7 0:17aecb7bba09 262 m=(spi-ji);
mandres7 0:17aecb7bba09 263 //n=m*100;
mandres7 0:17aecb7bba09 264 ap=kp*m;
mandres7 0:17aecb7bba09 265 ai=(ki*m)+ai;
mandres7 0:17aecb7bba09 266
mandres7 0:17aecb7bba09 267 ad=kd*(m-mv);
mandres7 0:17aecb7bba09 268 h=ap+ai+ad;
mandres7 0:17aecb7bba09 269
mandres7 0:17aecb7bba09 270 if (h>999){
mandres7 0:17aecb7bba09 271 h=999;
mandres7 0:17aecb7bba09 272 }
mandres7 0:17aecb7bba09 273 if (h<0){
mandres7 0:17aecb7bba09 274 h=0;
mandres7 0:17aecb7bba09 275 }
mandres7 0:17aecb7bba09 276
mandres7 0:17aecb7bba09 277 g=(h/999);
mandres7 0:17aecb7bba09 278
mandres7 0:17aecb7bba09 279 Aout=g;
mandres7 0:17aecb7bba09 280 wait(0.22);
mandres7 0:17aecb7bba09 281
mandres7 0:17aecb7bba09 282
mandres7 0:17aecb7bba09 283 lcd.cls();
mandres7 0:17aecb7bba09 284 lcd.printf("Er:%.2f",m);
mandres7 0:17aecb7bba09 285 lcd.locate(8,0);
mandres7 0:17aecb7bba09 286 lcd.printf("Me:%.2f",j);
mandres7 0:17aecb7bba09 287 lcd.locate(0,1);
mandres7 0:17aecb7bba09 288 lcd.printf("Sp:%d",sp);
mandres7 0:17aecb7bba09 289 lcd.locate(8,1);
mandres7 0:17aecb7bba09 290 lcd.printf("Co:%.1f",h);
mandres7 0:17aecb7bba09 291 }
mandres7 0:17aecb7bba09 292
mandres7 0:17aecb7bba09 293
mandres7 0:17aecb7bba09 294 mv=m;
mandres7 0:17aecb7bba09 295 } //While
mandres7 0:17aecb7bba09 296 //
mandres7 0:17aecb7bba09 297
mandres7 0:17aecb7bba09 298 }//int main