Tablero de sustitucion de jugadores con arduino

Publicado el: 19 de junio de 2019
Principiante
Acerca de este proyecto
El tipico tablero de cambio de jugadores utilizando un solo teclado hexadecimal y arduino.
arduino displays
Publicidad
DETALLES

Este proyecto consiste en la simulación de un tablero marcador del cambio de sustitución de jugadores,como los que se muestran en los partidos de fútbol al momento de realizar un cambio. Los tableros comerciales o profesionales utilizan doble pantalla de manera que se visualicen los numeros por ambos lados,pero en este proyecto, por simplicidad, solo utilizaremos una sola, utilizando 4 displays de 7 segmentos: (2 para mostrar el numero del jugador que ingresa, y otros 2 para mostrar el numero del jugador que sale).

Tablero comercial

LISTA DE MATERIALES

  • Arduino uno o equivalente.
  • Circuito integrado 74LS47
  • 4 displays de siete segmentos de ánodo común.
  • 4 transistores NPN (2N3904 o equivalente)
  • 7 resistencias de 100 ohms 0 220 ohms
  • Teclado hexadecimal.
  • Cables de conexion

DIAGRAMA ESQUEMÁTICO


VIDEO DE FUNCIONAMIENTO


CODIFICACIÓN
Codigo arduino-
Este codigo es el que hay que cargarle a la tarjeta arduino.
/* Código que simula un tablerdo de sustitución de jugadores
 *  Realizado por José Luis Bejarano Vásquez (sistemasymicros)
 * Fecha: 12/09/2017

youtube: www.youtube.com/c/sistemasymicros1
Facebook y Twitter: sistemasymicros

 */
#include <Keypad.h>

boolean habilitaSale = false;
boolean habilitaEntra = false;

char cifra_numero[2]; //Almacena las 2 cifras digitadas en el teclado
String cifra_limite = String(); //Almacena las 4 cifras 

String cifra1 = String();  //primera cifra del número presionado
String cifra2 = String(); //segunda cifra del número presionado
String cifra3 = String(); //tercera cifra del número presionado
String cifra4 = String(); //Cuarta cifra del número presionado

// ********* Configuración del 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] = {13,6,5,4}; //Filas
byte colPins[COLS] = {3,2,1,0}; //Columnas 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

//***************************************************************************
// Pines conectados a las entradas A B C D del decodificador 7447
const int A = 7;
const int B = 8;
const int C = 9;
const int D = 10;
//***************************************************************************
const int displayUnidadesSale = 15; //Pin analógico 1 (A1)
const  int displayDecenasSale = 11;
const  int displayUnidadesEntra = 12;
const int displayDecenasEntra = 14; //Pin analógico 0 (A0)


int cuenta =  0;        //Lleva la cuenta de las teclas presionadas
const int tiempo = 5;  //Tiempo en milisegunos del multiplexado

int numero = 0;

int unidades = 0;
int decenas = 0;
int centenas = 0;
int millares=0;
//************************************************************************

void setup() 
{
  pinMode(A,OUTPUT);
  pinMode(B,OUTPUT);
  pinMode(C,OUTPUT);
  pinMode(D,OUTPUT); 

  pinMode(displayUnidadesEntra,OUTPUT);
  pinMode(displayDecenasEntra,OUTPUT);
  pinMode(displayUnidadesSale,OUTPUT);
  pinMode(displayDecenasSale,OUTPUT);
      
  digitalWrite(displayUnidadesEntra,HIGH);
  digitalWrite(displayDecenasEntra,HIGH);
  digitalWrite(displayUnidadesSale,HIGH);
  digitalWrite(displayDecenasSale,HIGH);

   
 }




 void escribirBcd(byte num)
{
  digitalWrite(A, (num&1)==1);
  digitalWrite(B, (num&2)==2);
  digitalWrite(C, (num&4)==4);
  digitalWrite(D, (num&8)==8);
}

