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.
#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,1);
build_data(1,3,digit_3,0);
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. Program Arduino IDE BATTLE MODE TRANSMITTER
#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 battle = A0;
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);
pinMode(battle,OUTPUT);
digitalWrite(battle,HIGH);
}
void loop(void)
{
btstartx = digitalRead(btstart);
btrstx = digitalRead(btrst);
//Serial.print(btstartx);
//Serial.println(btrstx);
if (btstartx == 1){
digitalWrite(ledstart,HIGH);
digitalWrite(battle,LOW);
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);
digitalWrite(battle,HIGH);
start_time = millis();
mulai();
}
if (btrstx == 1){
digitalWrite(ledstart,LOW);
digitalWrite(battle,HIGH);
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,1);
build_data(1,3,digit_3,0);
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);
}
#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 = 11;
int btrst = 12;
int battlepin = A0;
int battlepinx;
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);
pinMode(battlepin,INPUT_PULLUP);
}
void loop(void)
{
battlepinx = digitalRead(battlepin);
btstartx = digitalRead(btstart);
btrstx = digitalRead(btrst);
//Serial.print(btstartx);
//Serial.println(btrstx);
if((btstartx == 1)||(battlepinx == 0)){
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,1);
build_data(1,3,digit_3,0);
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);
}