Stop Watch
Stop watch banyak di gunakan dalam beberapa acara, itu sih yang saya lihat, seperti acara olah raga, cerdas cermat atau mungkin fungsi pewaktu lain nya. Stop watch ini sebenar nya alat pewaktu saja, biasanya secara sederhana memiliki 3 control, atau input push button, pertama adalah fungsi start untuk memulai stopwatch, kedua adalah stop untuk menghentikan stopwatch dan yang terakhir adalah reset yaitu untuk mengembalikan nilai waktu menjadi 0.
Stopwatch yang terlihat sederhana ini sangat sedikit sekali refrensi nya, saya sadar ketika ada teman yang coba minta saya buatkan program stopwatch arduino di proteus dan data waktu nya di tampilkan di 4 digit 7 segment. Coba cari refrensi, rata-rata tutorial nya tidak menggunakan millis dan tidak menggunakan 7 segment. Nah sekarang bagaimana kah cara membuat nya? apakah mudah cara memprogram nya? Yuk kita coba satu satu.
Rangkaian 4 Digit 7 Segment Stopwatch
Rangkaian stopwatch ini sudah ada pada artikel cara membuat counter seven segment, bisa teman-teman lihat pada artikel di bawah ini.
Membuat counter arduino dengan 7 segment
Untuk lebih jelas nya bagaiman rangkaian nya, bisa teman-teman lihat pada gambar di bawah ini.
Counter di atas di kendalikan oleh Arduino uno dengan 3 input button active low. Seven segment nya di kendalikan oleh ic geser 74HC595. Setiap seven segment di kendalikan oleh 74HC595. Umum nya rangkaian ini di sebut 74HC595 static.
ingat hal penting, jika menggunakan seven segment besar seperti di atas 2.3 inch, 3 inch atau bahkan 5 inch common anoda, maka perlu ic penguat seperti ULN2803
Untuk rangkaian seven segment yang di drive oleh 74HC595 dan ULN2803 bisa teman teman lihat pada link di bawah ini
Seven Segment dengan ULN2803 dan 74HC595
Nah sampai di sini dulu ni tentang rangkaian Stopwatch Arduino kita, selanjut nya adalah bagaimana kah cara program nya? yuk kita lihat di bawah ini.
Coding Stopwatch dengan Millis
Program stopwatch ini akan memanfaat kan fungsi millis pada arduino, sebuah timer yang bekerja sendiri atau terpisah dari coding arduino. Ketika start kita akan mengambil waktu pada millis, ketika stop kita akan menahan data millis terakhir yang tersimpan kemudian ketika di tekan lagi start maka akan melanjutkan timer stop watch lagi. Nah bagaiaman kah program nya, yuk kita lihat list program di bawah ini, oh sebelum nya download dulu library 7 segment nya di link berikut ini,
//created by Jimmi Kardo Sitepu //Founder of https://mikroavr.com //make easy project seven segment with modul mikro7 //contact me any qustion to +6282165062273 -- whatsapp, SMS #include <mikro7.h> // Arduino pin configuration to modul mikro7 // D7 connected to Data Pin // D8 connected to latch pin // DS connected to clock pin mikro7 mikro(7, 8, 9); // dis(data, latch, clock int i; char hold0 = 0; char hold1 = 0; char hold2 = 0; char data0, data1, data2; #define READY 0 #define START 1 #define STOP 2 #define RESET 3 #define TIPE_TIME 500 // 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); mikro.off(); } 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); 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 READY: mikro.display(get_time,NOT); break; case START: mikro.display(get_time,NOT); break; case STOP: mikro.display(get_time,NOT); break; case RESET: mikro.display(get_time,NOT); break; } }
Program di atas sudah kami uji langsung di proteus nya, dan berjalan dengan normal dan baik. Jika teman-teman tertarik dengan dengan modul sevent segment yang support dengan library di atas bisa teman teman klik tombol di bawah ini
Selanjut nya adalah yang kita bahas bagaimana cara merubah file library seven segment sesuai dengan desain anda? yuk kita bahas di pembahasan selanjut nya.
Thanks
Video pengujian nya menyusul ^_^ Thanks