//En caso de no funcinar correctamente, sugiero cambiar los pines
//de la LDC, pines de filas, columnas y el Keypad 4x4 a otros
//Ejemplo(para reemplazar)
//LiquidCrystal lcd (13,12,14,27,26,25);
#include <LiquidCrystal.h>
#include <Keypad.h>
////////////////////////
LiquidCrystal lcd(22,23,5,18,19,21);
const byte COLUMNAS = 4;
const byte FILAS = 4;
char teclas [FILAS] [COLUMNAS] = {
{'1','4','7','X'},
{'2','5','8','0'},
{'3','6','9','='},
{'+','-','*','/'}
};
byte filasPines[FILAS] = {2,15,13,12}; //Definicion de lineas
byte columnasPines[COLUMNAS] = {17,16,4,0}; //Definicion de lineas
Keypad miTeclado = Keypad( makeKeymap(teclas), filasPines, columnasPines, FILAS, COLUMNAS);
boolean valorActual = false;
boolean siguiente = false;
boolean final = false;
String numero1, numero2, numero3;
int calculoTotal;
int movimiento;
char operacion;
float r1, r2, r3, r4;
float decimal;
int contador = 0;
//Cada que se inicie el Arduino se volvera a ejecutar la funcion setup
void setup(){
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("CALCULADORA");
lcd.setCursor(1,1);
lcd.print("OP. BASICAS JC");
delay(2500);
lcd.clear();
lcd.setCursor(5,0);
lcd.print("SUMA, RESTA");
lcd.setCursor(1,1);
lcd.print("MULTI Y DIV");
delay(2500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(">");
}
//bucle
void loop()
{
char tecla = miTeclado.getKey();
int longitudDelNumero;
//Verificacion de una tecla presionada
if(tecla != NO_KEY && (tecla=='1'|| tecla=='2'||
tecla=='3'|| tecla=='4'|| tecla=='5'|| tecla=='6'||
tecla=='7' || tecla=='8'|| tecla=='9'|| tecla=='0'))
{
//Variables
if(contador == 1){
lcd.clear();
valorActual = false;
final = false;
numero1 ="";
numero2 ="";
calculoTotal = 0;
operacion = ' ';
lcd.setCursor(0,0);
lcd.print(">");
contador=0;
}
if(valorActual != true){
numero1 = numero1 + tecla;
longitudDelNumero = numero1.length();
movimiento = longitudDelNumero;
lcd.setCursor(1,0);
lcd.print(numero1);
}else{
numero2 = numero2 + tecla;
longitudDelNumero = numero2.length();
lcd.setCursor(movimiento+2, 0);
lcd.print(numero2);
final = true;
}
}else if((tecla == '+' || tecla == '-' || tecla=='*'
|| tecla=='/') && valorActual == false && tecla != NO_KEY)
{
if(valorActual == false){
valorActual = true;
operacion = tecla;
lcd.setCursor(movimiento+1,0);
lcd.print(operacion);
}
} else if (final == true && tecla != NO_KEY && tecla == '=')
{
//Seleccion de operaciones
switch(operacion){
case '+':
//SUMA
calculoTotal = numero1.toInt() + numero2.toInt();
break;
case '-':
//RESTA
calculoTotal = numero1.toInt() - numero2.toInt();
break;
case '*':
//MULTIPLICACION
calculoTotal = numero1.toInt() * numero2.toInt();
break;
case '/':
//DIVISION
if(numero2.toInt()==0){
calculoTotal = 'E';
}else
{
calculoTotal = (numero1.toInt())/ (numero2.toInt());
r1=numero1.toInt();
r2=numero2.toInt();
decimal= r1/r2;
}
break;
default:
//si nada coincide se elige esta opcion
break;
}
numero3=String(calculoTotal);
lcd.clear();
lcd.setCursor(15,0);
//lcd.autoscroll();
if(calculoTotal=='E'){
lcd.print("Err. de Sintaxis");
}else if(numero3.length()>5){
lcd.print("*Sin Memoria");
}else{
if(operacion == '/') {lcd.print(decimal,2);}
else{
lcd.setCursor(0,0);
lcd.print(numero1);
lcd.setCursor(movimiento,0);
lcd.print(operacion);
lcd.setCursor(movimiento+1,0);
lcd.print(numero2);
lcd.setCursor(0,1);
lcd.print("=");
lcd.setCursor(1,1);
lcd.print(calculoTotal);};
contador=1;
}
lcd.noAutoscroll();
}else if(tecla== 'X' && tecla != NO_KEY){
lcd.clear();
valorActual = false;
final = false;
numero1 = "";
numero2 = "";
calculoTotal = 0;
operacion = ' ';
lcd.setCursor(0,0);
lcd.print(">");
}
}