Posts Tagged ‘code application’

arduino pcArduino umumnya menggunakan komunikasi serial RS232 yang memanfaatkan rangkaian tambahan dengan komponen utama berupa IC MAX232, FT232, PL2303 maupun ATMega8U2 dan ATMega16U2 (pada arduino seri terbaru) untuk dapat terkoneksi dengan PC. Dengan komunikasi serial ini, kita dapat meng-upload program yang telah kita buat sebelumnya menggunakan arduino IDE ke board arduino. Selain itu, kita juga dapat mengkoneksikan arduino dengan PC sesuai dengan keinginan kita agar dapat saling berkomunikasi/bertukar data.

Saat board arduino terkoneksi dengan PC/laptop pertama kali, maka akan muncul permintaan untuk menginstal driver. Driver inilah yang menghubungkan arduino dengan COMPort yang ada pada PC/laptop. Berikut ini merupakan cara penginstalan driver tersebut.

 

Setelah berhasil melakukan penginstalan driver, maka secara otomatis arduino akan terdaftar pada salah satu COMPort pada PC. Kita dapat melihat COM yang digunakan dengan cara membuka device manager PC. Berikut ini merupakan COM yang digunakan oleh arduino pada PC saya.

(more…)

Advertisements

communicationAkhirnya, ada kesempatan untuk posting lagi setelah beberapa lama ga posting karena lagi ada kerjaan +  sibuk ngerjain tugas kuliah + malas yang bercampur menjadi 1. 😀

Postingan kali ini sebenernya untuk menjawab beberapa pertanyaan yang ada di postingan saya sebelumnya tentang Program kirim dan terima data via serial port di JAVA.

Nah, pada postingan ini ada beberapa penambahan pada source/program java untuk kirim dan terima data serial, yang mana nantinya aplikasi akan dikoneksikan ke hardware. Disini saya menggunakan arduino uno sebagai hardwarenya.

Pertama, akan saya paparkan dulu beberapa penambahan pada program JAVA untuk kirim dan Terima data serial.

Secara umum, dari segi tampilan tidak banyak berubah hanya saja saya tambahkan 1 textBox yang mana nantinya data pada textBox tersebut akan dikirimkan ke hardware/arduino. Selain itu saya tambahkan juga 2 buah jLabel yang saya gunakan untuk menandai mana textBox untuk menampilkan data yang diterima melalui serial port dan data yang akan dikirimkan.

Untuk tampilan aplikasi, silahkan susun sesuai dengan keinginan, berikut ini merupakan tampilan yang saya buat. Rada kacau + berantakan tapi alhamdulillah berfungsi dengan baik.

 java arduino serial port 1

Dari segi source/program ada beberapa penambahan, yaitu diantaranya sebagai berikut :

1.  Program tampilan (program saat tombol “Kirim Data” ditekan)

private void btnKirimActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Serial.kirimData((byte)'a');
Serial.kirimData(txtDataOut.getText());
}

Program diatas berfungsi untuk mengirimkan data yang ada pada txtDataOut melalui serial port.

2.  Program untuk kirim data

             Pada class SerialPort, khususnya untuk kirim data, saya tambahkan 1 fungsi lagi untuk menampung data string sebelum dikirimkan. Berikut ini adalah programnya.

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

public void kirimData(String str){
for(int i=0; i<str.length();i++){
sendChar((byte)str.charAt(i));
}
try{
outPut.write(10);
outPut.flush();
}
catch(IOException ex){}
}

2.  Program untuk terima data

       Pada program terima datanya, ada penambahan pada saat event terima data serial. Pada program sebelumnya, data akan diterima per karakter kemudian akan ditampilkan perkarakter pula. Sehingga, jika pada saat kita menerima sebuah data string, yang ditampilkan adalah karakter terakhir dari string tersebut. Jika karakter terakhir dari data yang kita kirimkan adalah berupa enter(new line) sehingga seolah-olah pada txtDataIn tidak menampilkan karakter yang diterima.

