Hola les comento, necesito hacer una calculadora con arduino que contenga un teclado matricial 4x4 y un display de 8bit el modelo es el 3641ah. Ya "hice" el programa pero obviamente contiene errores y necesito que me ayuden a resolverlo. Cuando ingreso un numero con el teclado por ejemplo 5, en el monitor serie aparece como 5 pero en el display me aparece 53 y lo que tambien sucede es que no puedo poner mas de un digito por ejemplo no puedo hacer 53+53
Por favor ayudenmen Gracias
les dejo el codigo
#include <Keypad.h>
#include <LedControl.h>
LedControl lc=LedControl(12,11,10,1);
const byte Filas = 4; //KeyPad de 4 filas
const byte Cols = 4; //y 4 columnas
byte Pins_Filas[] = {9,8,7,6}; //Pines Arduino para las filas.
byte Pins_Cols[] = {5,4,3,2}; // Pines Arduino para las columnas.
//char pulsacion;
//String PIN_Teclado = "";
long numeros ;
boolean inicio = false;
boolean final = false; // variables de control
long num1, num2;
//long ans;
char op;
//char cadena[9]; //para poder hacer la conversion a número
char Teclas [Filas][Cols] = {
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','x'},
{'*','0','=','/'}
};
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);
//CONFIGURACION PARA EL DATO SERIE//
void setup()
{
// Inicializa el modulo
lc.shutdown(0,false);
// Ajuste del brillo del display
lc.setIntensity(0,3);
// Apaga el display
lc.clearDisplay(0);
Serial.begin(9600);
}
void loop()
{
char key = Teclado1.getKey();
if (key != NO_KEY && (key=='1' || key=='2' || key=='3' || key=='4' || key=='5' || key=='6' || key=='7' || key=='8' || key=='9' || key=='0'))
{
if(inicio == true)
{num1 = key;
Serial.print(key);
lc.setDigit(0,7,(byte)((num1 / 10000000) % 10),false);
lc.setDigit(0,6,(byte)((num1 / 1000000) % 10),false);
lc.setDigit(0,5,(byte)((num1 / 100000) % 10),false);
lc.setDigit(0,4,(byte)((num1 / 10000) % 10),false);
lc.setDigit(0,3,(byte)((num1 / 1000) % 10),false);
lc.setDigit(0,2,(byte)((num1 / 100) % 10),false);
lc.setDigit(0,1,(byte)((num1 / 10) % 10),false);
lc.setDigit(0,0,(byte)(num1 % 10),false);
}
else
{num2 = key;
Serial.print(num2);
lc.setDigit(0,7,(byte)((num2 / 10000000) % 10),false);
lc.setDigit(0,6,(byte)((num2 / 1000000) % 10),false);
lc.setDigit(0,5,(byte)((num2 / 100000) % 10),false);
lc.setDigit(0,4,(byte)((num2 / 10000) % 10),false);
lc.setDigit(0,3,(byte)((num2 / 1000) % 10),false);
lc.setDigit(0,2,(byte)((num2 / 100) % 10),false);
lc.setDigit(0,1,(byte)((num2 / 10) % 10),false);
lc.setDigit(0,0,(byte)(num2 % 10),false);
final = true;
}
}
if (inicio == false && key != NO_KEY && (key == '+' || key == '-' || key == 'x' || key == '/'))
{inicio = true;
op = key;
Serial.print (op);
}
if (final == true && key !=NO_KEY && key == '=')
{
if (op == '+')
{numeros= num1 + num2;}
if (op == '-')
{numeros= num1 - num2;}
if (op == 'x')
{numeros= num1 * num2;}
if (op == '/')
{numeros= num1 / num2;}
Serial.print("=");
Serial.print(numeros);
lc.setDigit(0,7,(byte)((numeros / 10000000) % 10),false);
lc.setDigit(0,6,(byte)((numeros / 1000000) % 10),false);
lc.setDigit(0,5,(byte)((numeros / 100000) % 10),false);
lc.setDigit(0,4,(byte)((numeros / 10000) % 10),false);
lc.setDigit(0,3,(byte)((numeros / 1000) % 10),false);
lc.setDigit(0,2,(byte)((numeros / 100) % 10),false);
lc.setDigit(0,1,(byte)((numeros / 10) % 10),false);
lc.setDigit(0,0,(byte)(numeros % 10),false);
}
if(key !=NO_KEY && key == '*')
{
inicio = false;
final = false;
num1 = "";
num2 = "";
numeros = 0;
op = ' ';
}
/* pulsacion = Teclado1.getKey();
switch (pulsacion) {
case '*': // Punto decimal
delay(30);
case '0' ... '9': // o dígitos,
delay(30);
PIN_Teclado += pulsacion;
break;
case '#': // Lo tomaremos como enter para guardar el dato
delay(30);
PIN_Teclado.toCharArray( cadena, 9);
numeros = atof (cadena);
Serial.println(numeros);
lc.setDigit(0,7,(byte)((numeros / 10000000) % 10),false);
lc.setDigit(0,6,(byte)((numeros / 1000000) % 10),false);
lc.setDigit(0,5,(byte)((numeros / 100000) % 10),false);
lc.setDigit(0,4,(byte)((numeros / 10000) % 10),false);
lc.setDigit(0,3,(byte)((numeros / 1000) % 10),false);
lc.setDigit(0,2,(byte)((numeros / 100) % 10),false);
lc.setDigit(0,1,(byte)((numeros / 10) % 10),false);
lc.setDigit(0,0,(byte)(numeros % 10),false);
PIN_Teclado = "";
break;
}*/
}
Calculadora.ino (4.02 KB)