Membuat Stopwatch 6 Digit Seven Segment Menggunakan Arduino





================================== SOURCE CODE ==================================
#include "Wire.h"
#define LATCH 2
#define CLK 3
#define DATA 4

//byte dot1[11] = {0xFD, 0x51  , 0xBB, 0xDB, 0x57, 0xCF, 0xEF, 0x59, 0xFF, 0xDF};//baru

byte digit1[10] = {0xFC, 0x50 , 0xBA, 0xDA, 0x56, 0xCE, 0xEE, 0x58, 0xFE, 0xDE};//baru
int satuan,puluhan,ratusan,ribuan,puluhanribu,ratusanribu;

char hold0 = 0;
char hold1 = 0;
char hold2 = 0;
char data0, data1, data2, data3;
 
#define READY 0
#define START 1
#define STOP 2
#define RESET 3
#define TIPE_TIME 1 // speed of stop watch
 
char state = 0;
unsigned long get_time, get_time2;
unsigned long cur_time0;
unsigned long cur_time1;
unsigned long hold_time, hold_time2, run_time;

 
void setup() {
  // put your setup code here, to run once:
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  pinMode(A2, INPUT_PULLUP);
  pinMode(A3, INPUT_PULLUP);

  pinMode(LATCH, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
 

}
void loop() {
  // put your main code here, to run 
  Serial.begin(9600);
   key();
  display7();
}
void key(){
  data0 = digitalRead(A0);
  data1 = digitalRead(A1);
  data2 = digitalRead(A2);
  data3 = digitalRead(A3);
  if ( data0 == 0){
    if(hold0 == 0){
    hold0 = 1;  
    state = START;
  }
  }
  else{
    hold0 = 0;
  }
 
  if ( data1 == 0){
    if(hold1 == 0){
    hold1 = 1;  
    state = STOP;
  }
  }
  else{
    hold1 = 0;
  }
 
  if ( data2 == 0){
    if(hold2 == 0){
    hold2 = 1;  
    state = RESET;
  }
  }
  else{
    hold2 = 0;
  }
}
 

void get_clock(){
  switch(state){
    case READY:
      get_time = 0;
      hold_time = 0;
    break;
 
    case START:
      cur_time0 = millis()/TIPE_TIME;
      run_time = (cur_time0 - cur_time1);
      hold_time = run_time;
      get_time = hold_time + hold_time2;
    break;
 
    case STOP:
      cur_time1 = millis()/TIPE_TIME;  
      hold_time2 = get_time;   
    break;   
 
    case RESET:
      cur_time1 = millis()/TIPE_TIME;
      get_time = 0; hold_time = 0; hold_time2 = 0;
      //state = READY;
    break;
  }
}
 
void display7(){
   get_clock();
  switch(state){
    
     case START:
     Tampil();
     break;
     case STOP:
     Tampil();
     break;
     
     case RESET:
     Tampil();
     break;
     
     case READY:
     Tampil();
     break;
 
  }
}
void Tampil(){
     satuan      = get_time % 10/1;
     puluhan     = get_time % 100/10;
     ratusan     = get_time % 1000/100;
     ribuan      = get_time % 10000/1000;
     puluhanribu = get_time % 100000/10000;
     ratusanribu = get_time % 1000000/100000;
     digitalWrite(LATCH, LOW);
     shiftOut(DATA, CLK, MSBFIRST, digit1[satuan]);
     shiftOut(DATA, CLK, MSBFIRST, digit1[puluhan]);
     shiftOut(DATA, CLK, MSBFIRST, digit1[ratusan]);
     shiftOut(DATA, CLK, MSBFIRST, digit1[ribuan]);
     shiftOut(DATA, CLK, MSBFIRST, digit1[puluhanribu]);
     shiftOut(DATA, CLK, MSBFIRST, digit1[ratusanribu]);
     digitalWrite(LATCH, HIGH);
}}

Video..!

No comments

Dicky B_Mz. Powered by Blogger.