void habilitarUnidadesSale()
{
  escribirBcd(unidades);
  digitalWrite(displayUnidadesSale,HIGH);
  digitalWrite(displayDecenasSale,LOW);
  digitalWrite(displayUnidadesEntra,LOW);
  digitalWrite(displayDecenasEntra,LOW);
  delay(tiempo);
}  

void habilitarDecenasSale()
{
  escribirBcd(decenas);
  digitalWrite(displayUnidadesSale,LOW);
  digitalWrite(displayDecenasSale,HIGH);
  digitalWrite(displayUnidadesEntra,LOW);
  digitalWrite(displayDecenasEntra,LOW);
  delay(tiempo);
}  

void habilitarUnidadesEntra()
{
  escribirBcd(centenas);
  digitalWrite(displayUnidadesSale,LOW);
  digitalWrite(displayDecenasSale,LOW);
  digitalWrite(displayUnidadesEntra,HIGH);
  digitalWrite(displayDecenasEntra,LOW);
  delay(tiempo);
}

void habilitarDecenasEntra()
{
  escribirBcd(millares);
  digitalWrite(displayUnidadesSale,LOW);
  digitalWrite(displayDecenasSale,LOW);
  digitalWrite(displayUnidadesEntra,LOW);
  digitalWrite(displayDecenasEntra,HIGH);
  delay(tiempo);
}
 
void loop() 
{


char key = keypad.getKey();
         
if(key) 
  { 
    if(key=='A')
    {
      habilitaSale=true;
      habilitaEntra=false;      
      cuenta=0;
                 
    }

    if(key=='B')
    {
      habilitaEntra=true;
      habilitaSale=false;
      cuenta=0;
    }

    if(key=='C')
    {
      numero=0;
    }
          
     if(key!='A' && key!='B' && key!='C' && key!='D')
    {

     //Se habilitan los displays de los números del jugador que SALE
     if(habilitaSale==true)
     {
          
     cifra_numero[cuenta] = key;
     
     cifra1=String(cifra_numero[0]);
     cifra2=String(cifra_numero[1]);     
     
     cifra_limite = cifra1+cifra2;

     numero = cifra_limite.toInt();
          
     cuenta++; // Incremento el contador   

     if(cuenta>1)
     {
      cuenta=0;
     }
              
     }     

//***********************************************************
     //Se habilitan los displays de los números del jugador que ENTRA
     if(habilitaEntra==true)
     {

     cifra_numero[cuenta] = key;
     
     cifra3=String(cifra_numero[0]);
     cifra4=String(cifra_numero[1]);     
     
     cifra_limite = cifra3+cifra4+cifra1+cifra2;

     numero = cifra_limite.toInt();
     
     cuenta++; // Incremento el contador 

     if(cuenta>1)
     {
      cuenta=0;
     }
     
                
     }
      
    }
  
  } // fin del key
        
         millares=numero/1000;
         centenas=(numero-(millares*1000))/100;
         decenas=(numero- (millares*1000 + centenas*100))/10;
         unidades=numero-(millares*1000 + centenas*100 + decenas*10 );
                       
         habilitarUnidadesSale();
         habilitarDecenasSale();
         habilitarUnidadesEntra();
         habilitarDecenasEntra();

 
}

Autor: sistemasymicros
26 proyectos 6 seguidores 0 siguiendo

Ingeniero en electrónica. Maker, apasionado por la programación. Sigueme en sistemasymicros.

PROYECTOS RELACIONADOS
COMENTARIOS
Para publicar un comentario debes
COMENTARIOS
Americo
hace 8 meses

Es con la finalidad de que el mismo siga funcionando como tablero de sustitucion.... gracias

Americo
hace 8 meses

Hola, y gracias por compartir este proyecto, que esta muy interesante. Al respecto tengo una inquietud, está referida mas que todo con la parte de programación, es la siguiente: como se podría mofificar el código, para que solo se pueda mostrar las "Unidades" y no "Las decenas" conjuntamente cuando se escriben números menores de 9. Es decir para que se pueda visualizar: 1,2,3,4,5,6,7,8,9 y no como se ve originalmente: 01,02,03,04,05,06,07,080,09. Gracias