Como convertir datos del tipo CHAR a INT para visualizarse en LCD.


hola buenas tardes, esperando alguien me pueda ayudar tengo el siguiente problema estoy haciendo un programa en donde debo capturar 5 numeros al termino del ingreso de estos, el usuario presione a, para  despues regresarlos al lcd como metodo de confirmacion al usuario para que verifique en pantalla  los datos que ha ingresado esto seria el dato que corresponde una orden de trabajo (wo) o partida de trabajo y debo almacenarlo en una variable para despues mandarla llamar, si el dato capturado fuera erroneo presionar "c" para corregir y vuelva recapturar el dato, investigando veo que los datos que se introducen con el teclado matricial son del tipo char y deben ser convertidos integer para almacenarse en una variable y despues ser desplegados en el lcd soy nuevo en esto de la programacion en arduino por si ven errores garrafales en mi codigo o algo que se pueda mejorar la ayuda es bienvenida, anexo mi codigo y mil gracias de antemano.  :smiley-confuse:  :)

                                             
                   
code: [select]
                              #include <string.h>
                                                  #include <keypad.h>
                                                  #include<liquidcrystal.h>
                                                                liquidcrystal lcd(31,33,35,37,39,41);

                     
                       const byte filas=4; //cuatro filas
                       const byte cols=4; //cuatro columnas
                       char keys[filas][cols]={                      //definimos el keymap
                                              {'1','2','3','a'},
                                              {'4','5','6','b'},
                                              {'7','8','9','c'},
                                              {'*','0','#','d'}
                                              };

                                       //conectar los pines fila0,fila1,fila2,fila3 estos pins de arduino mega
                              byte rowpins[filas]={42,44,46,48};
                                      //conectar los pines col0, col1, col2, col3 estos pins de arduino
                                     
                              byte colpins[cols]={43,45,47,49};
                                      //crear el keypad
                                          keypad keypad = keypad(makekeymap(keys),rowpins,colpins, filas, cols);
            void setup() {  
                                       //inicia serial
                                      { serial.begin(9600);}
                                      //limpia el lcd para indicar que inicie el programa        
                                       lcd.clear();
                                           delay (1000);
                                       lcd.print("# para iniciar");
                                           delay (1000);
                                                                       
            void loop()  { // loop principal
                                 
                                         char key = keypad.getkey();
                                         char fr[]="fr=";
                                         char str[]="str=";
                                         int = str[3]-48;
                                         int b = str[4]-48;
                                         int c = str[5]-48;
                                         int d = str[6]-48;
                                         int abcd = 0;
                                         
                                     if (key != 0)
                                                 lcd.print(key);
                                       
                                       
                                         
                                      switch (key)
                                          {
                                            case '#':    //inicia el programa presionando #
                                                  lcd.begin(16,2);
                                                      delay (1000);
                                                  lcd.print("ingrese partida:"); //mensaje linea 1 del ldc
                                                      delay (1000);
                                                  lcd.setcursor(0,1);
                                                  lcd.print("espere.....");//mensaje linea 2 del lcd
                                                      delay (1000);
                                                  lcd.blink(); //inicia el blink en lcd
                                                      delay (1000);
                                              //while (!keypad.getkey()); // wait characters
                                                 if (str[0] == fr[0] & str[1] == fr[1] & str[2]==fr[2])
                                            {
                                                      serial.print("value send: ");
                                                      serial.print(key);
                                             
                                                 
                                                  if (a==-48 & b==-48 & c==-48 & d==-48)
                                            {    
                                                      abcd = 0;
                                            }

                                            }
                                            else if (a>=0 & b>=0 & c>=0 & d>=0)

                                            {
                                                      abcd = a*1000 + b*100 + c*10 + d;
                                            }
                                            else if (d==-48 & a>=0 & b>=0 & c>=0)
                                            {
                                                      abcd = a*100 + b*10 + c;
                                            }
                                            else if (d==-48 & c==-48 & a>=0 & b>=0 )
                                            {
                                                      abcd = a*10 + b;
                                            }
                                            else if (d==-48 & c==-48 & b==-48 & a>=0)
                                            {
                                                       abcd = a;
                                            }
                                            else
                                            {
                                                       abcd = 0;
                                            }
                                                       serial.println(abcd);
                                             break;
                                            }
                                       switch (key)
                                            {
                                            case 'c':   //en caso de error de captura borra lcd.
                                                     lcd.clear();
                                                         serial.println(key);
                                                         delay (1000);
                                                     lcd.blink(); //inicia el blink en lcd
                                                         delay (1000);
                                                         break;
                                            }
                                       switch (key)
                                            {
                                            case 'a':   //al presionar guarda la variable partida y la confirma en pantalla
                                                          serial.println(key);
                                                      lcd.begin(16,2);
                                                      lcd.print("capturo partida:");
                                                      lcd.setcursor(0,1);
                                                     
                                                   
                                                          break;
                                             }
                                             } //fin del loop principal

no revisado en profundidad tu código, pero hacer una conversión ("casting") de los "tipos primitivos" es muy sencillo. por ejemplo:

code: [select]
serial.print(key);
es obvio que te va imprimir un caracter si la variable key es de tipo char. para imprimir su valor número, se realiza la conversión "al momento".

code: [select]
serial.print((int)key);
el formato es el siguiente: (tipo_de_dato_a_convertir)nombre_de_la_variable


algo que quizá no sabías, es que es válido almacenar un caracter el cualquier tipo de variable; excepto en los de "tipo objeto". almacenar un caracter en un float/double no sé si será posible.



pd: edita el primer post, porque el código debe ir entre etiquetas generadas por </>


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Como convertir datos del tipo CHAR a INT para visualizarse en LCD.


arduino

Comments

Popular posts from this blog

Error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode - Raspberry Pi Forums

class MPU6050 has no member named begin

missing filename after '-o'