Generador de n煤meros de loter铆a con arduino

Publicado el: 13 de julio de 2019
Principiante
Acerca de este proyecto
Genera n煤meros aleatorios entre cero y el numero m谩ximo programado desde el teclado hexadecimal. Ideal para juegos de rifas.
arduino displays 7 segmentos
Publicidad
DETALLES

Este proyecto es 煤til cuando necesitemos generar n煤meros al azar para juegos de loter铆as, en el cual se puede establecer el numero m谩ximo a generar, es decir, si solo necesitamos obtener n煤meros aleatorios entre cero y el cien, se configura como numero m谩ximo el numero 100. Debido a que consta de 3 displays de 7 segmentos, el numero m谩ximo a configurar es el 999.

Se utiliza un teclado hexadecimal, se introduce el numero m谩ximo a generar y se presiona la tecla 'D' para almacenarlo, luego para ir generando de manera aleatoria los n煤meros se presiona la tecla 'B'.


LISTA DE MATERIALES.


  • Arduino Uno o equivalente.
  • Circuito integrado 74LS47.
  • 3 displays de 7 segmentos de 谩nodo com煤n.
  • 3 transistores NPN.
  • 3 resistores de 1k ohm
  • 7 resistores de 100 ohms.
  • Teclado hexadecimal.
  • Cables de conexi贸n


DIAGRAMA ESQUEM脕TICO

Diagrama



CONEXIONES DEL TECLADO


VIDEO DE FUNCIONAMIENTO




CODIFICACI脫N
Codigo arduino-

/* Código que  genera un número aleatorio de acuerdo al número ingresado por el teclado
Relizado por: José Luis Bejarano Vásquez

IMPORTANTE: Digitar el número y presionar la tecla 'D' para almacenar el número
Para generar un número al azar presionar la tecla 'B'
Si se va aintroducir un número menor a 100, ingresarlo con ceros, ejemplo, si se va a ingresar el número 46, presionar 047, si se va
a  ingresar el número 5, presionar 005 */
#include <Keypad.h>

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(pines del 9 al 6)
byte colPins[COLS] = {3,2,1,0}; //Columnas (pines del 5 al 2)

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

char cifra_loteria[2]; //Almacena las 3 cifras digitadas en el teclado

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 cifra_limite = String(); //Almacena las 3 cifras 

const int A = 7;
const int B = 8;
const int C = 9;
const int D = 10;


const  int displayUnidades = 11;
const  int displayDecenas = 12;
const int displayCentenas = 14; //Pin analógico 0 (A0)

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

int numero = 0;
int unidades = 0;
int decenas = 0;
int centenas = 0;

//************************************************************************

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

  pinMode(displayUnidades,OUTPUT);
  pinMode(displayDecenas,OUTPUT);
  pinMode(displayCentenas,OUTPUT);
      
  digitalWrite(displayUnidades,HIGH);
  digitalWrite(displayDecenas,HIGH);
  digitalWrite(displayCentenas,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 ingresar()
{
   
  if(cuenta==3)  //Si tiene 3 dígitos
  {
    
    cuenta = 0;     
  }
  
}
 

void habilitarUnidades()
{
  escribirBcd(unidades);
  digitalWrite(displayUnidades,HIGH);
  digitalWrite(displayDecenas,LOW);
  digitalWrite(displayCentenas,LOW);
  delay(tiempo);
}  

void habilitarDecenas()
{
  escribirBcd(decenas);
  digitalWrite(displayUnidades,LOW);
  digitalWrite(displayDecenas,HIGH);
  digitalWrite(displayCentenas,LOW);  
  delay(tiempo);
}  

void habilitarCentenas()
{
  escribirBcd(centenas);
  digitalWrite(displayUnidades,LOW);
  digitalWrite(displayDecenas,LOW);
  digitalWrite(displayCentenas,HIGH);  
  delay(tiempo);
}

void generar_aleatorio()
{
  randomSeed(millis());   //Semilla del número aleatorio
     
  aleatorio=random(cifra_limite.toInt()+1);  //genera un número aleatorio entre 0 y el límite establecido

 

  
}

void incrementar()
{
  delay(10);
  numero++;
}

void decrementar()
{
   delay(10);
   numero--;
}

void loop() 
{

char key = keypad.getKey();
         
if(key) 
  { 

    cifra_loteria[cuenta] = key;
      
      //Si la tecla presionada es un número (ignore las letras) 
    if(key!='A' && key!='B' && key!='C' && key!='D')
    {
     cifra1=String(cifra_loteria[0]);
     cifra2=String(cifra_loteria[1]);     
     cifra3=String(cifra_loteria[2]);     
     cifra_limite = cifra1+cifra2+cifra3;

     numero = cifra_limite.toInt();
     
     cuenta++; // Incremento el contador
    }
    
    if(key=='A')
    {
     incrementar();
    }

    if(key=='B')
    {
      generar_aleatorio();  
    }

    if(key=='C')
    {
      decrementar();
    }
    if(key=='D')
    {
      ingresar();
    }

    
  } 
               
        if(numero>999)
        {
          numero = 0;
        }  
        if(numero<0)
        {
          numero = 999;
        }  

        
        centenas = numero / 100;  //Extraigo las centenas
        
        decenas = (numero%100)/10;  //Extraigo el dìgito de las decenas        
       
        unidades=  numero%10;  //Extraigo el dìgito de las unidades
       
          
         habilitarUnidades();
         habilitarDecenas();
         habilitarCentenas();
      
 
}

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