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();

 
}

Download me
Autor: sistemasymicros
25 proyectos 4 seguidores 0 siguiendo

Ingeniero en electronica, desarrollador de software. Desarrollo de proyectos con microcontroladores.

COMENTARIOS
Para publicar un comentario debes
COMENTARIOS
Americo
hace 4 meses

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

  • Escriba su comentario de una manera respetuosa y constructiva
Americo
hace 4 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

  • Escriba su comentario de una manera respetuosa y constructiva