(Solucionado)Guardar el valor de una variable aun despues de ser borrada

Buen dia,

este es mi 1er post, espero hacer todo debidamente y cumplir con las reglas.

Estoy realizando un programa para controlar unos motores a pasos, el cual sera controlado por
los valores introducidos de un Keypad y visualizados en una pantalla LCD.

Hasta donde he avanzado el programa funciona, se deben ingresar valores desde el Keypad y seleccionar la letra "A" para Enter, "C" para clear, "D" para delete y "B" para salir de los valores previamente ingresados despues de pulsar "A".

Al pulsar "A" la pantalla dira ajustando y posteriormente debe mostrar el valor que se ingreso previamente.
Ejemplo: "El valor actual es: 48x96" y quedarse ahi hasta que se presione "B" y volver a ingresar nuevos datos.

No he encontrado una manera de mostrar los datos ingresados despues de pulsar "A".
intente guardar la variable en la memoria EEPROM pero aun asi no logro visualizarla.
Se que mis valores estan siendo borrados cuando aplico el " lcd.clear()" mas no encuentro la manera
de como evitar esto.

Agradeciera mucho si alguien tiene una idea de como lograrlo, o alguna correccion de mi codigo ya que soy un principiante.

Muchas Gracias.

PD:Anexo algunas fotos del circuito.

#include <EEPROM.h>

#include <LiquidCrystal.h>
const int rs = A0, en = A1, d4 =A2, d5 = A3, d6 = A4, d7 = A5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  
#include <Keypad.h>
const byte Filas = 4; 
const byte Cols = 4; 
byte Pins_Filas[] = {9, 8, 7, 6}; 
byte Pins_Cols[] = {5, 4, 3, 2}; 

char Teclas [Filas][Cols] = {
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};
 
Keypad Teclado = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);


char Captura;
int pos =11;

void setup() {
lcd.begin(16, 2);
lcd.setCursor(3, 0);
lcd.write("BIENVENIDO");
lcd.setCursor(6, 1);
lcd.write("ATB");
delay(1000);
}
 
void loop() {
  
char Lectura=Teclado.getKey();
lcd.home();
lcd.write("INGRESE EL AXB");// numero de 2 digitos x 2 digitos
lcd.setCursor(0,1);
lcd.write ("DE LA HOJA:");
lcd.setCursor(11,1);
char valor=EEPROM.read(0);
    
  
 
if (Lectura!='A'&&Lectura!='B'&&Lectura!='C'&&Lectura!='D'&&Lectura!='#'){
    Captura=Lectura;
  }
  if(Captura){
  lcd.setCursor(pos,1);
  lcd.print(Captura);
  pos=pos+1;
  }

  switch(Lectura){
    EEPROM.write(0,Captura);
    case 'A':
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Ajustando");
    delay(1000);
    
    while(Teclado.getKey()!='B'){
    lcd.setCursor(0,0);
    lcd.print("AxB ACTUAL");
    lcd.setCursor(0,1);
    lcd.print(valor);  
    
       
 }   
    case 'C':
    lcd.clear();
    pos=11;
    break;

    case 'D':
    pos=pos-1;
   lcd.setCursor(pos,1);
   lcd.print(" ");
    
    break;
}
}

Tienes varios errores que iré explicando.
Cuando creas un switch case, cada case debe terminar con un break, de lo contrario se ejecutan 2 case como en el caso de 'A' y 'C' que es donde encuentra el break.

Asi que agrega un break al final del case 'A'

Otra falla que veo es esta

char valor = EEPROM.read(0);

como variable local de tu loop. O sea que con cada loop se inicializa al valor de la posicion 0?

Definela como global y la lees en el setup previo a ingresar a tu loop.

Pero no veo que tengas una contraparte write(0) que guarde el dato.. entonces te esta faltando eso.

El valor que guardaría valor es apenas un char no algo como lo que dices 48x96 que sería un array de chars.

Empieza definiendo el tamaño que tendrá ese ingreso por teclado.
y veo como te puedo ir ayudando para que el código haga lo que esperas.

Hola surbyte, gracias por tu pronta respuesta.

Es verdad la variable "valor" debia ir como global, error mio hehe.
la parte de "EEPROM.write" se encuentra dentro del case, lo puse ahi para que guardase el valor antes que nada, mas no se si sea correcto. De hecho utilizar la EEPROM no se si sea lo indicado para lo que quiero lograr.

Otro punto es que si agrego el break al final del case 'A' el programa se salta y vuelve al inicio donde dice "ingrese el valor AXB". Solo si no agrego el break entra dentro del while que puse. aunque tambien ya intente poner un

if(Captura=='B'{
break;
}

pero cumple la misma funcion de mi while.

Lo he logrado!

Tal vez mi codigo sea muy robusto y hay cosas que pueden hacerse de una forma mas facil, pero asi funciona como queria, por lo menos en la parte que llevo entre la interaccion del lcd con el keypad.

dejo mi codigo terminado por si esto le sirve a alguien mas.

#include <LiquidCrystal.h>
const int rs = A0, en = A1, d4 =A2, d5 = A3, d6 = A4, d7 = A5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  
#include <Keypad.h>
const byte Filas = 4; 
const byte Cols = 4; 
byte Pins_Filas[] = {9, 8, 7, 6}; 
byte Pins_Cols[] = {5, 4, 3, 2}; 

char Teclas [Filas][Cols] = {
	{'1','2','3','A'},
	{'4','5','6','B'},
	{'7','8','9','C'},
	{'*','0','#','D'}
};
 
Keypad Teclado = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);


char Captura;
int pos =11;
char valor[6];
byte Indice=0;

    
void setup() {
lcd.begin(16, 2);
lcd.setCursor(3, 0);
lcd.write("BIENVENIDO");
lcd.setCursor(6, 1);
lcd.write("ATB");
delay(1000);
}
 
void loop() {



char Lectura=Teclado.getKey();

lcd.home();
lcd.write("INGRESE EL AXB");// numero de 2 digitos x 2 digitos
lcd.setCursor(0,1);
lcd.write ("DE LA HOJA:");
lcd.setCursor(11,1);

  

  
  
  
 
if (Lectura!='A'&&Lectura!='B'&&Lectura!='C'&&Lectura!='D'&&Lectura!='#'){
    Captura=Lectura;
  }
  if(Captura&& pos<16){
  lcd.setCursor(pos,1);
  lcd.print(Captura);
  valor[Indice]=Captura;
   Indice++;
  pos=pos+1;
  }

  

  switch(Lectura){
  
    case 'A':
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Ajustando");
    delay(1000);
    
    while(Teclado.getKey()!='B'){
    lcd.setCursor(0,0);
    lcd.print("AxB ACTUAL");
    lcd.setCursor(0,1);
    lcd.print(valor); 
    Indice=0;
    pos=11;
    }
break;
    
    case 'C':
    lcd.clear();
    pos=11;
    Indice=0;
    break;

    case 'D':
    pos=pos-1;
    Indice--;
   lcd.setCursor(pos,1);
   lcd.print(" ");
    
    break;
}
}