Posts Tagged ‘belajar’

Serial port merupakan sebuah port yang terdapat pada komputer/laptop yang dapat digunakan sebagai jalur komunikasi antara komputer/laptop dengan hardware lainnya seperti mikrokontroller dan lain sebagainya.

pada postingan kali ini, saya akan coba berbagi tentang program sederhana yang dapat menerima dan mengirim data melalui komunikasi serial.

untuk dapat melakukan komunikasi serial, dibutuhkan sebuah library yaitu RxTx yang mana telah saya bahas mengenai cara instalasinya disini dan cara menambahkan pada project yang kita buat seperti postingan yang ada disini.

Secara umum, komunikasi yang menggunakan serial port pasti akan melalui langkah-langkah berikut ini :

  • Pencarian port serial
  • Koneksi ke port serial
  • inisialisasi  input dan output stream
  • Memutuskan koneksi port serial
  • Kirim data
  • Terima data

sekarang akan coba dibahas sedikit mengenai program pada aplikasi kirim dan terima data serial ini.

1. Pencarian port serial

berikut ini program untuk mencari port serial yang sedang aktif pada komputer/laptop

 public void cekSerialPort() {
port = CommPortIdentifier.getPortIdentifiers();
while (port.hasMoreElements()) {
CommPortIdentifier curPort = (CommPortIdentifier) port.nextElement();
if (curPort.getPortType() == CommPortIdentifier.PORT_SERIAL) {
window.jCommPort.addItem(curPort.getName());
portMap.put(curPort.getName(), curPort);
}
}
}
 

pada program diatas, program akan mengecek setiap port yang aktif pada komputer, yang kemudian port-port tersebut akan dicek tipe nya dengan menggunakan .getPortType(). Jika port tersebut merupakan port serial, maka identitas port tersebut akan didaftarkan atau ditambahkan pada comboBox pada tampilan GUI.

2. Koneksi Port Serial

 public void connect() {
String selectedPort = (String) window.jCommPort.getSelectedItem();
portIdentifier = (CommPortIdentifier) portMap.get(selectedPort);
CommPort commPort = null;
try {
commPort = portIdentifier.open(null, TIMEOUT);
serialPort = (SerialPort) commPort;
setConnected(true);
window.bConn.setText("Disconnect");
} catch (PortInUseException e) {
statusPort = selectedPort + " is in use. (" + e.toString() + ")";
JOptionPane.showMessageDialog(null, statusPort);
} catch (Exception e) {
statusPort = "Failed to open " + selectedPort + "(" + e.toString() + ")";
JOptionPane.showMessageDialog(null, statusPort);
}
}
 

Program diatas digunakan untuk membuka koneksi dengan serial port yang sebelumnya telah ditentukan dengan cara memilih salah satu serial port yang tersedia pada comboBox. perintah yang digunakan untuk membuka koneksi adalah .open()

3.  Inisialisasi  input/output stream

 public boolean initIOStream() {
boolean successful = false;
try {
inPut = serialPort.getInputStream();
outPut = serialPort.getOutputStream();

successful = true;
return successful;
} catch (IOException e) {
statusPort = "I/O Streams failed to open. (" + e.toString() + ")";
JOptionPane.showMessageDialog(null, statusPort);
return successful;
}
}
 

program ini akan menginisialisasi input/output stream yang nantinya digunakan untuk menampung data yang masuk ataupun data yang akan dikirim kan dari aplikasi menuju perangkat lainnya.

4. Memutuskan koneksi serial

 public void disconnect() {
try {
serialPort.removeEventListener();
serialPort.close();
inPut.close();
setConnected(false);
statusPort = "PORT disconnect successfully";
JOptionPane.showMessageDialog(null, statusPort);
window.bConn.setText("Connect");
} catch (Exception e) {
statusPort = "Failed to close " + serialPort.getName() + "(" + e.toString() + ")";
JOptionPane.showMessageDialog(null, statusPort);
}
}
 

Program tersebut akan memutuskan koneksi antara port serial dengan aplikasi. pada saat memutuskan koneksi serial port harus di tutup dengan menggunakan perintah .close(), begitu juga dengan input/output stream nya.

5. Kirim Data Serial

 public void kirimData(Byte a){
try {
outPut.write(a);
outPut.write(10);
outPut.flush();
} catch (IOException ex) {
System.out.println("Kirim Gagal");
}
}
 

Program diatas akan mengirimkan data serial. tipe data yang bisa dikirimkan berupa “Byte” dan “Integer“. pengiriman dilaksanakan saat ada perintah .write(a), kemudian .flush() digunakan untuk mengosongkan kembali outputstream.

