
El programa funciona de la siguiente manera, las teclas A, B, C, D, * y # se ulizarán como funciones del teclado matricial para la perfecta ubicación de parámetros, estos se ingresarán en forma de cadena y luego se transformarán a al numero ingresado en los diferentes datos de la cadena.
Dependencies: FPointer TextLCDlib mbed
Fork of keypad by
main.cpp@10:66b580afa3ea, 2013-12-07 (annotated)
- Committer:
- caaruizze
- Date:
- Sat Dec 07 11:31:27 2013 +0000
- Revision:
- 10:66b580afa3ea
Programa para ingresar par?mentros a un controlador PID por medio de un teclado matricial 4x4 y controlar el voltaje en una planta de primer grado simulada por un capacitor de 33uF y una resistencia de 39K
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
caaruizze | 10:66b580afa3ea | 1 | #include "mbed.h" |
caaruizze | 10:66b580afa3ea | 2 | #include "keypad.h" |
caaruizze | 10:66b580afa3ea | 3 | #include "TextLCD.h" |
caaruizze | 10:66b580afa3ea | 4 | |
caaruizze | 10:66b580afa3ea | 5 | //Utilizar funciones del teclado |
caaruizze | 10:66b580afa3ea | 6 | #define KEYLEN 4 //tamaño del vector |
caaruizze | 10:66b580afa3ea | 7 | #define ENDKEY 15//Guardar datos < que 3 cifras |
caaruizze | 10:66b580afa3ea | 8 | #define BORKEY 7//Borrar datos |
caaruizze | 10:66b580afa3ea | 9 | #define PASKEY 12//Pasar de parametro |
caaruizze | 10:66b580afa3ea | 10 | #define MENKEY 14//Guardar datos |
caaruizze | 10:66b580afa3ea | 11 | //Se guardan los aprametros como una cadena de datos para luego convertirlos a un numero de 3 cifras |
caaruizze | 10:66b580afa3ea | 12 | char SP[KEYLEN]; |
caaruizze | 10:66b580afa3ea | 13 | char KP[KEYLEN]; |
caaruizze | 10:66b580afa3ea | 14 | char KI[KEYLEN]; |
caaruizze | 10:66b580afa3ea | 15 | char KD[KEYLEN]; |
caaruizze | 10:66b580afa3ea | 16 | //Se definen las variables a utilizar |
caaruizze | 10:66b580afa3ea | 17 | int Index = 0; |
caaruizze | 10:66b580afa3ea | 18 | int p=0; |
caaruizze | 10:66b580afa3ea | 19 | int i=0; |
caaruizze | 10:66b580afa3ea | 20 | int c=1; |
caaruizze | 10:66b580afa3ea | 21 | int sp=0; |
caaruizze | 10:66b580afa3ea | 22 | int kp=0; |
caaruizze | 10:66b580afa3ea | 23 | int ki=0; |
caaruizze | 10:66b580afa3ea | 24 | int kd=0; |
caaruizze | 10:66b580afa3ea | 25 | |
caaruizze | 10:66b580afa3ea | 26 | //Se DEclara los puertos de la pantalla LCD |
caaruizze | 10:66b580afa3ea | 27 | TextLCD lcd(PTB10,PTB11,PTE2,PTE3,PTE4,PTE5); |
caaruizze | 10:66b580afa3ea | 28 | // Se Declaran los puertos PTC2 PTE30 |
caaruizze | 10:66b580afa3ea | 29 | AnalogIn me(PTC2); |
caaruizze | 10:66b580afa3ea | 30 | AnalogOut co(PTE30); |
caaruizze | 10:66b580afa3ea | 31 | |
caaruizze | 10:66b580afa3ea | 32 | |
caaruizze | 10:66b580afa3ea | 33 | // se declara el teclado y el arreglo |
caaruizze | 10:66b580afa3ea | 34 | int teclado[] = { 1,2,3,0, |
caaruizze | 10:66b580afa3ea | 35 | 4,5,6,0, |
caaruizze | 10:66b580afa3ea | 36 | 7,8,9,0, |
caaruizze | 10:66b580afa3ea | 37 | 0,0,0,0}; |
caaruizze | 10:66b580afa3ea | 38 | |
caaruizze | 10:66b580afa3ea | 39 | |
caaruizze | 10:66b580afa3ea | 40 | //Comienza programa: |
caaruizze | 10:66b580afa3ea | 41 | uint32_t cbAfterInput(uint32_t tecla) { |
caaruizze | 10:66b580afa3ea | 42 | bool finish = false; |
caaruizze | 10:66b580afa3ea | 43 | |
caaruizze | 10:66b580afa3ea | 44 | |
caaruizze | 10:66b580afa3ea | 45 | if (Index==0){ |
caaruizze | 10:66b580afa3ea | 46 | if (tecla==PASKEY){ |
caaruizze | 10:66b580afa3ea | 47 | p++; |
caaruizze | 10:66b580afa3ea | 48 | |
caaruizze | 10:66b580afa3ea | 49 | if (p==0){ |
caaruizze | 10:66b580afa3ea | 50 | lcd.locate(2,0); |
caaruizze | 10:66b580afa3ea | 51 | lcd.printf(":"); |
caaruizze | 10:66b580afa3ea | 52 | } |
caaruizze | 10:66b580afa3ea | 53 | if (p==1){ |
caaruizze | 10:66b580afa3ea | 54 | lcd.locate(10,0); |
caaruizze | 10:66b580afa3ea | 55 | lcd.printf(":"); |
caaruizze | 10:66b580afa3ea | 56 | |
caaruizze | 10:66b580afa3ea | 57 | } |
caaruizze | 10:66b580afa3ea | 58 | if (p==2){ |
caaruizze | 10:66b580afa3ea | 59 | lcd.locate(2,1); |
caaruizze | 10:66b580afa3ea | 60 | lcd.printf(":"); |
caaruizze | 10:66b580afa3ea | 61 | } |
caaruizze | 10:66b580afa3ea | 62 | if (p==3){ |
caaruizze | 10:66b580afa3ea | 63 | lcd.locate(10,1); |
caaruizze | 10:66b580afa3ea | 64 | lcd.printf(":"); |
caaruizze | 10:66b580afa3ea | 65 | } |
caaruizze | 10:66b580afa3ea | 66 | if (p==4){ |
caaruizze | 10:66b580afa3ea | 67 | lcd.locate(2,0); |
caaruizze | 10:66b580afa3ea | 68 | lcd.printf(":"); |
caaruizze | 10:66b580afa3ea | 69 | p=0; |
caaruizze | 10:66b580afa3ea | 70 | } |
caaruizze | 10:66b580afa3ea | 71 | |
caaruizze | 10:66b580afa3ea | 72 | |
caaruizze | 10:66b580afa3ea | 73 | } |
caaruizze | 10:66b580afa3ea | 74 | } |
caaruizze | 10:66b580afa3ea | 75 | |
caaruizze | 10:66b580afa3ea | 76 | if(p==0){ |
caaruizze | 10:66b580afa3ea | 77 | |
caaruizze | 10:66b580afa3ea | 78 | |
caaruizze | 10:66b580afa3ea | 79 | if (Index < KEYLEN - 1) |
caaruizze | 10:66b580afa3ea | 80 | { |
caaruizze | 10:66b580afa3ea | 81 | if ((tecla != ENDKEY) & (tecla != BORKEY) & (tecla != PASKEY)){ |
caaruizze | 10:66b580afa3ea | 82 | SP[Index] = teclado[tecla]; |
caaruizze | 10:66b580afa3ea | 83 | Index++; |
caaruizze | 10:66b580afa3ea | 84 | c--; |
caaruizze | 10:66b580afa3ea | 85 | if (c==0){ |
caaruizze | 10:66b580afa3ea | 86 | lcd.locate(3,0); |
caaruizze | 10:66b580afa3ea | 87 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 88 | c=3; |
caaruizze | 10:66b580afa3ea | 89 | } |
caaruizze | 10:66b580afa3ea | 90 | lcd.locate(3+i,0); |
caaruizze | 10:66b580afa3ea | 91 | lcd.printf("%d",SP[i]); |
caaruizze | 10:66b580afa3ea | 92 | i++; |
caaruizze | 10:66b580afa3ea | 93 | |
caaruizze | 10:66b580afa3ea | 94 | } |
caaruizze | 10:66b580afa3ea | 95 | |
caaruizze | 10:66b580afa3ea | 96 | if (tecla == ENDKEY){ |
caaruizze | 10:66b580afa3ea | 97 | finish = true; |
caaruizze | 10:66b580afa3ea | 98 | c=1; |
caaruizze | 10:66b580afa3ea | 99 | } |
caaruizze | 10:66b580afa3ea | 100 | |
caaruizze | 10:66b580afa3ea | 101 | if (tecla == BORKEY){ |
caaruizze | 10:66b580afa3ea | 102 | memset(&SP, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 103 | Index = 0; |
caaruizze | 10:66b580afa3ea | 104 | i=0; |
caaruizze | 10:66b580afa3ea | 105 | lcd.locate(3,0); |
caaruizze | 10:66b580afa3ea | 106 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 107 | c=1; |
caaruizze | 10:66b580afa3ea | 108 | lcd.locate(2,0); |
caaruizze | 10:66b580afa3ea | 109 | lcd.printf("="); |
caaruizze | 10:66b580afa3ea | 110 | } |
caaruizze | 10:66b580afa3ea | 111 | |
caaruizze | 10:66b580afa3ea | 112 | } |
caaruizze | 10:66b580afa3ea | 113 | |
caaruizze | 10:66b580afa3ea | 114 | if (finish || (Index == KEYLEN - 1)) { |
caaruizze | 10:66b580afa3ea | 115 | sp=0; |
caaruizze | 10:66b580afa3ea | 116 | if (i==3){ |
caaruizze | 10:66b580afa3ea | 117 | sp=(100*SP[0])+(10*SP[1])+(SP[2]); |
caaruizze | 10:66b580afa3ea | 118 | } |
caaruizze | 10:66b580afa3ea | 119 | if (i==2){ |
caaruizze | 10:66b580afa3ea | 120 | sp=(10*SP[0])+(1*SP[1]); |
caaruizze | 10:66b580afa3ea | 121 | } |
caaruizze | 10:66b580afa3ea | 122 | if (i==1){ |
caaruizze | 10:66b580afa3ea | 123 | sp=SP[0]; |
caaruizze | 10:66b580afa3ea | 124 | } |
caaruizze | 10:66b580afa3ea | 125 | lcd.locate(3,0); |
caaruizze | 10:66b580afa3ea | 126 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 127 | |
caaruizze | 10:66b580afa3ea | 128 | lcd.locate(3,0); |
caaruizze | 10:66b580afa3ea | 129 | lcd.printf("%d",sp); |
caaruizze | 10:66b580afa3ea | 130 | memset(&SP, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 131 | Index = 0; |
caaruizze | 10:66b580afa3ea | 132 | i=0; |
caaruizze | 10:66b580afa3ea | 133 | |
caaruizze | 10:66b580afa3ea | 134 | } |
caaruizze | 10:66b580afa3ea | 135 | } |
caaruizze | 10:66b580afa3ea | 136 | |
caaruizze | 10:66b580afa3ea | 137 | if(p==1){ |
caaruizze | 10:66b580afa3ea | 138 | |
caaruizze | 10:66b580afa3ea | 139 | |
caaruizze | 10:66b580afa3ea | 140 | |
caaruizze | 10:66b580afa3ea | 141 | if (Index < KEYLEN - 1) |
caaruizze | 10:66b580afa3ea | 142 | { |
caaruizze | 10:66b580afa3ea | 143 | if ((tecla != ENDKEY) & (tecla != BORKEY) & (tecla != PASKEY)){ |
caaruizze | 10:66b580afa3ea | 144 | KP[Index] = teclado[tecla]; |
caaruizze | 10:66b580afa3ea | 145 | Index++; |
caaruizze | 10:66b580afa3ea | 146 | c--; |
caaruizze | 10:66b580afa3ea | 147 | if (c==0){ |
caaruizze | 10:66b580afa3ea | 148 | lcd.locate(11,0); |
caaruizze | 10:66b580afa3ea | 149 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 150 | c=3; |
caaruizze | 10:66b580afa3ea | 151 | } |
caaruizze | 10:66b580afa3ea | 152 | lcd.locate(11+i,0); |
caaruizze | 10:66b580afa3ea | 153 | lcd.printf("%d",KP[i]); |
caaruizze | 10:66b580afa3ea | 154 | i++; |
caaruizze | 10:66b580afa3ea | 155 | |
caaruizze | 10:66b580afa3ea | 156 | } |
caaruizze | 10:66b580afa3ea | 157 | |
caaruizze | 10:66b580afa3ea | 158 | if (tecla == ENDKEY){ |
caaruizze | 10:66b580afa3ea | 159 | finish = true; |
caaruizze | 10:66b580afa3ea | 160 | c=1; |
caaruizze | 10:66b580afa3ea | 161 | } |
caaruizze | 10:66b580afa3ea | 162 | |
caaruizze | 10:66b580afa3ea | 163 | if (tecla == BORKEY){ |
caaruizze | 10:66b580afa3ea | 164 | memset(&KP, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 165 | Index = 0; |
caaruizze | 10:66b580afa3ea | 166 | i=0; |
caaruizze | 10:66b580afa3ea | 167 | lcd.locate(11,0); |
caaruizze | 10:66b580afa3ea | 168 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 169 | c=1; |
caaruizze | 10:66b580afa3ea | 170 | lcd.locate(10,0); |
caaruizze | 10:66b580afa3ea | 171 | lcd.printf("="); |
caaruizze | 10:66b580afa3ea | 172 | } |
caaruizze | 10:66b580afa3ea | 173 | |
caaruizze | 10:66b580afa3ea | 174 | } |
caaruizze | 10:66b580afa3ea | 175 | |
caaruizze | 10:66b580afa3ea | 176 | if (finish || (Index == KEYLEN - 1)) { |
caaruizze | 10:66b580afa3ea | 177 | kp=0; |
caaruizze | 10:66b580afa3ea | 178 | if (i==3){ |
caaruizze | 10:66b580afa3ea | 179 | kp=(100*KP[0])+(10*KP[1])+(KP[2]); |
caaruizze | 10:66b580afa3ea | 180 | } |
caaruizze | 10:66b580afa3ea | 181 | if (i==2){ |
caaruizze | 10:66b580afa3ea | 182 | kp=(10*KP[0])+(1*KP[1]); |
caaruizze | 10:66b580afa3ea | 183 | } |
caaruizze | 10:66b580afa3ea | 184 | if (i==1){ |
caaruizze | 10:66b580afa3ea | 185 | kp=KP[0]; |
caaruizze | 10:66b580afa3ea | 186 | } |
caaruizze | 10:66b580afa3ea | 187 | lcd.locate(11,0); |
caaruizze | 10:66b580afa3ea | 188 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 189 | |
caaruizze | 10:66b580afa3ea | 190 | lcd.locate(11,0); |
caaruizze | 10:66b580afa3ea | 191 | lcd.printf("%d",kp); |
caaruizze | 10:66b580afa3ea | 192 | memset(&KP, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 193 | Index = 0; |
caaruizze | 10:66b580afa3ea | 194 | i=0; |
caaruizze | 10:66b580afa3ea | 195 | |
caaruizze | 10:66b580afa3ea | 196 | } |
caaruizze | 10:66b580afa3ea | 197 | } |
caaruizze | 10:66b580afa3ea | 198 | if(p==2){ |
caaruizze | 10:66b580afa3ea | 199 | |
caaruizze | 10:66b580afa3ea | 200 | |
caaruizze | 10:66b580afa3ea | 201 | |
caaruizze | 10:66b580afa3ea | 202 | if (Index < KEYLEN - 1) |
caaruizze | 10:66b580afa3ea | 203 | { |
caaruizze | 10:66b580afa3ea | 204 | if ((tecla != ENDKEY) & (tecla != BORKEY) & (tecla != PASKEY)){ |
caaruizze | 10:66b580afa3ea | 205 | KI[Index] = teclado[tecla]; |
caaruizze | 10:66b580afa3ea | 206 | Index++; |
caaruizze | 10:66b580afa3ea | 207 | c--; |
caaruizze | 10:66b580afa3ea | 208 | if (c==0){ |
caaruizze | 10:66b580afa3ea | 209 | lcd.locate(3,1); |
caaruizze | 10:66b580afa3ea | 210 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 211 | c=3; |
caaruizze | 10:66b580afa3ea | 212 | } |
caaruizze | 10:66b580afa3ea | 213 | lcd.locate(3+i,1); |
caaruizze | 10:66b580afa3ea | 214 | lcd.printf("%d",KI[i]); |
caaruizze | 10:66b580afa3ea | 215 | i++; |
caaruizze | 10:66b580afa3ea | 216 | |
caaruizze | 10:66b580afa3ea | 217 | } |
caaruizze | 10:66b580afa3ea | 218 | |
caaruizze | 10:66b580afa3ea | 219 | if (tecla == ENDKEY){ |
caaruizze | 10:66b580afa3ea | 220 | finish = true; |
caaruizze | 10:66b580afa3ea | 221 | c=1; |
caaruizze | 10:66b580afa3ea | 222 | } |
caaruizze | 10:66b580afa3ea | 223 | |
caaruizze | 10:66b580afa3ea | 224 | if (tecla == BORKEY){ |
caaruizze | 10:66b580afa3ea | 225 | memset(&KI, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 226 | Index = 0; |
caaruizze | 10:66b580afa3ea | 227 | i=0; |
caaruizze | 10:66b580afa3ea | 228 | lcd.locate(3,1); |
caaruizze | 10:66b580afa3ea | 229 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 230 | c=1; |
caaruizze | 10:66b580afa3ea | 231 | lcd.locate(2,1); |
caaruizze | 10:66b580afa3ea | 232 | lcd.printf("="); |
caaruizze | 10:66b580afa3ea | 233 | } |
caaruizze | 10:66b580afa3ea | 234 | |
caaruizze | 10:66b580afa3ea | 235 | } |
caaruizze | 10:66b580afa3ea | 236 | |
caaruizze | 10:66b580afa3ea | 237 | if (finish || (Index == KEYLEN - 1)) { |
caaruizze | 10:66b580afa3ea | 238 | ki=0; |
caaruizze | 10:66b580afa3ea | 239 | if (i==3){ |
caaruizze | 10:66b580afa3ea | 240 | ki=(100*KI[0])+(10*KI[1])+(KI[2]); |
caaruizze | 10:66b580afa3ea | 241 | } |
caaruizze | 10:66b580afa3ea | 242 | if (i==2){ |
caaruizze | 10:66b580afa3ea | 243 | ki=(10*KI[0])+(1*KI[1]); |
caaruizze | 10:66b580afa3ea | 244 | } |
caaruizze | 10:66b580afa3ea | 245 | if (i==1){ |
caaruizze | 10:66b580afa3ea | 246 | ki=KI[0]; |
caaruizze | 10:66b580afa3ea | 247 | } |
caaruizze | 10:66b580afa3ea | 248 | lcd.locate(3,1); |
caaruizze | 10:66b580afa3ea | 249 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 250 | |
caaruizze | 10:66b580afa3ea | 251 | lcd.locate(3,1); |
caaruizze | 10:66b580afa3ea | 252 | lcd.printf("%d",ki); |
caaruizze | 10:66b580afa3ea | 253 | memset(&KI, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 254 | Index = 0; |
caaruizze | 10:66b580afa3ea | 255 | i=0; |
caaruizze | 10:66b580afa3ea | 256 | |
caaruizze | 10:66b580afa3ea | 257 | } |
caaruizze | 10:66b580afa3ea | 258 | } |
caaruizze | 10:66b580afa3ea | 259 | |
caaruizze | 10:66b580afa3ea | 260 | if(p==3){ |
caaruizze | 10:66b580afa3ea | 261 | |
caaruizze | 10:66b580afa3ea | 262 | |
caaruizze | 10:66b580afa3ea | 263 | if (Index < KEYLEN - 1) |
caaruizze | 10:66b580afa3ea | 264 | { |
caaruizze | 10:66b580afa3ea | 265 | if ((tecla != ENDKEY) & (tecla != BORKEY) & (tecla != PASKEY)){ |
caaruizze | 10:66b580afa3ea | 266 | KD[Index] = teclado[tecla]; |
caaruizze | 10:66b580afa3ea | 267 | Index++; |
caaruizze | 10:66b580afa3ea | 268 | c--; |
caaruizze | 10:66b580afa3ea | 269 | if (c==0){ |
caaruizze | 10:66b580afa3ea | 270 | lcd.locate(11,1); |
caaruizze | 10:66b580afa3ea | 271 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 272 | c=3; |
caaruizze | 10:66b580afa3ea | 273 | } |
caaruizze | 10:66b580afa3ea | 274 | lcd.locate(11+i,1); |
caaruizze | 10:66b580afa3ea | 275 | lcd.printf("%d",KD[i]); |
caaruizze | 10:66b580afa3ea | 276 | i++; |
caaruizze | 10:66b580afa3ea | 277 | |
caaruizze | 10:66b580afa3ea | 278 | } |
caaruizze | 10:66b580afa3ea | 279 | |
caaruizze | 10:66b580afa3ea | 280 | if (tecla == ENDKEY){ |
caaruizze | 10:66b580afa3ea | 281 | finish = true; |
caaruizze | 10:66b580afa3ea | 282 | c=1; |
caaruizze | 10:66b580afa3ea | 283 | } |
caaruizze | 10:66b580afa3ea | 284 | |
caaruizze | 10:66b580afa3ea | 285 | if (tecla == BORKEY){ |
caaruizze | 10:66b580afa3ea | 286 | memset(&KD, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 287 | Index = 0; |
caaruizze | 10:66b580afa3ea | 288 | i=0; |
caaruizze | 10:66b580afa3ea | 289 | lcd.locate(11,1); |
caaruizze | 10:66b580afa3ea | 290 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 291 | c=1; |
caaruizze | 10:66b580afa3ea | 292 | lcd.locate(10,1); |
caaruizze | 10:66b580afa3ea | 293 | lcd.printf("="); |
caaruizze | 10:66b580afa3ea | 294 | } |
caaruizze | 10:66b580afa3ea | 295 | |
caaruizze | 10:66b580afa3ea | 296 | } |
caaruizze | 10:66b580afa3ea | 297 | |
caaruizze | 10:66b580afa3ea | 298 | if (finish || (Index == KEYLEN - 1)) { |
caaruizze | 10:66b580afa3ea | 299 | kd=0; |
caaruizze | 10:66b580afa3ea | 300 | if (i==3){ |
caaruizze | 10:66b580afa3ea | 301 | kd=(100*KD[0])+(10*KD[1])+(KD[2]); |
caaruizze | 10:66b580afa3ea | 302 | } |
caaruizze | 10:66b580afa3ea | 303 | if (i==2){ |
caaruizze | 10:66b580afa3ea | 304 | kd=(10*KD[0])+(1*KD[1]); |
caaruizze | 10:66b580afa3ea | 305 | } |
caaruizze | 10:66b580afa3ea | 306 | if (i==1){ |
caaruizze | 10:66b580afa3ea | 307 | kd=KD[0]; |
caaruizze | 10:66b580afa3ea | 308 | } |
caaruizze | 10:66b580afa3ea | 309 | lcd.locate(11,1); |
caaruizze | 10:66b580afa3ea | 310 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 311 | |
caaruizze | 10:66b580afa3ea | 312 | lcd.locate(11,1); |
caaruizze | 10:66b580afa3ea | 313 | lcd.printf("%d",kd); |
caaruizze | 10:66b580afa3ea | 314 | memset(&KD, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 315 | Index = 0; |
caaruizze | 10:66b580afa3ea | 316 | i=0; |
caaruizze | 10:66b580afa3ea | 317 | |
caaruizze | 10:66b580afa3ea | 318 | } |
caaruizze | 10:66b580afa3ea | 319 | } |
caaruizze | 10:66b580afa3ea | 320 | |
caaruizze | 10:66b580afa3ea | 321 | if(tecla==MENKEY){//inicia control PID: |
caaruizze | 10:66b580afa3ea | 322 | |
caaruizze | 10:66b580afa3ea | 323 | float med,err,Sp,ap,ai,ad,PID,err_v,sal; |
caaruizze | 10:66b580afa3ea | 324 | med=err=Sp=ap=ai=ad=PID=err_v=sal=0; |
caaruizze | 10:66b580afa3ea | 325 | |
caaruizze | 10:66b580afa3ea | 326 | int k=0; |
caaruizze | 10:66b580afa3ea | 327 | lcd.cls(); |
caaruizze | 10:66b580afa3ea | 328 | lcd.locate(3,0); |
caaruizze | 10:66b580afa3ea | 329 | lcd.printf("Guardado!!"); |
caaruizze | 10:66b580afa3ea | 330 | wait(2); |
caaruizze | 10:66b580afa3ea | 331 | lcd.cls(); |
caaruizze | 10:66b580afa3ea | 332 | lcd.locate(0,0); |
caaruizze | 10:66b580afa3ea | 333 | lcd.printf("Er=%.2f",err); |
caaruizze | 10:66b580afa3ea | 334 | lcd.locate(8,0); |
caaruizze | 10:66b580afa3ea | 335 | lcd.printf("Me=%.2f",med); |
caaruizze | 10:66b580afa3ea | 336 | lcd.locate(0,1); |
caaruizze | 10:66b580afa3ea | 337 | lcd.printf("Sp=0.00"); |
caaruizze | 10:66b580afa3ea | 338 | lcd.locate(8,1); |
caaruizze | 10:66b580afa3ea | 339 | lcd.printf("AC=%.2f",PID); |
caaruizze | 10:66b580afa3ea | 340 | |
caaruizze | 10:66b580afa3ea | 341 | |
caaruizze | 10:66b580afa3ea | 342 | |
caaruizze | 10:66b580afa3ea | 343 | while (1){ |
caaruizze | 10:66b580afa3ea | 344 | wait(0.001); |
caaruizze | 10:66b580afa3ea | 345 | k++; |
caaruizze | 10:66b580afa3ea | 346 | med=me*3.3; |
caaruizze | 10:66b580afa3ea | 347 | Sp=(3.3/999)*sp; |
caaruizze | 10:66b580afa3ea | 348 | err=Sp-med; |
caaruizze | 10:66b580afa3ea | 349 | ap=kp*err; |
caaruizze | 10:66b580afa3ea | 350 | ai=(ki*err)+ai; |
caaruizze | 10:66b580afa3ea | 351 | if(ai>999){ |
caaruizze | 10:66b580afa3ea | 352 | ai=999; |
caaruizze | 10:66b580afa3ea | 353 | } |
caaruizze | 10:66b580afa3ea | 354 | ad=kd*(err-err_v); |
caaruizze | 10:66b580afa3ea | 355 | PID=ap+ai+ad; |
caaruizze | 10:66b580afa3ea | 356 | |
caaruizze | 10:66b580afa3ea | 357 | if (PID<0){ |
caaruizze | 10:66b580afa3ea | 358 | PID=0; |
caaruizze | 10:66b580afa3ea | 359 | } |
caaruizze | 10:66b580afa3ea | 360 | if (PID>999){ |
caaruizze | 10:66b580afa3ea | 361 | PID=999; |
caaruizze | 10:66b580afa3ea | 362 | } |
caaruizze | 10:66b580afa3ea | 363 | co=(PID/999); |
caaruizze | 10:66b580afa3ea | 364 | sal=co*3.3; |
caaruizze | 10:66b580afa3ea | 365 | err_v=err; |
caaruizze | 10:66b580afa3ea | 366 | |
caaruizze | 10:66b580afa3ea | 367 | |
caaruizze | 10:66b580afa3ea | 368 | if(k>100){ |
caaruizze | 10:66b580afa3ea | 369 | |
caaruizze | 10:66b580afa3ea | 370 | lcd.locate(3,0); |
caaruizze | 10:66b580afa3ea | 371 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 372 | lcd.locate(3,0); |
caaruizze | 10:66b580afa3ea | 373 | lcd.printf("%.2f",err); |
caaruizze | 10:66b580afa3ea | 374 | lcd.locate(11,0); |
caaruizze | 10:66b580afa3ea | 375 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 376 | lcd.locate(11,0); |
caaruizze | 10:66b580afa3ea | 377 | lcd.printf("%.2f",med); |
caaruizze | 10:66b580afa3ea | 378 | lcd.locate(11,1); |
caaruizze | 10:66b580afa3ea | 379 | lcd.printf(" "); |
caaruizze | 10:66b580afa3ea | 380 | lcd.locate(11,1); |
caaruizze | 10:66b580afa3ea | 381 | lcd.printf("%.2f",sal); |
caaruizze | 10:66b580afa3ea | 382 | lcd.locate(3,1); |
caaruizze | 10:66b580afa3ea | 383 | lcd.printf("%.2f",Sp); |
caaruizze | 10:66b580afa3ea | 384 | k=0; |
caaruizze | 10:66b580afa3ea | 385 | } |
caaruizze | 10:66b580afa3ea | 386 | |
caaruizze | 10:66b580afa3ea | 387 | }//while |
caaruizze | 10:66b580afa3ea | 388 | |
caaruizze | 10:66b580afa3ea | 389 | } |
caaruizze | 10:66b580afa3ea | 390 | |
caaruizze | 10:66b580afa3ea | 391 | |
caaruizze | 10:66b580afa3ea | 392 | |
caaruizze | 10:66b580afa3ea | 393 | |
caaruizze | 10:66b580afa3ea | 394 | |
caaruizze | 10:66b580afa3ea | 395 | return 0; |
caaruizze | 10:66b580afa3ea | 396 | } |
caaruizze | 10:66b580afa3ea | 397 | |
caaruizze | 10:66b580afa3ea | 398 | |
caaruizze | 10:66b580afa3ea | 399 | int main() { |
caaruizze | 10:66b580afa3ea | 400 | //Se elimina el bufer de los vectores |
caaruizze | 10:66b580afa3ea | 401 | memset(&SP, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 402 | memset(&KP, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 403 | memset(&KI, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 404 | memset(&KD, 0, KEYLEN); |
caaruizze | 10:66b580afa3ea | 405 | /***********************************************/ |
caaruizze | 10:66b580afa3ea | 406 | Index = 0; |
caaruizze | 10:66b580afa3ea | 407 | Keypad keypad(PTA2,PTD4,PTD3,PTD1,PTA13,PTD5,PTD0,PTD2); |
caaruizze | 10:66b580afa3ea | 408 | keypad.CallAfterInput(&cbAfterInput); |
caaruizze | 10:66b580afa3ea | 409 | keypad.Start(); |
caaruizze | 10:66b580afa3ea | 410 | lcd.writeCommand(0x0e); |
caaruizze | 10:66b580afa3ea | 411 | lcd.locate(0,0); |
caaruizze | 10:66b580afa3ea | 412 | lcd.printf("Sp:0"); |
caaruizze | 10:66b580afa3ea | 413 | lcd.locate(8,0); |
caaruizze | 10:66b580afa3ea | 414 | lcd.printf("Kp:0"); |
caaruizze | 10:66b580afa3ea | 415 | lcd.locate(0,1); |
caaruizze | 10:66b580afa3ea | 416 | lcd.printf("Ki:0"); |
caaruizze | 10:66b580afa3ea | 417 | lcd.locate(8,1); |
caaruizze | 10:66b580afa3ea | 418 | lcd.printf("Kd:0"); |
caaruizze | 10:66b580afa3ea | 419 | while (1) { |
caaruizze | 10:66b580afa3ea | 420 | |
caaruizze | 10:66b580afa3ea | 421 | |
caaruizze | 10:66b580afa3ea | 422 | wait(0.5); |
caaruizze | 10:66b580afa3ea | 423 | |
caaruizze | 10:66b580afa3ea | 424 | } |
caaruizze | 10:66b580afa3ea | 425 | |
caaruizze | 10:66b580afa3ea | 426 | } |