Do you wanna have fun in this quarantine season with your sons or friends? Play this basketball game with timer and score counter made with arduino.

Contains two 7 segments displays for the timer (59 seconds) and two displays for the score (up to 99), and an infrared optical sensor for detecting when the ball cross.

## Supplies

• Arduino one or similar.
• FC 51 Infrared optical sensor.
• (4) 7 segments displays common anode.
• (4) NPN transistors, eg: 2N3904.
• (2) IC 74LS47
• (4) 1K ohms resistors.
• (14) 100 ohms resistors.
• Board hoop.
• Jumpers
• Voltage souce 5V @1A.

## Step 1: Sensor Position

The optical sensor must be placed at the bottom of the hoop, so can detect the crossing of the ball.

## Step 3: Arduino Code

//Programa del juego de basquetball con cronómetro y marcador de canasta
//Variables para el cronómetro const int Acr = 1; const int Bcr = 2; const int Ccr = 3; const int Dcr = 4;

const int displayUnidadesCronometro = 5; const int displayDecenasCronometro = 6;

// Variables para el marcador const int Am = 7; const int Bm = 8; const int Cm = 9; const int Dm = 10;

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

const int sensor = 13;

long tiempoAnterior = 0; long intervalo = 1000;

bool activo = true;

const int tiempo = 8; const int tiempoAntirebote = 10;

void escribirBcdCronometro(byte num) { digitalWrite(Acr, (num & 1) == 1); digitalWrite(Bcr, (num & 2) == 2); digitalWrite(Ccr, (num & 4) == 4); digitalWrite(Dcr, (num & 8) == 8); }

void escribirBcdMarcador(byte num) { digitalWrite(Am, (num & 1) == 1); digitalWrite(Bm, (num & 2) == 2); digitalWrite(Cm, (num & 4) == 4); digitalWrite(Dm, (num & 8) == 8); }

void setup() {

pinMode(Acr, OUTPUT); pinMode(Bcr, OUTPUT); pinMode(Ccr, OUTPUT); pinMode(Dcr, OUTPUT);

pinMode(Am, OUTPUT); pinMode(Bm, OUTPUT); pinMode(Cm, OUTPUT); pinMode(Dm, OUTPUT);

pinMode(sensor, INPUT); //pinMode(reset,INPUT_PULLUP);

//*******RUTINA ANTIREBOTE ********************************************************* boolean antiRebote (int pin ) { int contador = 0; boolean estado; // guarda el estado del boton boolean estadoAnterior; // guarda el ultimo estado del boton

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

// TEMPORIZADOR O CRONÓMETRO void timer() {

long tiempoActual = millis(); //Leo el tiempo actual

if(activo){ if (tiempoActual - tiempoAnterior > intervalo) { tiempoCronometro = tiempoCronometro - 1; tiempoAnterior = tiempoActual; } }

}

void habilitarDecenasCronometro() { escribirBcdCronometro(decenasCronometro); digitalWrite(displayUnidadesCronometro, LOW); digitalWrite(displayDecenasCronometro, HIGH); delay(tiempo); }

void loop() {

timer();

//********************************************************************************************* if(activo){ if (estadoSensor != estadoBotonAnteriorSensor) { //si hay cambio con respeto al estado if (antiRebote (sensor)) { //checamos si esta presionado y si lo esta marcador++; } }

estadoBotonAnteriorSensor = estadoSensor; // guardamos el estado del boton } //******************************************************************************************* // Si se acabó el tiempo, no permita que siga contando el marcador if (tiempoCronometro == 0) { activo = false; }

decenasCronometro = tiempoCronometro / 10; //Extraigo el dìgito de las unidades

unidadesCronometro = tiempoCronometro - ( decenasCronometro * 10); //Extraigo el dìgito de las decenas