6. Terima Data Serial

untuk dapat menerima data serial setiap saat, maka dimanfaatkan event yang khusus menangani data serial yang masuk. berikut merupakan program untuk inisialisasi event beserta program event yang menangani data serial yang masuk ke aplikasi.

 public void initListener() {
try {
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (TooManyListenersException e) {
JOptionPane.showMessageDialog(null, e.toString());
}
}

public void serialEvent(SerialPortEvent evt) {
char dataSerial = 0; // Untuk menampung input dari serial port

if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
dataSerial = (char) inPut.read();
window.txtDataIn.setText(String.valueOf(dataSerial));
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.toString());
}
}
}
 

contoh tampilan aplikasi yang saya buat :

saat aplikasi dijalankan maka tampilan awal aplikasi adalah sebagai berikut :

setelah tulisan “Search Port” ditekan maka tampilan akan berubah sebagai berikut :

untuk mengkoneksikan aplikasi dengan serial port, arahkan kursor ke tombol “connect” kemudian klik tombol tersebut. setelah itu jika berhasil terkoneksi maka tampilan aplikasi akan sebagai berikut :

Jika koneksi gagal, maka akan muncul messageBox yang menjelaskan penyebab gagalnya koneksi.

untuk memutuskan koneksi tekan saja tombol “Disconnect”.

Saat aplikasi telah terkoneksi dengan serial port, maka aplikasi dalam posisi stand by menerima data serial yang mana setiap data yang diterima akan ditampilkan pada textBox. untuk mengirim data, tekan saja tombol kirim data. pada aplikasi ini jika tombol kirim data ditekan, maka aplikasi akan mengirimkan data “a”.

Aplikasi lengkapnya dapat anda download disini.

untuk contoh aplikasi koneksi dengan arduino dapat dilihat dipostingan Kirim Terima data via Serial Port _ Java dan Arduino

Semoga bermanfaat….. 🙂

Bahasa pemrograman JAVA juga mendukung komunikasi serial yang melalui serial port. Untuk dapat melakukan komunikasi serial tersebut bisa menggunakan/memanfaatkan salah satu library yaitu RxTx.

library tersebut mendukung komunikasi serial yang diterapkan pada sebuah program berbasis JAVA. Library ini juga bisa digunakan dibeberapa platform seperti Linux, Solaris dan windows. Pada postingan kali ini, saya akan coba berbagi mengenai cara instalasi library RxTx pada windows. Hal itu dikarenakan pada saat penggunaan library ini, saya menggunakan sistem operasi windows.

sebelumnya, silahkan download terlebih dahulu library RxTxComm.Jar nya disini.

selain itu, diperlukan juga RxTxSerial.dll yang dapat anda download disini.

setelah didownload, copy / pindahkan file RxTxComm.Jar nya ke “\JAVA_HOME\lib\ext”. (\JAVA_HOME\ adalah folder dimana anda menginstal JRE pada komputer/sistem. contohnya : “C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext“)

Kemudian pindahkan juga file RxTxSerial.dll ke “\JAVA_HOME\bin” (cth : “C:\Program Files\Java\jdk1.7.0_01\jre\bin“)

proses instalasi ini cukup dilakukan sekali saja. yang dilakukan berulang-ulang ialah saat penambahan library RxTxComm.JAR pada project baru yang akan dibuat dan menggunakan komunikasi serial. Jika proses instalasi ini tidak dilakukan maka akan timbul pesan error seperti berikut ini :

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver Exception in thread “AWT-EventQueue-0” java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path

untuk menambahkan library ke project baru anda dapat membaca langkah – langkahnya disini

salah satu contoh program kompleks nya dapat anda lihat disini.

Semoga bermanfaat…. 🙂

JavaCV merupakan sebuah library yang dipergunakan dalam bidang Computer Vision. Dengan library ini kita bisa mengakses kamera webcam dengan mudah. Yang mana kita bisa mengolah hasil gambar yang diterima dari kamera tersebut yang mulai dari menampilkan hasil liveCam, capture gambar sampai tracking sebuah benda, objek atau juga muka.

Sebelum dapat menggunakan library JavaCV ini, ada beberapa langkah yang terlabih dahulu harus kita lakukan. Langkah tersebut berupa langkah penginstalan dan konfigurasi agar library ini bisa digunakan. Berikut ini merupakan langkah-langkah penginstalan dan konfigurasi JavaCV.