pada program yang baru, ada beberapa baris program yang saya tambahkan untuk menampung data yang masuk. Untuk menampilkan data string, maka data yang masuk perkarakter tersebut saya tampung dulu, nah penanda untuk menampilkan data tersebut adalah data enter(new line). Jadi, setiap data yang dikirimkan dari hardware ke aplikasi harus diakhiri dengan new line.

Berikut ini program terima datanya :

public void serialEvent(SerialPortEvent evt) {
if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
if(dataSerial != '\n'){
dataSerial = (char) inPut.read();
dataIn = dataIn + String.valueOf(dataSerial);
System.out.print(dataIn);
System.out.print("\t");
System.out.print(dataSerial);
System.out.print("\n");
}
else{
window.txtDataIn.setText(dataIn);
dataSerial=' ';
dataIn="";
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.toString());
}
}
}

        Data yang masuk adalah data per karakter, kemudian saya tampung dahulu kedalam sebuah variabel bertype string yang saya beri nama dataIn. Kemudian setelah mendapat karakter new line, data yang ada pada variabel dataIn ditampilkan ke txtDataIn.

Setelah menambahkan beberapa program pada aplikasi, saya kemudian membuat sedikit program untuk menerima dan mengirim data pada arduino, yang mana program pada arduino ini saya ambil dari contoh SerialEvent. Berikut ini adalah program untuk hardware yang telah saya buat.

arduino Java

Pada program diatas, data yang masuk ditampung dahulu pada variabel inputString. Kemudian, sama seperti pada aplikasi setelah menerima data karakter new line data pada variabel inputString tadi akan dikirim balik ke aplikasi. Terjadi kesamaan saat mengolah data yang diterima antara aplikasi dan hardware, hal ini disebabkan karena library yang saya gunakan pada aplikasi sama dengan library yang digunakan pada IDE arduino.

berikut screenshot saat aplikasi dijalankan

java arduino serial port 2

java arduino serial port 3

Program aplikasi Java dan arduino diatas dapat didownload disini (aplikasi) dan disini (hardware/arduino).

Semoga bermanfaat. 🙂

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….. 🙂

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…. 🙂

Logo MP3

Dapat inspirasi, sesaat setelah mempresentasikan tugas UTS “Sistem Monitoring Lampu Lalu Lintas” yaitu memutar sebuah lagu berekstensikan .mp3 menggunakan JAVA. Program ini sangat sederhana, ya…namanya juga sambil belajar :D.

Program ini membutuhkan sebuah library yang memang digunakan untuk memainkan lagu yg berekstensikan .mp3.

library yang dipakai yaitu JLayer Library.

untuk mendowload / mengunduh Jlayer Library klik disini.

Untuk memulai program, buatlah sebuah project Java Desktop Aplication lalu buat 2 buah method pada class yang diinginkan. 1 method untuk memainkan file mp3, file 1 nya lagi untuk memberhentikan.

1. method untuk memainkan file mp3

    //method play file mp3
    public static void play() {
        try {
            FileInputStream fis     = new FileInputStream("/Lagu/Cokelat - Salah.mp3"); //ganti dengan nama file yang anda inginkan
            BufferedInputStream bis = new BufferedInputStream(fis);
            player = new Player(bis);
        }
        catch (Exception e) {
            System.out.println("Problem playing file " + filename);
            System.out.println(e);
        }

        // run in new thread to play in background
        new Thread() {
            @Override
            public void run() {
                try {
                    player.play();
                }
                catch (Exception e) { System.out.println(e); }
            }
        }.start();
    }

method untuk memberhentikan lagu yang sedang dimainkan :

    public void close()
       {
           player.close();
       }

Jika ingin mendownload file projectnya, silahkan klik disini.

Semoga bermanfaat… 😀

sumber