Timer Lomba Lari 7 Segment WIreless Start dan Stop
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang berfungsi untuk menghitung waktu lari dari start hingga finish. alat ini menggunakan penampil 7 segment dan sensor photoelectric sehingga mudah untuk instalasinya. untuk lebih jelasnya berikut adalah koding dan skemanya.
1. Skema
2. Program Arduino IDE
#include <Wire.h>
#include <TimerOne.h> //Library peripheral Timer1 untuk menjalankan prosedur pindai panel DMD
#include <Time.h> //Library waktu yang menyediakan tipe data, struktur, dan obyek waktu
#include <Joatsy74HC595.h>
void(* resetFunc) (void) = 0;
const byte pin_data=5;
const byte pin_clock=7;
const byte pin_latch=6;
const byte count_chips=4;
const double delay_time=0.1;
const byte common_logic=1;
int sensorpin = 2;
int sensorpinx;
int buzzer = 8;
int ledind = 3;
int ledstart = 4;
int ori;
int btstartx;
int btrstx;
//int btstart = 10;
//int btrst = 9;
int btstart = 11;
int btrst = 12;
Joatsy74HC595 shiftreg(BUFFERED_OUTPUT, pin_data, pin_clock, pin_latch, count_chips, delay_time);
int number_1=0;
int number_2=0;
int detik;
int cacah;
char lineBuff[20];
int lineA;
int lineB;
int lineC;
int seconds;
int cs;
int secondsa;
int ms;
int secondsb;
int csb;
int secondsc;
int csc;
int csa;
long start_time = 0;
int lapa,lapb,lapc;
int finisha = 0;
String dataku;
void setup(void)
{
Serial.begin(9600);
pinMode(sensorpin,INPUT_PULLUP);
pinMode(buzzer,OUTPUT);
pinMode(ledind,OUTPUT);
pinMode(ledstart,OUTPUT);
delay(1000);
shiftreg.clear(); //default logic=1
digitalWrite(ledind,HIGH);
pinMode(btstart,INPUT_PULLUP);
pinMode(btrst,INPUT_PULLUP);
}
void loop(void)
{
btstartx = digitalRead(btstart);
btrstx = digitalRead(btrst);
//Serial.print(btstartx);
//Serial.println(btrstx);
if (btstartx == 1){
digitalWrite(ledstart,HIGH);
digitalWrite(buzzer,HIGH);
delay(3000);
digitalWrite(buzzer,LOW);
delay(1000);
digitalWrite(buzzer,HIGH);
delay(2000);
digitalWrite(buzzer,LOW);
delay(1000);
digitalWrite(buzzer,HIGH);
delay(2000);
digitalWrite(buzzer,LOW);
start_time = millis();
mulai();
}
if (btrstx == 1){
digitalWrite(ledstart,LOW);
resetFunc();
}
delay(1);
}
void mulai(){
sensorpinx = digitalRead(sensorpin);
if(sensorpinx == 0){
digitalWrite(ledstart,LOW);
digitalWrite(buzzer,HIGH);
delay(500);
digitalWrite(buzzer,LOW);
delay(500);
digitalWrite(buzzer,HIGH);
delay(500);
digitalWrite(buzzer,LOW);
return;
}
seconds = (millis() - start_time) / 1000;
ori = ((millis() - start_time) / 10);
cs = ((millis() - start_time) / 10) % 100;
csa = cs / 10;
csb = cs % 10;
csc = ori / 100;
//Serial.println(ori);
if(csa == 9){
delay(10);
cacah++;
}
if(cacah > 9){
cacah = 0;
detik++;
}
int digit_1 = detik;
int digit_2 = cacah;
int digit_3 = csa;
int digit_4 = csb;
int digit_dot = 0;
build_data(1,1,digit_1,0);
build_data(1,2,digit_2,digit_dot);
build_data(1,3,digit_3,digit_dot);
build_data(1,4,digit_4,0);
shiftreg.buildData();
delay(100);
mulai();
}
void build_data(int module, int digit, int number, int point){
int digit_flag=0;
if (digit==1){
digit_flag=4;
} else if (digit==2){
digit_flag=3;
} else if (digit==3){
digit_flag=2;
} else if (digit==4){
digit_flag=1;
}
int digit_index=((module-1)*4)+digit_flag;
byte data=0;
if (number==0){
if (digit_flag==2){
data=B00010100;
} else {
data=B00010100;
}
} else if (number==1){
if (digit_flag==2){
data=B10110111;
} else {
data=B01111110;
}
} else if (number==2){
if (digit_flag==2){
data=B10001100;
} else {
data=B10001100;
}
} else if (number==3){
if (digit_flag==2){
data=B10000101;
} else {
data=B01001100;
}
} else if (number==4){
if (digit_flag==2){
data=B00100111;
} else {
data=B01100110;
}
} else if (number==5){
if (digit_flag==2){
data=B01000101;
} else {
data=B01000101;
}
} else if (number==6){
if (digit_flag==2){
data=B01000100;
} else {
data=B00000101;
}
} else if (number==7){
if (digit_flag==2){
data=B10010111;
} else {
data=B01111100;
}
} else if (number==8){
if (digit_flag==2){
data=B00000100;
} else {
data=B00000100;
}
} else if (number==9){
if (digit_flag==2){
data=B00000101;
} else {
data=B01000100;
}
}
if (point==1)
bitWrite(data,2,0);
else
bitWrite(data,2,1);
shiftreg.setdata(digit_index,data);
}
3. VIDEO HASILNYA


No comments:
Post a Comment