1.  Jika belum menginstal  Microsoft Visual C++ 2010 Redistributable Package, silahkan download dahulu kemudian install Microsoft visual C++ nya.

Microsoft Visual C++ 2010 Redistributable Package (x86) >> untuk windows 32 Bit

Microsoft Visual C++ 2010 Redistributable Package (x64) >> untuk windows 64 Bit

2.  Kemudian siapkan beberapa file yang dibutuhkan, yang mana bisa didownload di link berikut ini :

a. JavaCV 0.1 binary package

b.  OpenCV Windows Superpack 2.4.0

 

3.  Setelah berhasil menginstal Microsoft visual C++, ekstrak file OpenCV Windows Superpack yang telah didownload tadi ke direktori C:\

4.  Konfigurasi System path, yang mana system path ini dapat kita buka dengan cara :

Klik Start >> control panel >> System and Security >> System >> Advance System Settings >> Environment Variables

 

Setelah itu akan muncul window seperti gambar dibawah ini :

 

 

Pada system variables, cari variable “Path”, kemudian klik dan tekan tombol edit. Setelah itu akan muncul window “edit system variable”.

Pada window tersebut kita tambahkan settingan yang kita inginkan, dengan cara klik pada kolom variable value kemudian pindahkan kursor kesebelah kanan (tekan tombol panah arah kanan sampai kursor berada di ujung kanan kolom). Tambahkan path dibawah ini kedalam kolom variable value yang ada di window “edit system path tadi”.

Untuk windows 32bit :

;C:\opencv\build\common\tbb\ia32\vc10\;C:\opencv\build\x86\vc10\bin\;

Untuk windows 64 bit :

;C:\opencv\build\common\tbb\intel64\vc10\;C:\opencv\build\x64\vc10\bin\;

 

 

Setelah menambahkan path, kemudian tekan tombol OK

5.  Langkah terakhir adalah mengekstrak file JavaCV 0.1 binary package  pada folder atau direktori yang diinginkan.

 

Agar library JavaCV dapat digunakan pada project yang kita buat, kita tambahkan saja library project kita dengan “external JAR”, yang mana external JAR tersebut merupakan file yang terdapat pada folder JavaCV 0.1 Binary package yang telah diekstrak sebelumnya.

Berikut ini cara menambahkan library tersebut.

1. Klik kanan pada folder “library” yang ada pada file project kemudian pilih “Add JAR/Folder

 

 2. Akan muncul window add JAR, kemudian cari lokasi tempat penyimpanan folder hasil ekstrak JavaCV 0.1 Binary package sebelumnya. Kemudian pilih JAR JavaCV dan tekan tombol Open.

 

  3. Proses penambahan library JavaCV pada project selesai dilakukan….

 

Semoga bermanfaat…. 🙂

Struktur control merupakan beberapa fitur yang tersedia di bahasa C maupun di beberapa bahasa pemrograman lainnya. struktur control ini digunakan untuk menangani beberapa program yang memiliki kondisi atau syarat. Dikatakan begitu karena, pada suatu saat akan terjadi sebuah kondisi yang mana kondisi tersebut akan berpengaruh terhadap program kita selanjutnya. Untuk lebih jelasnya, dibawah ini terdapat beberapa struktur control yang ada pada bahasa C dan beberapa bahasa pemrograman lainnya.

1. Percabangan

Struktur control percabangan merupakan sebuah struktur control yang memerlukan sebuah atau beberapa kondisi sebelum menjalankan program lainnya. pada percabangan ini terdapat beberapa sintak yaitu sebagai berikut :

–          Percabangan IF

Percabangan IF ini biasanya digunakan jika kondisi atau syarat yang diperlukan hanya ada 1.

 

–          Percabangan IF – Else

Percabangan if-else ini hamper sama dengan percabangan if, yang membedakan adalah jumlah kondisi/syarat atau sintak yang akan dilakukan jika kondisi tidak terpenuhi. Pada percabangan ini, terkadang terdapat beberapa kondisi/syarat sehingga akan menyebabkan banyak kemungkinan kondisi yang akan dilakukan.

 

–          Percabangan Switch-Case

Percabangan ini biasanya digunakan untuk membandingkan 1 kondisi dengan beberapa nilai yang telah ditentukan.

 

2. Perulangan

Perulangan merupakan sebuah struktur control yang menangani sebuah kegiatan yang dilakukan berulang-ulang. Ada beberapa sintak yang biasa digunakan, yaitu sebagai berikut :

–          Perulangan While

