Life2Coding
Basketball Game Clock – Implementing Prototype

Basketball Game Clock – Implementing Prototype. This post will show you how to create your own basketball game clock. This project are so accurate and tested 100% fully functional and ready for packaging for commercial use. The source code are given here below. The benefits we gave to our loving supporters and youtube subscribers.

We also created basketball shot clock and you can find it HERE.

For the materials used for this project are shown at the  schematic diagram provided. Please feel free to modify the circuit and the source code, but don’t forget to give where the credits is due – thank you!

 

SCHEMATIC DIAGRAM:

Basketball-Game-Clock-Source-Code Basketball Game Clock -  Implementing Prototype

Θ CODE:

main.ino

/***
 * 
    Basketball Game Clock -  Implementing Protoype
    
    Support us: Life2Coding.com
 * 
***/

int mydelay;
int Num1=0;
int Num2=0;
int Num3=0;
int Num4=0;
int timeDelay=1000;
unsigned long playTime=0;
unsigned long newTime,oldTime=0;
volatile int timeSet;
volatile boolean Ready=false;
volatile int getset=0;
volatile long lastrunDebounce=0;
volatile long lastresetDebounce=0;
volatile boolean initialized=false;
volatile boolean resetting=false;
volatile boolean lastSeconds=false;
volatile boolean reverse=false;

void setup() {
  for (int j=4;j<=12;j++){
    pinMode(j,OUTPUT);
  }
  pinMode(2,INPUT);
  pinMode(3,INPUT);
  Serial.begin(9600);
  attachInterrupt(0,stopRun,HIGH);
  attachInterrupt(1,reset,HIGH);
}


void loop(){
if(!lastSeconds)timeDelay=1000;
refresh();
dot();

newTime=millis();
if((newTime-oldTime)>=1000){
  oldTime=newTime;
      lastrunDebounce=millis();
      lastresetDebounce=millis();
}
  if(!Ready){
    if((newTime-oldTime)>=(mydelay))digitalWrite(12,HIGH);
    else digitalWrite(12,LOW);
    if(resetting)resetTimeHere();
  }

else{
  if((newTime-playTime)>=timeDelay){
    playTime=newTime;
    counting();
  }
}
}

//Setup for two LEDs to match with the counting
void dot(){
  if(timeDelay==8)mydelay=500;
  else mydelay=timeDelay/2;
  if((newTime-oldTime)>=(mydelay))digitalWrite(12,HIGH);
  else digitalWrite(12,LOW);
}

//The couter that counts...
void counting(){
Num1--;
if(Num1<0){
  Num1=9;
  Num2--;
  if(Num2<0){
    if(timeDelay==8)Num2=9;
    else Num2=5;
    Num3--;
    if(Num3<0){
      Num3=9 ;
      Num4--;
    }
  }
if(lastSeconds==false){
  if(Num4==0 && Num3==0){
        timeDelay=8;
        Num4=6;
        Num1=Num2=Num3=0;
        lastSeconds=true;
      }
    }
      else {
        if(Num4<0){
          timeDelay=1000;
          getset=0;
          min0();
          Ready=false;
        }
      }
   }
}

//Interfacing button command to stop and run counting instantly
void stopRun(){
  if(initialized){
if((millis()-lastrunDebounce)>350){
  lastrunDebounce=millis();
if(timeSet>0)Ready=!Ready;
        }
    }
reverse=false;
}

//Reset counting
void reset(){
if(!Ready){
  if((millis()-lastresetDebounce)<1)reverse=!reverse;
  if((millis()-lastresetDebounce)>250){
  lastresetDebounce=millis();
if(!reverse)   {
  timeSet++;
   if(timeSet==5)timeSet=0;
}

else {
  timeSet--;
  if(timeSet<0)timeSet=4;
  
   }
resetting=true;
if(lastSeconds)lastSeconds=false;

 }
}
}

//Refreshing the output
void refresh(){
digit1();
digit2();
digit3();
digit4();  
}

//Time setting
void resetTimeHere(){
 if(initialized){
   switch (timeSet){
    case 0:
    min0();
    break;
    case 1:
    min5();
    break;
    case 2:
    min10();
    break;
    case 3:
    min12();
    break;
    case 4:
    min15();
    break;
   }
lastSeconds=false; 
 }
resetting=false;
initialized=true;  
}

//Timer
void min0(){
      Num1=Num2=Num3=Num4=0;  
}
void min5(){
      Num1=Num2=Num4=0;
      Num3=5;
}
void min10(){
      Num1=Num2=Num3=0;
      Num4=1;  
}
void min12(){
      Num1=Num2=0;
      Num3=2;
      Num4=1;  
}
void min15(){
      Num1=Num2=0;
      Num3=5;
      Num4=1;  
}

