se introducen datos a la tarjeta con un teclado matricial con su respectivo pito para las teclas del teclado

Dependencies:   FPointer TextLCD keypad mbed

Committer:
mescobart22
Date:
Wed Apr 09 15:42:23 2014 +0000
Revision:
0:8bf5f05ef31f
Tarea3_Teclado

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mescobart22 0:8bf5f05ef31f 1 #include "mbed.h"
mescobart22 0:8bf5f05ef31f 2 #include "TextLCD.h"
mescobart22 0:8bf5f05ef31f 3 #include"keypad.h" //Librería del teclado 4x4
mescobart22 0:8bf5f05ef31f 4 #include"FPointer.h" //Librería complementaria para libreria keypad
mescobart22 0:8bf5f05ef31f 5
mescobart22 0:8bf5f05ef31f 6 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
mescobart22 0:8bf5f05ef31f 7 Keypad keypad(PTA2,PTD4,PTD3,PTD7,PTA13,PTD5,PTD0,PTD2); //Entradas del teclado (4r,3r,2r,1r,8,7,6,5)
mescobart22 0:8bf5f05ef31f 8 DigitalOut pitido(PTC6); // variable de sonido
mescobart22 0:8bf5f05ef31f 9
mescobart22 0:8bf5f05ef31f 10 //ASIGNACION DE VARIABLES
mescobart22 0:8bf5f05ef31f 11 Timer t;
mescobart22 0:8bf5f05ef31f 12 int r;
mescobart22 0:8bf5f05ef31f 13 int cero;
mescobart22 0:8bf5f05ef31f 14 int flag;
mescobart22 0:8bf5f05ef31f 15 int q;
mescobart22 0:8bf5f05ef31f 16 int k;
mescobart22 0:8bf5f05ef31f 17 int C1=0x0E; //configurar el lcd para mostrar el guin bajo
mescobart22 0:8bf5f05ef31f 18 int C2=0x0C; //configurar el lcd para QUITAR el guion bajo
mescobart22 0:8bf5f05ef31f 19 float sp=0; //set point
mescobart22 0:8bf5f05ef31f 20 float kp=0; //ganancia proporcional
mescobart22 0:8bf5f05ef31f 21 float ki=0; //ganancia integral
mescobart22 0:8bf5f05ef31f 22 float kd=0; //ganancia derivativa
mescobart22 0:8bf5f05ef31f 23 int ind=0; //vector de caracteres.
mescobart22 0:8bf5f05ef31f 24 float err, med, yr, ap, ai, ad, err_v, cycle; //Variable de control PID
mescobart22 0:8bf5f05ef31f 25 float pid;
mescobart22 0:8bf5f05ef31f 26
mescobart22 0:8bf5f05ef31f 27 //MATRIZ DEL TECLADO
mescobart22 0:8bf5f05ef31f 28 float Keytable[] = {1,2,3,11,
mescobart22 0:8bf5f05ef31f 29 4,5,6,12,
mescobart22 0:8bf5f05ef31f 30 7,8,9,13,
mescobart22 0:8bf5f05ef31f 31 0,0,0,0};
mescobart22 0:8bf5f05ef31f 32
mescobart22 0:8bf5f05ef31f 33 //Se crea una función que incremente los valores
mescobart22 0:8bf5f05ef31f 34 void increment(int j){
mescobart22 0:8bf5f05ef31f 35 if(j==0){
mescobart22 0:8bf5f05ef31f 36 if (q!=1 && sp<10){
mescobart22 0:8bf5f05ef31f 37 sp=ind;
mescobart22 0:8bf5f05ef31f 38 q=1;
mescobart22 0:8bf5f05ef31f 39 }
mescobart22 0:8bf5f05ef31f 40 else {
mescobart22 0:8bf5f05ef31f 41 sp=10*sp+ind;
mescobart22 0:8bf5f05ef31f 42 }
mescobart22 0:8bf5f05ef31f 43 if(sp>999)sp=999;
mescobart22 0:8bf5f05ef31f 44
mescobart22 0:8bf5f05ef31f 45
mescobart22 0:8bf5f05ef31f 46 lcd.locate(3,0); lcd.printf(" ");
mescobart22 0:8bf5f05ef31f 47 lcd.locate(3,0); lcd.printf("%.0f",sp);
mescobart22 0:8bf5f05ef31f 48 pitido = 0;
mescobart22 0:8bf5f05ef31f 49 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 50 pitido = 0;
mescobart22 0:8bf5f05ef31f 51 wait(0.000002);
mescobart22 0:8bf5f05ef31f 52 pitido = 1;
mescobart22 0:8bf5f05ef31f 53 wait(0.000002);
mescobart22 0:8bf5f05ef31f 54 }
mescobart22 0:8bf5f05ef31f 55 pitido = 0;
mescobart22 0:8bf5f05ef31f 56 }
mescobart22 0:8bf5f05ef31f 57 else if(j==1){
mescobart22 0:8bf5f05ef31f 58 if (q!=1 && kp<10){
mescobart22 0:8bf5f05ef31f 59 kp=ind;
mescobart22 0:8bf5f05ef31f 60 q=1;
mescobart22 0:8bf5f05ef31f 61 }
mescobart22 0:8bf5f05ef31f 62 else{
mescobart22 0:8bf5f05ef31f 63 kp=10*kp+ind;
mescobart22 0:8bf5f05ef31f 64 }
mescobart22 0:8bf5f05ef31f 65 if(kp>999)kp=999;
mescobart22 0:8bf5f05ef31f 66 lcd.locate(11,0); lcd.printf(" ");
mescobart22 0:8bf5f05ef31f 67 lcd.locate(11,0); lcd.printf("%.0f",kp);
mescobart22 0:8bf5f05ef31f 68 pitido = 0;
mescobart22 0:8bf5f05ef31f 69 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 70 pitido = 0;
mescobart22 0:8bf5f05ef31f 71 wait(0.000002);
mescobart22 0:8bf5f05ef31f 72 pitido = 1;
mescobart22 0:8bf5f05ef31f 73 wait(0.000002);
mescobart22 0:8bf5f05ef31f 74 }
mescobart22 0:8bf5f05ef31f 75 pitido = 0;
mescobart22 0:8bf5f05ef31f 76 }
mescobart22 0:8bf5f05ef31f 77 else if(j==2){
mescobart22 0:8bf5f05ef31f 78 if (q!=1 && ki<10){
mescobart22 0:8bf5f05ef31f 79 ki=ind;
mescobart22 0:8bf5f05ef31f 80 q=1;
mescobart22 0:8bf5f05ef31f 81 }
mescobart22 0:8bf5f05ef31f 82 else{
mescobart22 0:8bf5f05ef31f 83 ki=10*ki+ind;
mescobart22 0:8bf5f05ef31f 84 }
mescobart22 0:8bf5f05ef31f 85 if(ki>999)ki=999;
mescobart22 0:8bf5f05ef31f 86 lcd.locate(3,1); lcd.printf(" ");
mescobart22 0:8bf5f05ef31f 87 lcd.locate(3,1); lcd.printf("%.0f",ki);
mescobart22 0:8bf5f05ef31f 88 pitido = 0;
mescobart22 0:8bf5f05ef31f 89 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 90 pitido = 0;
mescobart22 0:8bf5f05ef31f 91 wait(0.000002);
mescobart22 0:8bf5f05ef31f 92 pitido = 1;
mescobart22 0:8bf5f05ef31f 93 wait(0.000002);
mescobart22 0:8bf5f05ef31f 94 }
mescobart22 0:8bf5f05ef31f 95 pitido = 0;
mescobart22 0:8bf5f05ef31f 96 }
mescobart22 0:8bf5f05ef31f 97 else{
mescobart22 0:8bf5f05ef31f 98 if (q!=1 && kd<10){
mescobart22 0:8bf5f05ef31f 99 kd=ind;
mescobart22 0:8bf5f05ef31f 100 q=1;
mescobart22 0:8bf5f05ef31f 101 }
mescobart22 0:8bf5f05ef31f 102 else{
mescobart22 0:8bf5f05ef31f 103 kd=10*kd+ind;
mescobart22 0:8bf5f05ef31f 104 }
mescobart22 0:8bf5f05ef31f 105 if(kd>999)kd=999;
mescobart22 0:8bf5f05ef31f 106 lcd.locate(11,1); lcd.printf(" ");
mescobart22 0:8bf5f05ef31f 107 lcd.locate(11,1); lcd.printf("%.0f",kd);
mescobart22 0:8bf5f05ef31f 108 }
mescobart22 0:8bf5f05ef31f 109 ind=0; cero=0;
mescobart22 0:8bf5f05ef31f 110 pitido = 0;
mescobart22 0:8bf5f05ef31f 111 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 112 pitido = 0;
mescobart22 0:8bf5f05ef31f 113 wait(0.000002);
mescobart22 0:8bf5f05ef31f 114 pitido = 1;
mescobart22 0:8bf5f05ef31f 115 wait(0.000002);
mescobart22 0:8bf5f05ef31f 116 }
mescobart22 0:8bf5f05ef31f 117 pitido = 0;
mescobart22 0:8bf5f05ef31f 118 }
mescobart22 0:8bf5f05ef31f 119
mescobart22 0:8bf5f05ef31f 120 uint32_t cbAfterInput(uint32_t index) {
mescobart22 0:8bf5f05ef31f 121 ind=Keytable[index];
mescobart22 0:8bf5f05ef31f 122 cero=index;
mescobart22 0:8bf5f05ef31f 123 return 0;
mescobart22 0:8bf5f05ef31f 124 }
mescobart22 0:8bf5f05ef31f 125
mescobart22 0:8bf5f05ef31f 126 void def_posicion(int j){
mescobart22 0:8bf5f05ef31f 127 if (j==0){
mescobart22 0:8bf5f05ef31f 128 lcd.locate(3,0); lcd.printf("%.0f",sp);
mescobart22 0:8bf5f05ef31f 129 lcd.locate(3,0);
mescobart22 0:8bf5f05ef31f 130 }
mescobart22 0:8bf5f05ef31f 131 else if(j==1){
mescobart22 0:8bf5f05ef31f 132 lcd.locate(11,0); lcd.printf("%.0f",kp);
mescobart22 0:8bf5f05ef31f 133 lcd.locate(11,0);
mescobart22 0:8bf5f05ef31f 134 }
mescobart22 0:8bf5f05ef31f 135 else if (j==2){
mescobart22 0:8bf5f05ef31f 136 lcd.locate(3,1); lcd.printf("%.0f",ki);
mescobart22 0:8bf5f05ef31f 137 lcd.locate(3,1);
mescobart22 0:8bf5f05ef31f 138 }
mescobart22 0:8bf5f05ef31f 139 else {
mescobart22 0:8bf5f05ef31f 140 lcd.locate(11,1); lcd.printf("%.0f",kd);
mescobart22 0:8bf5f05ef31f 141 lcd.locate(11,1);
mescobart22 0:8bf5f05ef31f 142 }
mescobart22 0:8bf5f05ef31f 143 }
mescobart22 0:8bf5f05ef31f 144
mescobart22 0:8bf5f05ef31f 145 //Dado que hay parámetros que no varía en el display en esta parte del código, se crea una función que los mantenga.
mescobart22 0:8bf5f05ef31f 146 void star_patch1(void){
mescobart22 0:8bf5f05ef31f 147 lcd.cls();
mescobart22 0:8bf5f05ef31f 148 lcd.locate(8,0);
mescobart22 0:8bf5f05ef31f 149 lcd.printf("Kp=%.0f",kp);
mescobart22 0:8bf5f05ef31f 150 lcd.locate(0,1);
mescobart22 0:8bf5f05ef31f 151 lcd.printf("Ki=%.0f",ki);
mescobart22 0:8bf5f05ef31f 152 lcd.locate(8,1);
mescobart22 0:8bf5f05ef31f 153 lcd.printf("Kd=%.0f",kd);
mescobart22 0:8bf5f05ef31f 154 lcd.writeCommand(C1); //cursor se vea y sea intermitente
mescobart22 0:8bf5f05ef31f 155 lcd.locate(0,0);
mescobart22 0:8bf5f05ef31f 156 lcd.printf("Sp=%.0f",sp);
mescobart22 0:8bf5f05ef31f 157 }
mescobart22 0:8bf5f05ef31f 158
mescobart22 0:8bf5f05ef31f 159 void star_patch2(void){ // uso nuevamente función que imprime los caracteres que no van a variar en el display
mescobart22 0:8bf5f05ef31f 160 lcd.writeCommand(C2);
mescobart22 0:8bf5f05ef31f 161 lcd.cls();
mescobart22 0:8bf5f05ef31f 162 lcd.printf("Iniciamos el PID |m|");
mescobart22 0:8bf5f05ef31f 163 wait(2);
mescobart22 0:8bf5f05ef31f 164 lcd.cls();
mescobart22 0:8bf5f05ef31f 165 lcd.printf("Er%=f",err);
mescobart22 0:8bf5f05ef31f 166 lcd.locate(8,0); lcd.printf("Me=%.0f",med);
mescobart22 0:8bf5f05ef31f 167 lcd.locate(0,1); lcd.printf("Sp=%.0f",sp);
mescobart22 0:8bf5f05ef31f 168 lcd.locate(8,1); lcd.printf("Co=%.0f",pid);
mescobart22 0:8bf5f05ef31f 169 wait(3);
mescobart22 0:8bf5f05ef31f 170 }
mescobart22 0:8bf5f05ef31f 171
mescobart22 0:8bf5f05ef31f 172 int main(){
mescobart22 0:8bf5f05ef31f 173 ini:
mescobart22 0:8bf5f05ef31f 174 ind=0;
mescobart22 0:8bf5f05ef31f 175 star_patch1();
mescobart22 0:8bf5f05ef31f 176 keypad.CallAfterInput(&cbAfterInput);
mescobart22 0:8bf5f05ef31f 177 keypad.Start();
mescobart22 0:8bf5f05ef31f 178 ini1:
mescobart22 0:8bf5f05ef31f 179 if(ind==12){
mescobart22 0:8bf5f05ef31f 180 if (k<3) k++;
mescobart22 0:8bf5f05ef31f 181 else k=0;
mescobart22 0:8bf5f05ef31f 182 def_posicion(k);
mescobart22 0:8bf5f05ef31f 183 ind=0;
mescobart22 0:8bf5f05ef31f 184 q=0;
mescobart22 0:8bf5f05ef31f 185 pitido = 0;
mescobart22 0:8bf5f05ef31f 186 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 187 pitido = 0;
mescobart22 0:8bf5f05ef31f 188 wait(0.000002);
mescobart22 0:8bf5f05ef31f 189 pitido = 1;
mescobart22 0:8bf5f05ef31f 190 wait(0.000002);
mescobart22 0:8bf5f05ef31f 191 }
mescobart22 0:8bf5f05ef31f 192 pitido = 0;
mescobart22 0:8bf5f05ef31f 193 wait(0.05);
mescobart22 0:8bf5f05ef31f 194 pitido = 0;
mescobart22 0:8bf5f05ef31f 195 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 196 pitido = 0;
mescobart22 0:8bf5f05ef31f 197 wait(0.000002);
mescobart22 0:8bf5f05ef31f 198 pitido = 1;
mescobart22 0:8bf5f05ef31f 199 wait(0.000002);
mescobart22 0:8bf5f05ef31f 200 }
mescobart22 0:8bf5f05ef31f 201 pitido = 0;
mescobart22 0:8bf5f05ef31f 202 }
mescobart22 0:8bf5f05ef31f 203 if(ind==13){
mescobart22 0:8bf5f05ef31f 204 pitido = 0;
mescobart22 0:8bf5f05ef31f 205 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 206 pitido = 0;
mescobart22 0:8bf5f05ef31f 207 wait(0.000002);
mescobart22 0:8bf5f05ef31f 208 pitido = 1;
mescobart22 0:8bf5f05ef31f 209 wait(0.000002);
mescobart22 0:8bf5f05ef31f 210 }
mescobart22 0:8bf5f05ef31f 211 pitido = 0;
mescobart22 0:8bf5f05ef31f 212 wait(0.03);
mescobart22 0:8bf5f05ef31f 213
mescobart22 0:8bf5f05ef31f 214 pitido = 0;
mescobart22 0:8bf5f05ef31f 215 for(r=1; r<= 1000; ++r){
mescobart22 0:8bf5f05ef31f 216 pitido = 0;
mescobart22 0:8bf5f05ef31f 217 wait(0.000002);
mescobart22 0:8bf5f05ef31f 218 pitido = 1;
mescobart22 0:8bf5f05ef31f 219 wait(0.000002);
mescobart22 0:8bf5f05ef31f 220 }
mescobart22 0:8bf5f05ef31f 221 pitido = 0;
mescobart22 0:8bf5f05ef31f 222 wait(0.03);
mescobart22 0:8bf5f05ef31f 223 pitido = 0;
mescobart22 0:8bf5f05ef31f 224 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 225 pitido = 0;
mescobart22 0:8bf5f05ef31f 226 wait(0.000002);
mescobart22 0:8bf5f05ef31f 227 pitido = 1;
mescobart22 0:8bf5f05ef31f 228 wait(0.000002);
mescobart22 0:8bf5f05ef31f 229 }
mescobart22 0:8bf5f05ef31f 230 pitido = 0;
mescobart22 0:8bf5f05ef31f 231 ind=0;
mescobart22 0:8bf5f05ef31f 232 //goto PID;
mescobart22 0:8bf5f05ef31f 233
mescobart22 0:8bf5f05ef31f 234 }
mescobart22 0:8bf5f05ef31f 235 if(ind==11){
mescobart22 0:8bf5f05ef31f 236 pitido = 0;
mescobart22 0:8bf5f05ef31f 237 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 238 pitido = 0;
mescobart22 0:8bf5f05ef31f 239 wait(0.000002);
mescobart22 0:8bf5f05ef31f 240 pitido = 1;
mescobart22 0:8bf5f05ef31f 241 wait(0.000002);
mescobart22 0:8bf5f05ef31f 242 }
mescobart22 0:8bf5f05ef31f 243 pitido = 0;
mescobart22 0:8bf5f05ef31f 244 wait(0.02);
mescobart22 0:8bf5f05ef31f 245
mescobart22 0:8bf5f05ef31f 246 pitido = 0;
mescobart22 0:8bf5f05ef31f 247 for(r=1; r<= 2000; ++r){
mescobart22 0:8bf5f05ef31f 248 pitido = 0;
mescobart22 0:8bf5f05ef31f 249 wait(0.000002);
mescobart22 0:8bf5f05ef31f 250 pitido = 1;
mescobart22 0:8bf5f05ef31f 251 wait(0.000002);
mescobart22 0:8bf5f05ef31f 252 }
mescobart22 0:8bf5f05ef31f 253 pitido = 0;
mescobart22 0:8bf5f05ef31f 254 if (k==0){
mescobart22 0:8bf5f05ef31f 255 sp=0;
mescobart22 0:8bf5f05ef31f 256 lcd.locate(3,0); lcd.printf(" ");
mescobart22 0:8bf5f05ef31f 257 lcd.locate(3,0); lcd.printf("%.0f",sp);
mescobart22 0:8bf5f05ef31f 258 }
mescobart22 0:8bf5f05ef31f 259 else if(k==1){
mescobart22 0:8bf5f05ef31f 260 kp=0;
mescobart22 0:8bf5f05ef31f 261 lcd.locate(11,0); lcd.printf(" ");
mescobart22 0:8bf5f05ef31f 262 lcd.locate(11,0); lcd.printf("%.0f",kp);
mescobart22 0:8bf5f05ef31f 263 }
mescobart22 0:8bf5f05ef31f 264 else if (k==2){
mescobart22 0:8bf5f05ef31f 265 ki=0;
mescobart22 0:8bf5f05ef31f 266 lcd.locate(3,1); lcd.printf(" ");
mescobart22 0:8bf5f05ef31f 267 lcd.locate(3,1); lcd.printf("%.0f",ki);
mescobart22 0:8bf5f05ef31f 268 }
mescobart22 0:8bf5f05ef31f 269 else {
mescobart22 0:8bf5f05ef31f 270 kd=0;
mescobart22 0:8bf5f05ef31f 271 lcd.locate(11,1); lcd.printf(" ");
mescobart22 0:8bf5f05ef31f 272 lcd.locate(11,1); lcd.printf("%.0f",kd);
mescobart22 0:8bf5f05ef31f 273 }
mescobart22 0:8bf5f05ef31f 274 q=0; ind=0;
mescobart22 0:8bf5f05ef31f 275 }REGEDITCD..
mescobart22 0:8bf5f05ef31f 276
mescobart22 0:8bf5f05ef31f 277 CCD..
mescobart22 0:8bf5f05ef31f 278
mescobart22 0:8bf5f05ef31f 279 if (ind!=0 && ind!=12 && ind!=13 && ind!=11 || cero==13 ){
mescobart22 0:8bf5f05ef31f 280 increment(k);
mescobart22 0:8bf5f05ef31f 281 }
mescobart22 0:8bf5f05ef31f 282 goto ini1;
mescobart22 0:8bf5f05ef31f 283
mescobart22 0:8bf5f05ef31f 284 }