Solucion de un problema

Buenos días. Estoy programando una calculadora con un teclado matricial. Las operaciones y todo me lo hace bien, pero en el momento en que acaba de hacer la operación, me gustaría poder borrar lo que aparece en la pantalla LCD. Lo he intentado hacer con un botón aparte, el cual al presionarlo se borra lo que hay en pantalla. Lo borra de forma correcta, pero, después de hacer la limpieza de la LCD, no me deja volver a hacer operaciones. ¿Alguna idea de como lo puedo hacer?

#include <LiquidCrystal.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>

const byte files = 4; //cuatre  files.
const byte columnes = 4; //cuatre columnes.
char tecla[files][columnes] = {
  {'1','2','3','A'},
  {'4','5','6','+'},
  {'7','8','9','-'},
  {'*','0','=','/'}
};

byte pin_files[files] = {11,10,9,8}; //conectar-se a les potes de sortida de la fila del teclat.
byte pin_columnes[columnes] = {A1,A2,A3,A0}; //conectar-se a les potes de les columnes del teclat.

Keypad keypad = Keypad( makeKeymap(tecla), pin_files, pin_columnes, files, columnes );
LiquidCrystal_I2C lcd(0x27,16,2);

String llegeix_cadena1,llegeix_cadena2;
byte compta=0;
char a;
long dada1,dada2,resposta1;
float resposta2;


  
void setup(){
lcd.begin(16,2);
lcd.noCursor();
lcd.backlight();
Serial.begin(9600);

pinMode(10,INPUT);
pinMode(11,INPUT);
pinMode(12,INPUT);
pinMode(13,INPUT);

pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(13,OUTPUT);

}

void loop(){
  
  char key = keypad.getKey();
  

if (digitalRead(5) == HIGH){
  lcd.clear();

}

else{
   /*if((key=='A')&&(compta==0)){
     
      llegeix_cadena2="";
      llegeix_cadena1="";
      dada1=0;
      dada2=0;
      compta=0;
      resposta1=0;
      resposta2=0;
      //Serial.clear();*/
  
  
  if (key=='0'||key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9'){
    
      if(compta==0){
        lcd.print(key);
        llegeix_cadena1+=key;
        dada1=llegeix_cadena1.toInt();
      }
      
      else if(compta==1){
        lcd.print(key);
        llegeix_cadena2+=key;
        dada2=llegeix_cadena2.toInt();
      }
   
  }


  
if((key=='+'||key=='-'||key=='*'||key=='/')&&(compta==0)){
    compta++;
    a=key;
    lcd.print(a);
  }
  
 
    if(key=='=' && a=='+'){
  
    compta++;
    lcd.setCursor(0,1);
    resposta1 = dada1 + dada2;
    lcd.print("RPT=");
    lcd.print(resposta1);
    resposta1 == 0;


  }

  if(key=='=' && a=='-'){
    compta++;
    lcd.setCursor(0,1);
    resposta1 = dada1 - dada2;
    lcd.print("RPT=");
    lcd.print(resposta1);  
    resposta1 == 0;

  }
  if(key=='='&& a=='*'){
    compta++;
    lcd.setCursor(0,1);
    resposta1 = dada1 * dada2;
    lcd.print("RPT=");
    lcd.print(resposta1);
    resposta1 == 0;

  }
   if(key=='='&&a=='/'){
    compta++;
    lcd.setCursor(0,1);
    lcd.print("RPT=");
    resposta2 = ( float(dada1) / float(dada2) );
    lcd.print(resposta2);
    resposta2 == 0;
  

  }
     
  }

  }

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @ozajara .

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Moderador:
Por favor, lee las Normas del foro
Si posteas en el foro en inglés usa idioma inglés para expresarte.
Si escribes en español debes usar el foro Arduino en español.
Muy bien en como has posteado el código usando etiquetas.

He modificado el código para que funcione

#include <Keypad.h>
#include <LiquidCrystal_I2C.h>

// Definición de filas y columnas para el teclado
const byte numFilas = 4;
const byte numColumnas = 4;
char teclas[numFilas][numColumnas] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', '+'},
  {'7', '8', '9', '-'},
  {'*', '0', '=', '/'}
};

byte pin_files[files] = {11,10,9,8}; //conectar-se a les potes de sortida de la fila del teclat.
byte pin_columnes[columnes] = {A1,A2,A3,A0}; //conectar-se a les potes de les columnes del teclado.


Keypad teclado = Keypad(makeKeymap(teclas), pinesFilas, pinesColumnas, numFilas, numColumnas);
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Variables de operación
String num1 = "", num2 = "";
char operador;
bool esperandoSegundoNumero = false;
bool reset = false;

void setup() {
  lcd.begin(16, 2);
  lcd.backlight();
  Serial.begin(9600);

  // Pin para el botón de reset
  pinMode(5, INPUT);
}

// Función para reiniciar la calculadora
void resetCalculadora() {
  lcd.clear();
  num1 = "";
  num2 = "";
  operador = '\0';
  esperandoSegundoNumero = false;
}

// Función para realizar la operación seleccionada
void calcularResultado() {
  long resultadoInt;
  float resultadoFloat;

  // Convertir los números a enteros
  long numero1 = num1.toInt();
  long numero2 = num2.toInt();

  lcd.setCursor(0, 1);
  lcd.print("RPT=");
  reset = true;      // como se presenta el resultado en cuanto se ingrese una tecla se debe
                    // resetear la presentación.
  // Realizar la operación en función del operador
  switch (operador) {
    case '+':
      resultadoInt = numero1 + numero2;
      lcd.print(resultadoInt);
      break;
    case '-':
      resultadoInt = numero1 - numero2;
      lcd.print(resultadoInt);
      break;
    case '*':
      resultadoInt = numero1 * numero2;
      lcd.print(resultadoInt);
      break;
    case '/':
      if (numero2 != 0) {
        resultadoFloat = float(numero1) / float(numero2);
        lcd.print(resultadoFloat);
      } else {
        lcd.print("Error");
      }
      break;
  }
}

void loop() {
  // Verificar si el botón de reset está presionado
  if (digitalRead(5) == HIGH) {
    resetCalculadora();
    return;
  }

  char teclaPresionada = teclado.getKey();

  if (teclaPresionada) {
    if (reset) {
      lcd.clear();
      reset = false;
      resetCalculadora();
    }
    // Si es un número, agregarlo a la cadena correspondiente
    if (teclaPresionada >= '0' && teclaPresionada <= '9') {
      lcd.print(teclaPresionada);
      if (!esperandoSegundoNumero) {
        num1 += teclaPresionada;
      } else {
        num2 += teclaPresionada;
      }
    }
    // Si es un operador y aún no se ha ingresado el segundo número
    else if ((teclaPresionada == '+' || 
              teclaPresionada == '-' || 
              teclaPresionada == '*' || 
              teclaPresionada == '/') 
              && !esperandoSegundoNumero) {
      operador = teclaPresionada;
      lcd.print(operador);
      esperandoSegundoNumero = true;
    }
    // Si es el signo '=' y se han ingresado ambos números
      else if (teclaPresionada == '=' && esperandoSegundoNumero && num2 != "") {
      calcularResultado();
    }
  }
}

Muchas gracias por la ayuda y la siguiente vez seguiré las normas del foro.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.