teclado lcd

Dependencies:   TextLCD keypad mbed

Committer:
serbm
Date:
Sat Feb 25 14:21:11 2017 +0000
Revision:
0:9a67044d749e
teclado con lcd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
serbm 0:9a67044d749e 1 # include "mbed.h"
serbm 0:9a67044d749e 2 # include "keypad.h"
serbm 0:9a67044d749e 3 # include "TextLCD.h"
serbm 0:9a67044d749e 4
serbm 0:9a67044d749e 5
serbm 0:9a67044d749e 6 TextLCD lcd (D15,D14,D13,D12,D11,D10); // RS, e, d4-d7
serbm 0:9a67044d749e 7
serbm 0:9a67044d749e 8 AnalogIn Ain (A0);
serbm 0:9a67044d749e 9 AnalogOut Aout (A2);
serbm 0:9a67044d749e 10
serbm 0:9a67044d749e 11 int C4 = 0x0C ;
serbm 0:9a67044d749e 12 int C1 = 0x0E ;
serbm 0:9a67044d749e 13 int p = 0 ;
serbm 0:9a67044d749e 14
serbm 0:9a67044d749e 15 int c = 0 ;
serbm 0:9a67044d749e 16 int y = 0 ;
serbm 0:9a67044d749e 17 float i; // establecer el punto
serbm 0:9a67044d749e 18 float j = 0 ; // salida planta
serbm 0:9a67044d749e 19 float ji = 0 ; // variable de Proceso interno
serbm 0:9a67044d749e 20 float spi = 0 ; // variable de Proceso interno
serbm 0:9a67044d749e 21 float h = 0 ; // entrada planta
serbm 0:9a67044d749e 22 float m = 0 ; // Error
serbm 0:9a67044d749e 23 float mv = 0 ;
serbm 0:9a67044d749e 24 float g = 0 ;
serbm 0:9a67044d749e 25
serbm 0:9a67044d749e 26
serbm 0:9a67044d749e 27 float ap, ai;
serbm 0:9a67044d749e 28 int sp = 0 ;
serbm 0:9a67044d749e 29 int kp = 0 ;
serbm 0:9a67044d749e 30 int ki = 0 ;
serbm 0:9a67044d749e 31 int k = 0 ;
serbm 0:9a67044d749e 32
serbm 0:9a67044d749e 33
serbm 0:9a67044d749e 34
serbm 0:9a67044d749e 35
serbm 0:9a67044d749e 36 // Definir sus propios valores del teclado
serbm 0:9a67044d749e 37 char tabla de teclas [] = { '1' , '2' , '3' , '*' ,
serbm 0:9a67044d749e 38 '4' , '5' , '6' , '0' ,
serbm 0:9a67044d749e 39 '7' , ' 8 ' , ' 9 ' , ' # ' ,
serbm 0:9a67044d749e 40 ' A ' , ' B ' , ' C ' , ' D '};
serbm 0:9a67044d749e 41
serbm 0:9a67044d749e 42 int Teclado [] = { 1 , 4 , 7 , 13 ,
serbm 0:9a67044d749e 43 2 , 5 , 8 , 0 ,
serbm 0:9a67044d749e 44 3 , 6 , 9 , 14 ,
serbm 0:9a67044d749e 45 10 , 11 , 12 , 15
serbm 0:9a67044d749e 46 };
serbm 0:9a67044d749e 47
serbm 0:9a67044d749e 48 uint32_t cbAfterInput ( uint32_t clave)
serbm 0:9a67044d749e 49 {
serbm 0:9a67044d749e 50
serbm 0:9a67044d749e 51 if (KEYPAD [clave] == 'A' )
serbm 0:9a67044d749e 52 {
serbm 0:9a67044d749e 53 Teclado [clave] = 0 ;
serbm 0:9a67044d749e 54 C ++;
serbm 0:9a67044d749e 55 }
serbm 0:9a67044d749e 56
serbm 0:9a67044d749e 57 if (KEYPAD [clave] == 'B' ) {
serbm 0:9a67044d749e 58 Teclado [clave] = 0 ;
serbm 0:9a67044d749e 59 sp = 0 ;
serbm 0:9a67044d749e 60 kp = 0 ;
serbm 0:9a67044d749e 61 ki = 0 ;
serbm 0:9a67044d749e 62 kd = 0 ;
serbm 0:9a67044d749e 63 }
serbm 0:9a67044d749e 64
serbm 0:9a67044d749e 65
serbm 0:9a67044d749e 66 if (KEYTABLE [clave] == 'D' ) {
serbm 0:9a67044d749e 67 Teclado [clave] = 0 ;
serbm 0:9a67044d749e 68 p = 1 ;
serbm 0:9a67044d749e 69 }
serbm 0:9a67044d749e 70
serbm 0:9a67044d749e 71 ////////////
serbm 0:9a67044d749e 72
serbm 0:9a67044d749e 73 if (c == 0 ) {
serbm 0:9a67044d749e 74
serbm 0:9a67044d749e 75 SP = SP + Teclado [clave];
serbm 0:9a67044d749e 76
serbm 0:9a67044d749e 77 }
serbm 0:9a67044d749e 78
serbm 0:9a67044d749e 79 if (c == 1 ) {
serbm 0:9a67044d749e 80
serbm 0:9a67044d749e 81 kp kp = + Teclado [clave];
serbm 0:9a67044d749e 82
serbm 0:9a67044d749e 83 }
serbm 0:9a67044d749e 84 if (c == 2 ) {
serbm 0:9a67044d749e 85
serbm 0:9a67044d749e 86 ki ki = + Teclado [clave];
serbm 0:9a67044d749e 87
serbm 0:9a67044d749e 88 }
serbm 0:9a67044d749e 89 if (c == 3 ) {
serbm 0:9a67044d749e 90
serbm 0:9a67044d749e 91 KD = kd + Teclado [clave];
serbm 0:9a67044d749e 92
serbm 0:9a67044d749e 93 }
serbm 0:9a67044d749e 94
serbm 0:9a67044d749e 95 ////////////
serbm 0:9a67044d749e 96
serbm 0:9a67044d749e 97
serbm 0:9a67044d749e 98 volver 0 ;
serbm 0:9a67044d749e 99 } // Fin unit32_t
serbm 0:9a67044d749e 100
serbm 0:9a67044d749e 101
serbm 0:9a67044d749e 102
serbm 0:9a67044d749e 103 int main () {
serbm 0:9a67044d749e 104 teclado teclado (D9,D8,D7,D6,D5,D4,D3,D2);
serbm 0:9a67044d749e 105 keypad.CallAfterInput (y cbAfterInput);
serbm 0:9a67044d749e 106 keypad.Start ();
serbm 0:9a67044d749e 107
serbm 0:9a67044d749e 108 lcd.cls ();
serbm 0:9a67044d749e 109 lcd. printf ( "SP:% d" , sp);
serbm 0:9a67044d749e 110 lcd.locate ( 8 , 0 );
serbm 0:9a67044d749e 111 lcd. printf ( "Kp:% d" , kp);
serbm 0:9a67044d749e 112 lcd.locate ( 0 , 1 );
serbm 0:9a67044d749e 113 lcd. printf ( "Ki:% d" , ki);
serbm 0:9a67044d749e 114 lcd.locate ( 8 , 1 );
serbm 0:9a67044d749e 115 lcd. printf ( "Kd:% d" , kd);
serbm 0:9a67044d749e 116 lcd.writeCommand (C1); // escribimos ONU comando segun el manual del módulo del LCD
serbm 0:9a67044d749e 117 lcd.locate ( 0 , 0 );
serbm 0:9a67044d749e 118 lcd. printf ( "SP:% d" , sp);
serbm 0:9a67044d749e 119
serbm 0:9a67044d749e 120 mientras que ( 1 ) {
serbm 0:9a67044d749e 121
serbm 0:9a67044d749e 122
serbm 0:9a67044d749e 123 if (c == 0 ) {
serbm 0:9a67044d749e 124 lcd.locate ( 3 , 0 );
serbm 0:9a67044d749e 125 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 126 lcd.locate ( 4 , 0 );
serbm 0:9a67044d749e 127 lcd. printf ( "% d" , sp);
serbm 0:9a67044d749e 128
serbm 0:9a67044d749e 129 // NUEVO !! (no ceros en - proceso)
serbm 0:9a67044d749e 130 if (sp < 10 ) {
serbm 0:9a67044d749e 131 lcd.locate ( 5 , 0 );
serbm 0:9a67044d749e 132 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 133 }
serbm 0:9a67044d749e 134
serbm 0:9a67044d749e 135 if (sp < 100 ) {
serbm 0:9a67044d749e 136 lcd.locate ( 6 , 0 );
serbm 0:9a67044d749e 137 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 138 }
serbm 0:9a67044d749e 139
serbm 0:9a67044d749e 140 lcd.locate ( 4 , 0 );
serbm 0:9a67044d749e 141 lcd. printf ( "% d" , sp);
serbm 0:9a67044d749e 142 //wait(0.1);
serbm 0:9a67044d749e 143
serbm 0:9a67044d749e 144 //
serbm 0:9a67044d749e 145
serbm 0:9a67044d749e 146 }
serbm 0:9a67044d749e 147
serbm 0:9a67044d749e 148 if (c == 1 ) {
serbm 0:9a67044d749e 149 lcd.locate ( 11 , 0 );
serbm 0:9a67044d749e 150 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 151 lcd.locate ( 12 , 0 );
serbm 0:9a67044d749e 152 lcd. printf ( "% d" , kp);
serbm 0:9a67044d749e 153
serbm 0:9a67044d749e 154 // NUEVO !! (no ceros en - proceso)
serbm 0:9a67044d749e 155 if (kp < 10 ) {
serbm 0:9a67044d749e 156 lcd.locate ( 13 , 0 );
serbm 0:9a67044d749e 157 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 158 }
serbm 0:9a67044d749e 159
serbm 0:9a67044d749e 160 if (kp < 100 ) {
serbm 0:9a67044d749e 161 lcd.locate ( 14 , 0 );
serbm 0:9a67044d749e 162 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 163 }
serbm 0:9a67044d749e 164
serbm 0:9a67044d749e 165 lcd.locate ( 12 , 0 );
serbm 0:9a67044d749e 166 lcd. printf ( "% d" , kp);
serbm 0:9a67044d749e 167 //wait(0.1);
serbm 0:9a67044d749e 168
serbm 0:9a67044d749e 169 //
serbm 0:9a67044d749e 170
serbm 0:9a67044d749e 171 }
serbm 0:9a67044d749e 172
serbm 0:9a67044d749e 173 if (c == 2 ) {
serbm 0:9a67044d749e 174 lcd.locate ( 3 , 1 );
serbm 0:9a67044d749e 175 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 176 lcd.locate ( 4 , 1 );
serbm 0:9a67044d749e 177 lcd. printf ( "% d" , ki);
serbm 0:9a67044d749e 178
serbm 0:9a67044d749e 179 // NUEVO !! (no ceros en - proceso)
serbm 0:9a67044d749e 180 if (Ki < 10 ) {
serbm 0:9a67044d749e 181 lcd.locate ( 5 , 1 );
serbm 0:9a67044d749e 182 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 183 }
serbm 0:9a67044d749e 184
serbm 0:9a67044d749e 185 if (ki < 100 ) {
serbm 0:9a67044d749e 186 lcd.locate ( 6 , 1 );
serbm 0:9a67044d749e 187 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 188 }
serbm 0:9a67044d749e 189
serbm 0:9a67044d749e 190 lcd.locate ( 4 , 1 );
serbm 0:9a67044d749e 191 lcd. printf ( "% d" , ki);
serbm 0:9a67044d749e 192 //wait(0.2);
serbm 0:9a67044d749e 193
serbm 0:9a67044d749e 194 //
serbm 0:9a67044d749e 195
serbm 0:9a67044d749e 196 }
serbm 0:9a67044d749e 197 if (c == 3 ) {
serbm 0:9a67044d749e 198 lcd.locate ( 11 , 1 );
serbm 0:9a67044d749e 199 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 200 lcd.locate ( 12 , 1 );
serbm 0:9a67044d749e 201 lcd. printf ( "% d" , kd);
serbm 0:9a67044d749e 202
serbm 0:9a67044d749e 203 // NUEVO !! (no ceros en - proceso)
serbm 0:9a67044d749e 204 if (kd < 10 ) {
serbm 0:9a67044d749e 205 lcd.locate ( 13 , 1 );
serbm 0:9a67044d749e 206 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 207 }
serbm 0:9a67044d749e 208
serbm 0:9a67044d749e 209 if (kd < 100 ) {
serbm 0:9a67044d749e 210 lcd.locate ( 14 , 1 );
serbm 0:9a67044d749e 211 . lcd putc ( 0xFE );
serbm 0:9a67044d749e 212 }
serbm 0:9a67044d749e 213
serbm 0:9a67044d749e 214 lcd.locate ( 12 , 1 );
serbm 0:9a67044d749e 215 lcd. printf ( "% d" , kd);
serbm 0:9a67044d749e 216 //wait(0.2);
serbm 0:9a67044d749e 217 }
serbm 0:9a67044d749e 218
serbm 0:9a67044d749e 219 if (c == 4 || c> 4 ) {
serbm 0:9a67044d749e 220 c = 0 ;
serbm 0:9a67044d749e 221 }
serbm 0:9a67044d749e 222
serbm 0:9a67044d749e 223 if (p == 1 ) {
serbm 0:9a67044d749e 224 c = 0 ;
serbm 0:9a67044d749e 225 romper ;
serbm 0:9a67044d749e 226 }
serbm 0:9a67044d749e 227
serbm 0:9a67044d749e 228 }
serbm 0:9a67044d749e 229
serbm 0:9a67044d749e 230
serbm 0:9a67044d749e 231 lcd.writeCommand (C4); // escribimos ONU comando segun el manual del módulo del LCD para quitar el cursor bajo
serbm 0:9a67044d749e 232 lcd.cls (); // Borra la Pantalla
serbm 0:9a67044d749e 233 . lcd printf ( "Guardados!" );
serbm 0:9a67044d749e 234 wait ( 2 );
serbm 0:9a67044d749e 235 lcd.cls ();
serbm 0:9a67044d749e 236 . lcd printf ( "INICIA EL PID" );
serbm 0:9a67044d749e 237 wait ( 2 );
serbm 0:9a67044d749e 238 // se imprimen los reseca del control de ************************************* ****
serbm 0:9a67044d749e 239
serbm 0:9a67044d749e 240 i = sp / 999 ;
serbm 0:9a67044d749e 241 lcd.cls ();
serbm 0:9a67044d749e 242 lcd. printf ( "Er:% 2F." , m);
serbm 0:9a67044d749e 243 lcd.locate ( 8 , 0 );
serbm 0:9a67044d749e 244 lcd. printf ( "Yo:% 2F." , j);
serbm 0:9a67044d749e 245 lcd.locate ( 0 , 1 );
serbm 0:9a67044d749e 246 lcd. printf ( "SP:% d" , sp);
serbm 0:9a67044d749e 247 lcd.locate ( 8 , 1 );
serbm 0:9a67044d749e 248 lcd. printf ( "Co: 1f%." , h);
serbm 0:9a67044d749e 249 wait ( 2 );
serbm 0:9a67044d749e 250
serbm 0:9a67044d749e 251 //
serbm 0:9a67044d749e 252 while ( 1 ) {
serbm 0:9a67044d749e 253
serbm 0:9a67044d749e 254 spi = sp * ( 3.3 / 999 );
serbm 0:9a67044d749e 255
serbm 0:9a67044d749e 256 //wait(0.3);
serbm 0:9a67044d749e 257 i = sp / 999 ;
serbm 0:9a67044d749e 258 if (i <= 1 ) {
serbm 0:9a67044d749e 259
serbm 0:9a67044d749e 260 j = Ain;
serbm 0:9a67044d749e 261 ji = j * 3.3 ;
serbm 0:9a67044d749e 262 m = (SPI-ji);
serbm 0:9a67044d749e 263 // N = m * 100;
serbm 0:9a67044d749e 264 ap = kp * m;
serbm 0:9a67044d749e 265 ai = (Ki * m) + ai;
serbm 0:9a67044d749e 266
serbm 0:9a67044d749e 267 ad = kd * (m-mv);
serbm 0:9a67044d749e 268 h = p + ai + ad;
serbm 0:9a67044d749e 269
serbm 0:9a67044d749e 270 si (h> 999 ) {
serbm 0:9a67044d749e 271 h = 999 ;
serbm 0:9a67044d749e 272 }
serbm 0:9a67044d749e 273 si (h < 0 ) {
serbm 0:9a67044d749e 274 h = 0 ;
serbm 0:9a67044d749e 275 }
serbm 0:9a67044d749e 276
serbm 0:9a67044d749e 277 g = (h / 999 );
serbm 0:9a67044d749e 278
serbm 0:9a67044d749e 279 Aout = g;
serbm 0:9a67044d749e 280 esperar ( 0,22 );
serbm 0:9a67044d749e 281
serbm 0:9a67044d749e 282
serbm 0:9a67044d749e 283 lcd.cls ();
serbm 0:9a67044d749e 284 lcd. printf ( "Er:% 2F." , m);
serbm 0:9a67044d749e 285 lcd.locate ( 8 , 0 );
serbm 0:9a67044d749e 286 lcd. printf ( "Yo:% 2F." , j);
serbm 0:9a67044d749e 287 lcd.locate ( 0 , 1 );
serbm 0:9a67044d749e 288 lcd. printf ( "SP:% d" , sp);
serbm 0:9a67044d749e 289 lcd.locate ( 8 , 1 );
serbm 0:9a67044d749e 290 lcd. printf ( "Co: 1f%." , h);
serbm 0:9a67044d749e 291 }
serbm 0:9a67044d749e 292
serbm 0:9a67044d749e 293
serbm 0:9a67044d749e 294 MV = m;
serbm 0:9a67044d749e 295 } // Si bien
serbm 0:9a67044d749e 296 //
serbm 0:9a67044d749e 297
serbm 0:9a67044d749e 298 } // Int main