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 a 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 a recapturar el dato, investigando veo que los datos que se introducen con el Teclado Matricial son del tipo CHAR y deben ser convertidos a 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. :confused: :slight_smile:

                              #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 a estos pins de arduino MEGA
                              byte rowPins[FILAS]={42,44,46,48};
                                      //conectar los pines COL0, COL1, COL2, COL3 a 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 a = 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 for 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 A 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 he revisado en profundidad tu código, pero hacer una conversión (“casting”) de los “tipos primitivos” es muy sencillo. Por ejemplo:

Serial.print(key);

Es obvio que te va a imprimir un caracter si la variable key es de tipo char. Para imprimir su valor número, se realiza la conversión “al momento”.

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 </>

Gracias Lucario448, en realidad estoy teneindo problemas al convertir el texto que se ingresa con el Keypad este lo tengo dado de alta como CHAR, y requiero convertirlo a Integer para almacnarlo en una variable y mas adelante hacer una operaciones de suma o resta.

El valor ingresado por keypad llega como caracter, asi que cada vez que leas un dato le quitas 48 o le quitas ´0’ y tendras el número en valor entero.
Si ingresas un segundo número lo que debes hacer es multiplicar el primero por 10 y sumar el segundo y asi vas conformando el entero, siempre y cuando no supere los límetes de éstos.

NOTA: Te recomiendo que leas las normas del foro y luego edites tu código, esta mal posteado. Debes ir a More, luego Modify y luego podrás editar. Selecciona todo el código y click en </> que es el tag para postear códigos.
NO olvides hacerlo!!

Acá solo he emprolijado el código para que sea entendible, así debe verse tu primer post.
Pero no veo como pasas datos desde el el keypad a tus variables, asi que ahi hay que poner el foco de atención.

#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 a estos pins de arduino MEGA
byte rowPins[FILAS] = {42,44,46,48};
//conectar los pines COL0, COL1, COL2, COL3 a estos pins de arduino
                                      
byte colPins[COLS] = {43,45,47,49};
//crear el keypad
Keypad keypad = Keypad(makeKeymap(keys),rowPins,colPins, FILAS, COLS);

char key;
char buffer[4];
int i; //loop key counter for counting number of keys pressed
int x; //used to multiply each digit entered by 1 then 10 then 100 etc

void setup() {
  // inicia serial 
  Serial.begin(9600);
  // Limpia el LCD para indicar que inicie el programa        
  lcd.clear();
  lcd.print("# PARA INICIAR");
  delay (1000);
}
 
void loop(){
 
void loop()  { // Loop principal 
                                  
  
  char fr[]   = "fr=";
  char str[]  = "str=";
  int a       = str[3]-48;
  int b       = str[4]-48;
  int c       = str[5]-48;
  int d       = str[6]-48;
  int abcd    = 0;
                                          
  char key = keypad.getKey();

  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 for 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;
                }
                
        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;
        case 'A': //al presionar A 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

Gracias Surbyte por tus comentarios ya he hecho la modificacion al codigo.