Perulangan ini biasa disebut dengan while loop. Perulangan akan terus dilakukan selama syarat yang telah ditentukan masih terpenuhi atau bernilai true.

 

Contoh program pada tabel tersebut merupakan contoh penggunaan while loop. Selama nilai a besar dari 5, maka nilai k akan terus ditampilkan. Jadi contoh program tersebut akan menampilkan nilai k sebanyak 5 kali.

–          Perulangan Do – While

Perulangan ini hamper sama dengan perulangan do-while, yang membedakan hanya peletakan kondisinya saja. Selain itu, perulangan do-while minimal akan dijalankan 1 kali walaupun syarat/kondisinya tidak terpenuhi.

 

–          Perulangan For.

Perulangan ini memiliki 3 ekspresi yang saling berkaitan, yang mana ekspresi tersebut merupakan syarat/kondisi yang menentukan banyaknya perulangan yang akan dilakukan.

 

Ekspresi 1 merupakan nilai awal dari sebuah variabel yang menjadi patokan dari syarat/kondisi dari perulangan.

Ekspresi 2 merupakan kondisi/syarat yang jika masih terpenuhi/nilainya true maka perulangan akan terus dilakukan.

Ekspresi 3 merupakan statement dari kondisi, bisa berupa increment atau decrement.

 

Semoga bermanfaat….. 🙂

Kalkulator merupakan sebuah aplikasi sederhana yang digunakan untuk mencari hasil dari sebuah operasi matematika baik itu operasi penjumlahan, pengurangan, pembagian maupun perkalian dan beberapa operasi lainnya.

Pada postingan kali ini, akan dibuat sebuah aplikasi kalkulator sederhana yang bisa digunakan untuk mencari hasil dari operasi penjumlahan, pengurangan, pembagian serta perkalian. Selain itu, akan dijelaskan juga mengenai beberapa program yang ada pada aplikasi tersebut. Aplikasi kalkulator sederhana ini dibuat dengan menggunakan bahasa pemrograman JAVA dengan memanfaatkan NetBeans sebagai IDE nya.

Aplikasi kalkulator sederhana ini berbasis GUI, dan pada saat pembuatannya menggunakan JFrame. Pemilihan tersebut dapat kita lakukan dengan cara buat project baru dengan memilih File -> New Project -> Java Application. Setelah pembuatan project baru selesai, hapus lah subfolder beserta isi yang ada pada folder “Source Packages”.

 

Jika sudah dihapus, maka buat lah sebuah form dengan memanfaatkan JFrame Form, dengan cara klik kanan pada “source packages” kemudian pilih new, dan setelah itu pilih JFrame Form.

anda akan diminta untuk memberikan nama JFrame Form tersebut. Setelah selesai memberikan nama, klik “finish”. Akan muncul sebuah jendela baru, yang mana akan terdapat 2 tombol pilihan yaitu “Source” dan “Design”.

 

Jika tombol “Source” ditekan, maka tampilan akan berganti menjadi tampilan/jendela coding yang mana pada jendela tersebut kita membuat program untuk aplikasi kalkulator. Sedangkan jika tombol “Design” ditekan maka tampilan/jendela akan berganti menjadi jendela design, yaitu sebuah jendela yang kita gunakan untuk mendesign tampilan dari aplikasi sesuai dengan yang kita inginkan.

Kemudian buatlah tampilan aplikasi seperti desain gambar dibawah ini,

Sebelum mulai mendesaign tampilan dengan meletakkan tombol dan textField, sebaiknya letakkan dulu sebuah panel sebagai dasar/background, hal itu akan memudahkan kita nantinya jika kita ingin menghias background dari aplikasi yang kita buat.

Komponen-komponen yang digunakan adalah sebagai berikut.

Setelah selesai membuat design tampilan aplikasi, sekarang tinggal membuat source code/ programnya. Untuk memulai membuat program, kita bisa berpindah ke jendela program dengan cara menekan tombol “Source”, selain itu karena kebanyakan program memanfaatkan event penekanan tombol/button, maka sebaiknya kita berpindah ke jendela program dengan menekan 2 kali pada button yang ada pada desaign tampilan aplikasi yang telah dibuat sebelumnya. Sebagai contohnya, akan dibuat program yang mana program tersebut akan dijalankan saat button btn0 ditekan. Maka kita hanya perlu menekan 2x pada btn0 kemudian secara otomatis jendela tampilan pada netbeans akan berubah menjadi jendela source, yang akan langsung tertuju pada fungsi yang akan dijalankan jika btn0 ditekan. Setelah itu, tambahkan program seperti dibawah ini :

