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 19:29:51 2013 +0000
Revision:
0:17aecb7bba09
Child:
1:f578cd888e48
Tarea Numero 5

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
mandres7 0:17aecb7bba09 125 lcd.locate(3,0);
mandres7 0:17aecb7bba09 126 lcd.putc(0xFE);
mandres7 0:17aecb7bba09 127 lcd.locate(4,0);
mandres7 0:17aecb7bba09 128 lcd.printf("%d",sp);
mandres7 0:17aecb7bba09 129
mandres7 0:17aecb7bba09 130 }
mandres7 0:17aecb7bba09 131
mandres7 0:17aecb7bba09 132 if (c==1){
mandres7 0:17aecb7bba09 133
mandres7 0:17aecb7bba09 134 lcd.locate(11,0);
mandres7 0:17aecb7bba09 135 lcd.putc(0xFE);
mandres7 0:17aecb7bba09 136 lcd.locate(12,0);
mandres7 0:17aecb7bba09 137 lcd.printf("%d",kp);
mandres7 0:17aecb7bba09 138
mandres7 0:17aecb7bba09 139 }
mandres7 0:17aecb7bba09 140
mandres7 0:17aecb7bba09 141 if (c==2) {
mandres7 0:17aecb7bba09 142
mandres7 0:17aecb7bba09 143 lcd.locate(3,1);
mandres7 0:17aecb7bba09 144 lcd.putc(0xFE);
mandres7 0:17aecb7bba09 145 lcd.locate(4,1);
mandres7 0:17aecb7bba09 146 lcd.printf("%d",ki);
mandres7 0:17aecb7bba09 147
mandres7 0:17aecb7bba09 148 }
mandres7 0:17aecb7bba09 149 if (c==3) {
mandres7 0:17aecb7bba09 150
mandres7 0:17aecb7bba09 151 lcd.locate(11,1);
mandres7 0:17aecb7bba09 152 lcd.putc(0xFE);
mandres7 0:17aecb7bba09 153 lcd.locate(12,1);
mandres7 0:17aecb7bba09 154 lcd.printf("%d",kd);
mandres7 0:17aecb7bba09 155
mandres7 0:17aecb7bba09 156 }
mandres7 0:17aecb7bba09 157
mandres7 0:17aecb7bba09 158 if(c==4 || c>4){
mandres7 0:17aecb7bba09 159 c=0;
mandres7 0:17aecb7bba09 160 }
mandres7 0:17aecb7bba09 161
mandres7 0:17aecb7bba09 162 if(p==1){
mandres7 0:17aecb7bba09 163 c=0;
mandres7 0:17aecb7bba09 164 break;
mandres7 0:17aecb7bba09 165 }
mandres7 0:17aecb7bba09 166
mandres7 0:17aecb7bba09 167 }
mandres7 0:17aecb7bba09 168
mandres7 0:17aecb7bba09 169
mandres7 0:17aecb7bba09 170 lcd.writeCommand(C4);//escribimos un comando segun el manual del modulo LCD para quitar cursor bajo
mandres7 0:17aecb7bba09 171 lcd.cls(); //borra la pantalla
mandres7 0:17aecb7bba09 172 lcd.printf(" GUARDADOS!");
mandres7 0:17aecb7bba09 173 wait(2);
mandres7 0:17aecb7bba09 174 lcd.cls();
mandres7 0:17aecb7bba09 175 lcd.printf(" INICIA EL PID");
mandres7 0:17aecb7bba09 176 wait(2);
mandres7 0:17aecb7bba09 177 // se imprimen los parches del control *****************************************
mandres7 0:17aecb7bba09 178
mandres7 0:17aecb7bba09 179 i=sp/999;
mandres7 0:17aecb7bba09 180 lcd.cls();
mandres7 0:17aecb7bba09 181 lcd.printf("Er:%.2f",m);
mandres7 0:17aecb7bba09 182 lcd.locate(8,0);
mandres7 0:17aecb7bba09 183 lcd.printf("Me:%.2f",j);
mandres7 0:17aecb7bba09 184 lcd.locate(0,1);
mandres7 0:17aecb7bba09 185 lcd.printf("Sp:%d",sp);
mandres7 0:17aecb7bba09 186 lcd.locate(8,1);
mandres7 0:17aecb7bba09 187 lcd.printf("Co:%.1f",h);
mandres7 0:17aecb7bba09 188 wait(2);
mandres7 0:17aecb7bba09 189
mandres7 0:17aecb7bba09 190 //
mandres7 0:17aecb7bba09 191 while(1) {
mandres7 0:17aecb7bba09 192
mandres7 0:17aecb7bba09 193 spi=sp*(3.3/999);
mandres7 0:17aecb7bba09 194
mandres7 0:17aecb7bba09 195 //wait(0.3);
mandres7 0:17aecb7bba09 196 i=sp/999;
mandres7 0:17aecb7bba09 197 if(i<=1){
mandres7 0:17aecb7bba09 198
mandres7 0:17aecb7bba09 199 j=Ain;
mandres7 0:17aecb7bba09 200 ji=j*3.3;
mandres7 0:17aecb7bba09 201 m=(spi-ji);
mandres7 0:17aecb7bba09 202 //n=m*100;
mandres7 0:17aecb7bba09 203 ap=kp*m;
mandres7 0:17aecb7bba09 204 ai=(ki*m)+ai;
mandres7 0:17aecb7bba09 205
mandres7 0:17aecb7bba09 206 ad=kd*(m-mv);
mandres7 0:17aecb7bba09 207 h=ap+ai+ad;
mandres7 0:17aecb7bba09 208
mandres7 0:17aecb7bba09 209 if (h>999){
mandres7 0:17aecb7bba09 210 h=999;
mandres7 0:17aecb7bba09 211 }
mandres7 0:17aecb7bba09 212 if (h<0){
mandres7 0:17aecb7bba09 213 h=0;
mandres7 0:17aecb7bba09 214 }
mandres7 0:17aecb7bba09 215
mandres7 0:17aecb7bba09 216 g=(h/999);
mandres7 0:17aecb7bba09 217
mandres7 0:17aecb7bba09 218 Aout=g;
mandres7 0:17aecb7bba09 219 wait(0.22);
mandres7 0:17aecb7bba09 220
mandres7 0:17aecb7bba09 221
mandres7 0:17aecb7bba09 222 lcd.cls();
mandres7 0:17aecb7bba09 223 lcd.printf("Er:%.2f",m);
mandres7 0:17aecb7bba09 224 lcd.locate(8,0);
mandres7 0:17aecb7bba09 225 lcd.printf("Me:%.2f",j);
mandres7 0:17aecb7bba09 226 lcd.locate(0,1);
mandres7 0:17aecb7bba09 227 lcd.printf("Sp:%d",sp);
mandres7 0:17aecb7bba09 228 lcd.locate(8,1);
mandres7 0:17aecb7bba09 229 lcd.printf("Co:%.1f",h);
mandres7 0:17aecb7bba09 230 }
mandres7 0:17aecb7bba09 231
mandres7 0:17aecb7bba09 232
mandres7 0:17aecb7bba09 233 mv=m;
mandres7 0:17aecb7bba09 234 } //While
mandres7 0:17aecb7bba09 235 //
mandres7 0:17aecb7bba09 236
mandres7 0:17aecb7bba09 237 }//int main