//Output the counting to desplay
void digit1(){

               digitalWrite(8,LOW);
               digitalWrite(8,HIGH);
               for (int x=4;x<=7;x++)digitalWrite(x,bitRead(Num1,x-4));
               delay(2);
               digitalWrite(8,LOW);
}
void digit2(){
               digitalWrite(9,LOW);
               digitalWrite(9,HIGH);
               for (int x=4;x<=7;x++)digitalWrite(x,bitRead(Num2,x-4));
               
               delay(2);
               digitalWrite(9,LOW);
}
void digit3(){
               digitalWrite(10,LOW);
               digitalWrite(10,HIGH);
               for (int x=4;x<=7;x++)digitalWrite(x,bitRead(Num3,x-4));
               delay(2);
               digitalWrite(10,LOW);
}
void digit4(){
               digitalWrite(11,LOW);
               digitalWrite(11,HIGH);
               for (int x=4;x<=7;x++)digitalWrite(x,bitRead(Num4,x-4));
               delay(2);
               digitalWrite(11,LOW);
}

 

 

 

 

james-pic Basketball Game Clock -  Implementing Prototype

4 thoughts on “Basketball Game Clock – Implementing Prototype

  1. Pingback: Basketball Shot Clock - Implementing Prototype - Life2Coding

  2. Arasan

    Hi dear,

    looking for your help,

    I had made a backward timer with the help of the internet, I just want to add this 24-sec shot clock along with that existing program and also want to pause both timer and short clock program

    hereby I enclosed you the program and the circuit diagram which I used,

    const int clk_ML = 2;
    const int clk_MR = 3;
    const int clk_SL = 4;
    const int clk_SR = 5;
    const int rst_ML = 6;
    const int rst_MR = 7;
    const int rst_SL = 8;
    const int rst_SR = 9;
    const int DE_ML = 10;
    const int DE_MR = 11;
    const int DE_SL = 12;
    const int DE_SR = 13;
    const int inc = A0;
    const int ok = A1;
    const int buzzer = A2;
    int i = 0;
    int j = 0;
    int var = 0;
    int var1 = 0;
    int var2 = 0;
    int var3 = 0;
    int var4 = 0;
    int secR = 0;
    int secL = 0;
    int MinL = 0;
    int MinR = 0;
    int X = 0;
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    boolean Setup = true;
    boolean Stop = false;
    void setup()
    {
    pinMode(clk_ML, OUTPUT);
    pinMode(clk_MR, OUTPUT);
    pinMode(clk_SL, OUTPUT);
    pinMode(clk_SR, OUTPUT);
    pinMode(rst_ML, OUTPUT);
    pinMode(rst_MR, OUTPUT);
    pinMode(rst_SL, OUTPUT);
    pinMode(rst_SR, OUTPUT);
    pinMode(DE_ML, OUTPUT);
    pinMode(DE_MR, OUTPUT);
    pinMode(DE_SL, OUTPUT);
    pinMode(DE_SR, OUTPUT);
    pinMode(inc, INPUT_PULLUP);
    pinMode(ok, INPUT_PULLUP);
    pinMode(buzzer, OUTPUT);
    all_rst();
    digitalWrite(DE_ML, HIGH);
    digitalWrite(DE_MR, HIGH);
    digitalWrite(DE_SL, HIGH);
    digitalWrite(DE_SR, HIGH);
    delay(500);
    Display_Test();
    }
    void loop()
    {
    if (Setup)
    {
    digitalWrite(DE_ML, LOW);
    digitalWrite(DE_MR, LOW);
    digitalWrite(DE_SL, LOW);
    digitalWrite(DE_SR, HIGH);
    while (digitalRead(ok) != LOW)
    {
    if (digitalRead(inc) == LOW)
    {
    X = clk_SR;
    secR = secR + 1;
    c_inc();
    delay(250);
    if (secR > 9)
    {
    secR = 0;
    }
    }
    }
    delay(250);
    digitalWrite(DE_ML, LOW);
    digitalWrite(DE_MR, LOW);
    digitalWrite(DE_SL, HIGH);
    digitalWrite(DE_SR, LOW);
    while (digitalRead(ok) != LOW)
    {
    if (digitalRead(inc) == LOW)
    {
    X = clk_SL;
    secL = secL + 1;
    c_inc();
    if (secL > 5)
    {
    secL = 0;
    digitalWrite(rst_SL, HIGH);
    digitalWrite(rst_SL, LOW);
    }
    delay(250);
    }
    }
    delay(250);
    digitalWrite(DE_ML, LOW);
    digitalWrite(DE_MR, HIGH);
    digitalWrite(DE_SL, LOW);
    digitalWrite(DE_SR, LOW);
    while (digitalRead(ok) != LOW)
    {
    if (digitalRead(inc) == LOW)
    {
    X = clk_MR;
    MinR = MinR + 1;
    c_inc();
    delay(250);
    if (MinR > 9)
    {
    MinR = 0;
    }
    }
    }
    delay(250);
    digitalWrite(DE_ML, HIGH);
    digitalWrite(DE_MR, LOW);
    digitalWrite(DE_SL, LOW);
    digitalWrite(DE_SR, LOW);
    while (digitalRead(ok) != LOW)
    {
    if (digitalRead(inc) == LOW)
    {
    X = clk_ML;
    MinL = MinL + 1;
    c_inc();
    delay(250);
    if (MinL > 9)
    {
    MinL = 0;
    }
    }
    }
    digitalWrite(DE_MR, HIGH);
    digitalWrite(DE_SL, HIGH);
    digitalWrite(DE_SR, HIGH);
    var1 = secR;
    var2 = secL;
    var3 = MinR;
    var4 = MinL;
    Setup = false;
    }
    var1 = var1 – 1;
    if (var1 == -1 && var2 == 0 && Stop == false)
    {
    var1 = 9;
    var2 = 5;
    var3 = var3 – 1;
    }
    if (var1 == -1 && Stop == false)
    {
    var2 = var2 – 1;
    var1 = 9;
    }
    if (var3 == -1)
    {
    var3 = 9;
    var4 = var4 – 1;
    }
    if (var1 == 9 && var2 == 5 && var3 == 9 && var4 == -1)
    {
    Stop = true;
    buzz();
    }
    while (Stop)
    {
    digitalWrite(DE_ML, LOW);
    digitalWrite(DE_MR, LOW);
    digitalWrite(DE_SL, LOW);
    digitalWrite(DE_SR, LOW);
    delay(300);
    digitalWrite(DE_ML, HIGH);
    digitalWrite(DE_MR, HIGH);
    digitalWrite(DE_SL, HIGH);
    digitalWrite(DE_SR, HIGH);
    delay(300);
    }
    delay(1000);
    digitalWrite(rst_SR, HIGH);
    digitalWrite(rst_SR, LOW);
    for (a = 0; a < var1; a++)
    {
    digitalWrite(clk_SR, HIGH);
    digitalWrite(clk_SR, LOW);
    }
    digitalWrite(rst_SL, HIGH);
    digitalWrite(rst_SL, LOW);
    for (b = 0; b < var2; b++)
    {
    digitalWrite(clk_SL, HIGH);
    digitalWrite(clk_SL, LOW);
    }
    digitalWrite(rst_MR, HIGH);
    digitalWrite(rst_MR, LOW);
    for (c = 0; c < var3; c++)
    {
    digitalWrite(clk_MR, HIGH);
    digitalWrite(clk_MR, LOW);
    }
    digitalWrite(rst_ML, HIGH);
    digitalWrite(rst_ML, LOW);
    for (d = 0; d < var4; d++)
    {
    digitalWrite(clk_ML, HIGH);
    digitalWrite(clk_ML, LOW);
    }
    }
    void Display_Test()
    {
    all_rst();
    var = 10;
    for (j = 0; j < 10; j++)
    {
    var = var – 1;
    for (i = 0; i < var; i++)
    {
    digitalWrite(clk_ML, HIGH);
    digitalWrite(clk_MR, HIGH);
    digitalWrite(clk_SL, HIGH);
    digitalWrite(clk_SR, HIGH);
    digitalWrite(clk_ML, LOW);
    digitalWrite(clk_MR, LOW);
    digitalWrite(clk_SL, LOW);
    digitalWrite(clk_SR, LOW);
    }
    delay(250);
    all_rst();
    }
    }
    void all_rst()
    {
    digitalWrite(rst_ML, HIGH);
    digitalWrite(rst_MR, HIGH);
    digitalWrite(rst_SL, HIGH);
    digitalWrite(rst_SR, HIGH);
    digitalWrite(rst_ML, LOW);
    digitalWrite(rst_MR, LOW);
    digitalWrite(rst_SL, LOW);
    digitalWrite(rst_SR, LOW);
    }
    void c_inc()
    {
    digitalWrite(X, HIGH);
    digitalWrite(X, LOW);
    }
    void buzz()
    {
    for (e = 0; e < 10; e++)
    {
    digitalWrite(buzzer, HIGH);
    delay(100);
    digitalWrite(buzzer, LOW);
    delay(100);
    }
    }

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.