private void btn0ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

if(mulaiBaru){
if(txtHasil.getText().isEmpty() || nolLagi==true)
{
txtHasil.setText("0");
nolLagi=false;
}
else{
mulaiBaru=false;
txtHasil.setText(txtHasil.getText() + "0");
}
}
else txtHasil.setText(txtHasil.getText() + "0");
}

Program diatas digunakan untuk mencetak/menampilkan angka 0 pada textField txtHasil. Program tersebut menggunakan pencabangan if-else, yang mana if-else tersebut digunakan untuk pengkondisian pencetakan angka 0 pada tampilan aplikasi.

Penambahan program pada button lainnya memiliki cara yang sama dengan penambahan program untuk btn0.

Sebelum menambahkan program untuk button yang lainnya, tambahkan dahulu beberapa variabel global dibawah ini :

//variabel global
boolean koma, mulaiBaru, nolLagi;
double nilai1, nilai2, hasil;
int proses, hasilInt;

DecimalFormat formatData = new DecimalFormat("#.#####");
 

Setelah itu tambahkan juga beberapa inisialisasi terhadap beberapa variabel didalam fungsi kalkulator (yang mana didalam fungsi tersebut terdapat program inisialisasi komponen GUI/ initComponents()).

public kalkulator() {
initComponents();
mulaiBaru=true;
koma=false;
nolLagi=true;
nilai1=0;
nilai2=0;
hasil=0;
}

Berikut ini merupakan program/coding untuk semua buttonnya.

 private void btn0ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
if(txtHasil.getText().isEmpty() || nolLagi==true)
{
txtHasil.setText("0");
nolLagi=false;
}
else{
mulaiBaru=false;
txtHasil.setText(txtHasil.getText() + "0");
}
}
else txtHasil.setText(txtHasil.getText() + "0");
}

private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("1");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "1");
}

private void btn2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("2");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "2");
}

private void btn3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("3");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "3");
}

private void btn4ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("4");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "4");
}

private void btn5ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("5");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "5");
}

private void btn6ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("6");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "6");
}

private void btn7ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("7");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "7");
}

private void btn8ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("8");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "8");
}

private void btn9ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("9");
mulaiBaru=false;
}
else txtHasil.setText(txtHasil.getText() + "9");
}

private void btnKomaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(mulaiBaru){
txtHasil.setText("0.");
koma=true;
mulaiBaru=false;
}
else{
if(!koma){
if(txtHasil.getText().isEmpty())txtHasil.setText("0.");
else txtHasil.setText(txtHasil.getText() + ".");
koma=true;
}
}
}

private void btnBagiActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
nilai1 = Double.valueOf(txtHasil.getText());
txtProses.setText(txtHasil.getText() + " / ");
mulaiBaru=true;
proses=1;
}

private void btnKaliActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
nilai1 = Double.valueOf(txtHasil.getText());
txtProses.setText(txtHasil.getText() + " * ");
mulaiBaru=true;
proses=2;
}

private void btnKurangActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
nilai1 = Double.valueOf(txtHasil.getText());
txtProses.setText(txtHasil.getText() + " - ");
mulaiBaru=true;
proses=3;
}

private void btnTambahActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
nilai1 = Double.valueOf(txtHasil.getText());

txtProses.setText(txtHasil.getText() + " + ");
mulaiBaru=true;
proses=4;
}

private void btnSamaDenganActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
nilai2 = Double.valueOf(txtHasil.getText());
switch(proses){
case 1 :
hasil = nilai1 / nilai2;
break;
case 2 :
hasil = nilai1 * nilai2;
break;
case 3 :
hasil = nilai1 - nilai2;
break;
case 4 :
hasil = nilai1 + nilai2;
break;
default :
break;
}

if(hasil%1==0){
hasilInt = (int)Math.round(hasil);
txtHasil.setText(Integer.toString(hasilInt));
}
else{
hasil = Double.valueOf(formatData.format(hasil));
txtHasil.setText(Double.toString(hasil));
}
txtProses.setText("");

//inisialisasi variabel
mulaiBaru=true;
koma=false;
nolLagi=true;
proses=0;
nilai1=0;
nilai2=0;
hasil=0;
}

private void btnCActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
txtProses.setText("");
txtHasil.setText("");
//inisialisasi variabel
mulaiBaru=true;
koma=false;
nolLagi=true;
proses=0;
nilai1=0;
nilai2=0;
hasil=0;
}
 

untuk file project lengkapnya, silahkan download disini….

semoga bermanfaat…. 🙂