Go Down

Topic: Display de 7 segmentos mas teclado 4X4 (Read 1 time) previous topic - next topic

will119

Jul 02, 2017, 02:12 pm Last Edit: Jul 02, 2017, 03:39 pm by will119
Intento mostrar números de dos dígitos en dos display de 7 segmentos (luego se replicara en un tablero con tiras de led) con un teclado matricial de 4x4.

El problema es que al presionar el numero A muestra en cualquiera de los dos display(A o B) y con el numero B pasa lo mismo.

Al parecer el problema esta en mi lógica.

Adjunto código.
Muchas gracias de antemano.

Code: [Select]
#include <Keypad.h>

void displayA(int a, int b, int c, int d, int e, int f, int g){
  digitalWrite(22,a);
  digitalWrite(23,b);
  digitalWrite(24,c);
  digitalWrite(25,d);
  digitalWrite(26,e);
  digitalWrite(27,f);
  digitalWrite(28,g);
}

void displayB(int a1, int b1, int c1, int d1, int e1, int f1, int g1){
  digitalWrite(29,a1);
  digitalWrite(30,b1);
  digitalWrite(31,c1);
  digitalWrite(32,d1);
  digitalWrite(33,e1);
  digitalWrite(34,f1);
  digitalWrite(35,g1);
}

void actulizarNroA(char numeroA){
  switch(numeroA){
    case '0':
        displayA(1,1,1,1,1,1,1);
    break;
    case '1':
        displayA(0,1,1,0,0,0,0);
    break;
    case '2':
        displayA(1,1,0,1,1,0,1);
    break;
    case '3':
        displayA(1,1,1,1,0,0,1);
    break;
    case '4':
        displayA(0,1,1,0,0,1,1);
    break;
    case '5':
        displayA(1,0,1,1,0,1,1);
    break;
    case '6':
        displayA(1,0,1,1,1,1,1);
    break;
    case '7':
        displayA(1,1,1,0,0,0,0);
    break;
    case '8':
        displayA(1,1,1,1,1,1,1);
    break;
    case '9':
        displayA(1,1,1,0,0,1,1);
    break;
  }
}

void actulizarNroB(char numeroB){
  switch(numeroB){
    case '0':
        displayB(1,1,1,1,1,1,1);
    break;
    case '1':
        displayB(0,1,1,0,0,0,0);
    break;
    case '2':
        displayB(1,1,0,1,1,0,1);
    break;
    case '3':
        displayB(1,1,1,1,0,0,1);
    break;
    case '4':
        displayB(0,1,1,0,0,1,1);
    break;
    case '5':
        displayB(1,0,1,1,0,1,1);
    break;
    case '6':
        displayB(1,0,1,1,1,1,1);
    break;
    case '7':
        displayB(1,1,1,0,0,0,0);
    break;
    case '8':
        displayB(1,1,1,1,1,1,1);
    break;
    case '9':
        displayB(1,1,1,0,0,1,1);
    break;
  }
}

//Teclado
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {36, 37, 38, 39};
byte colPins[COLS] = {40, 41, 42, 43};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

char digitos[2];
char key;
byte i;

void setup(){
  for(int i=22;i<36;i++){
    pinMode(i,OUTPUT);
  }
}
  
void loop(){
  for(i=0;i<2;i++){
    key = keypad.getKey();
    digitos[i] = key;
  }
  actulizarNroA(digitos[0]);
  actulizarNroB(dígitos[1]);
}

aarg

¡Usted envía los mismos datos a ambas exhibiciones, por supuesto que parecen iguales!
Code: [Select]
  actulizarNroA(key);
  actulizarNroB(key);
  ... with a transistor and a large sum of money to spend ...
Please don't PM me with technical questions. Post them in the forum.

will119

Cometí un error al publicar mi código.
Con la corrección siguiente presenta el problema que mencioné anteriormente.
Code: [Select]

actulizarNroA(digitos[0]);
actulizarNroB(dígitos[1]);

Go Up