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:
Θ 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); }
Latest posts by James Jr. (see all)
- Basketball Game Clock –Implementing Prototype - 3 January, 2018
- ARDUINO WEB BASED 1 KW POWER SMART INVERTER CONTROLLER - 3 January, 2018
- Arduino Web Based Monitoring and Control - 3 January, 2018
Pingback: Basketball Shot Clock - Implementing Prototype - Life2Coding
Hello sir can i ask if this is a presettable timer and also countdown timer?
Yes it is, also you are free to try other code here in this site.
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);
}
}