teclado lcd
Dependencies: TextLCD keypad mbed
Diff: main.cpp
- Revision:
- 0:9a67044d749e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Feb 25 14:21:11 2017 +0000 @@ -0,0 +1,298 @@ +# include "mbed.h" +# include "keypad.h" +# include "TextLCD.h" + + + TextLCD lcd (D15,D14,D13,D12,D11,D10); // RS, e, d4-d7 + + AnalogIn Ain (A0); + AnalogOut Aout (A2); + +int C4 = 0x0C ; +int C1 = 0x0E ; +int p = 0 ; + +int c = 0 ; +int y = 0 ; +float i; // establecer el punto +float j = 0 ; // salida planta +float ji = 0 ; // variable de Proceso interno +float spi = 0 ; // variable de Proceso interno +float h = 0 ; // entrada planta +float m = 0 ; // Error +float mv = 0 ; +float g = 0 ; + + + float ap, ai; + int sp = 0 ; + int kp = 0 ; + int ki = 0 ; + int k = 0 ; + + + + + // Definir sus propios valores del teclado +char tabla de teclas [] = { '1' , '2' , '3' , '*' , + '4' , '5' , '6' , '0' , + '7' , ' 8 ' , ' 9 ' , ' # ' , + ' A ' , ' B ' , ' C ' , ' D '}; + + int Teclado [] = { 1 , 4 , 7 , 13 , + 2 , 5 , 8 , 0 , + 3 , 6 , 9 , 14 , + 10 , 11 , 12 , 15 + }; + + uint32_t cbAfterInput ( uint32_t clave) + { + + if (KEYPAD [clave] == 'A' ) + { + Teclado [clave] = 0 ; + C ++; + } + + if (KEYPAD [clave] == 'B' ) { + Teclado [clave] = 0 ; + sp = 0 ; + kp = 0 ; + ki = 0 ; + kd = 0 ; + } + + + if (KEYTABLE [clave] == 'D' ) { + Teclado [clave] = 0 ; + p = 1 ; + } + +//////////// + + if (c == 0 ) { + + SP = SP + Teclado [clave]; + + } + + if (c == 1 ) { + + kp kp = + Teclado [clave]; + + } + if (c == 2 ) { + + ki ki = + Teclado [clave]; + + } + if (c == 3 ) { + + KD = kd + Teclado [clave]; + + } + +//////////// + + + volver 0 ; + } // Fin unit32_t + + + + int main () { + teclado teclado (D9,D8,D7,D6,D5,D4,D3,D2); + keypad.CallAfterInput (y cbAfterInput); + keypad.Start (); + + lcd.cls (); + lcd. printf ( "SP:% d" , sp); + lcd.locate ( 8 , 0 ); + lcd. printf ( "Kp:% d" , kp); + lcd.locate ( 0 , 1 ); + lcd. printf ( "Ki:% d" , ki); + lcd.locate ( 8 , 1 ); + lcd. printf ( "Kd:% d" , kd); + lcd.writeCommand (C1); // escribimos ONU comando segun el manual del módulo del LCD + lcd.locate ( 0 , 0 ); + lcd. printf ( "SP:% d" , sp); + + mientras que ( 1 ) { + + + if (c == 0 ) { + lcd.locate ( 3 , 0 ); + . lcd putc ( 0xFE ); + lcd.locate ( 4 , 0 ); + lcd. printf ( "% d" , sp); + + // NUEVO !! (no ceros en - proceso) + if (sp < 10 ) { + lcd.locate ( 5 , 0 ); + . lcd putc ( 0xFE ); + } + + if (sp < 100 ) { + lcd.locate ( 6 , 0 ); + . lcd putc ( 0xFE ); + } + + lcd.locate ( 4 , 0 ); + lcd. printf ( "% d" , sp); + //wait(0.1); + + // + + } + + if (c == 1 ) { + lcd.locate ( 11 , 0 ); + . lcd putc ( 0xFE ); + lcd.locate ( 12 , 0 ); + lcd. printf ( "% d" , kp); + + // NUEVO !! (no ceros en - proceso) + if (kp < 10 ) { + lcd.locate ( 13 , 0 ); + . lcd putc ( 0xFE ); + } + + if (kp < 100 ) { + lcd.locate ( 14 , 0 ); + . lcd putc ( 0xFE ); + } + + lcd.locate ( 12 , 0 ); + lcd. printf ( "% d" , kp); + //wait(0.1); + + // + + } + + if (c == 2 ) { + lcd.locate ( 3 , 1 ); + . lcd putc ( 0xFE ); + lcd.locate ( 4 , 1 ); + lcd. printf ( "% d" , ki); + + // NUEVO !! (no ceros en - proceso) + if (Ki < 10 ) { + lcd.locate ( 5 , 1 ); + . lcd putc ( 0xFE ); + } + + if (ki < 100 ) { + lcd.locate ( 6 , 1 ); + . lcd putc ( 0xFE ); + } + + lcd.locate ( 4 , 1 ); + lcd. printf ( "% d" , ki); + //wait(0.2); + + // + + } + if (c == 3 ) { + lcd.locate ( 11 , 1 ); + . lcd putc ( 0xFE ); + lcd.locate ( 12 , 1 ); + lcd. printf ( "% d" , kd); + + // NUEVO !! (no ceros en - proceso) + if (kd < 10 ) { + lcd.locate ( 13 , 1 ); + . lcd putc ( 0xFE ); + } + + if (kd < 100 ) { + lcd.locate ( 14 , 1 ); + . lcd putc ( 0xFE ); + } + + lcd.locate ( 12 , 1 ); + lcd. printf ( "% d" , kd); + //wait(0.2); + } + + if (c == 4 || c> 4 ) { + c = 0 ; + } + + if (p == 1 ) { + c = 0 ; + romper ; + } + + } + + + lcd.writeCommand (C4); // escribimos ONU comando segun el manual del módulo del LCD para quitar el cursor bajo + lcd.cls (); // Borra la Pantalla + . lcd printf ( "Guardados!" ); + wait ( 2 ); + lcd.cls (); + . lcd printf ( "INICIA EL PID" ); + wait ( 2 ); + // se imprimen los reseca del control de ************************************* **** + + i = sp / 999 ; + lcd.cls (); + lcd. printf ( "Er:% 2F." , m); + lcd.locate ( 8 , 0 ); + lcd. printf ( "Yo:% 2F." , j); + lcd.locate ( 0 , 1 ); + lcd. printf ( "SP:% d" , sp); + lcd.locate ( 8 , 1 ); + lcd. printf ( "Co: 1f%." , h); + wait ( 2 ); + + // + while ( 1 ) { + + spi = sp * ( 3.3 / 999 ); + + //wait(0.3); + i = sp / 999 ; + if (i <= 1 ) { + + j = Ain; + ji = j * 3.3 ; + m = (SPI-ji); + // N = m * 100; + ap = kp * m; + ai = (Ki * m) + ai; + + ad = kd * (m-mv); + h = p + ai + ad; + + si (h> 999 ) { + h = 999 ; + } + si (h < 0 ) { + h = 0 ; + } + + g = (h / 999 ); + + Aout = g; + esperar ( 0,22 ); + + + lcd.cls (); + lcd. printf ( "Er:% 2F." , m); + lcd.locate ( 8 , 0 ); + lcd. printf ( "Yo:% 2F." , j); + lcd.locate ( 0 , 1 ); + lcd. printf ( "SP:% d" , sp); + lcd.locate ( 8 , 1 ); + lcd. printf ( "Co: 1f%." , h); + } + + + MV = m; + } // Si bien + // + + } // Int main \ No newline at end of file