Go Down

Topic: Calculadora con matrix 4x4 y LCD ( es para aprobar una materia) (Read 139 times) previous topic - next topic

TheRealMatus

Aug 21, 2017, 11:14 pm Last Edit: Aug 22, 2017, 06:01 am by surbyte Reason: No uses títulos como "Ayuda por favor"
Hola que tal les comento mi situacion, tengo q hacer una calculadora con arduino pero tiene que ser con un teclado matricial 4x4 y un display de 8bit el modelo es el 3641ah. El problema que tengo es que no puedo mostrar los digitos que ingreso con el teclado en el display, por ejemplo cuando un digito del 0 a 9 aparece en el display pero cuando ya tienen que ser mas de un digito no lo muestra. En el monitor serie lo pude hacer. Aca les dejo el programa que tengo

Code: [Select]
#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 = "";
int numeros ;


char cadena[9];  //para poder hacer la conversion a número
 
char Teclas [Filas][Cols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
 
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() {

  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
   //numeros = atof(PIN_Teclado.toCharArray); // numeros es un float.
    //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,false);
   lc.setDigit(0,6,(byte)numeros,false);
   lc.setDigit(0,5,(byte)numeros,false);
   lc.setDigit(0,4,(byte)numeros,false); ¨*/
   lc.setDigit(0,3,(byte)numeros,false);
   lc.setDigit(0,2,(byte)numeros,false);
   lc.setDigit(0,1,(byte)numeros,false);
   lc.setDigit(0,0,(byte)numeros,false);
   PIN_Teclado = ""; 
   break;
  }
}

IgnoranteAbsoluto

Prueba con esto a ver que tal va:
Code: [Select]
   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);


TheRealMatus

Prueba con esto a ver que tal va:
Code: [Select]
   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);

Le agrege los  demas lc set digit pero cuando ingreso un numero de 6 digitos no lo muestra en el display y en el monitor serie muestra cualquier numero, por ejemplo si yo quiero mostrar 100000 en el display no lo muestra pero en el monitor serie aparece como -315043 osea cualquier numero

IgnoranteAbsoluto

En lugar de declarar numeros de tipo int, prueba a declararlo de tipo long.

Cambiar:
Code: [Select]
int numeros ;
Por:
Code: [Select]
long numeros ;

Go Up