Data Error Pada Komunikasi Serial Antara IOIO-Arduino

Komunikasi serial merupakan komunikasi yang dikirim per paket data. Komunikasi serial merupakan  sebuah alternatif komunikasi antar mikrokontroler selain komunikasi digital. Salah satu keunggulan komunikasai serial dibandingkan komunikasi digital adalah komunikasi serial hanya membutuhkan pin tx/rx untuk mengirimkan paket data umumnya 8bit untuk kebanyakan mikrontroler). Lebih sedikit dibandingkan menggunakan komunikasi digital yang membutuhkan 8 pin digital untuk mengirim 8bit data. Akan tetapi dalam komunikasi serial yang pengirimnanya dilakukan secara bit per bit seringkali terjadi data error atau hilangnya data pada pengiriman paket. Hal tersebut tentunya akan sangat mengganggu aktifitas komunikasi antar 2 perangkat mikrokontroler. Contoh terjadinya data error yang pernah dijumpai adalah saat pengiriman data variabel sensor android melalui komunikasi serial IOIO ke arduino. Saat komunikasi serial digunakan untuk mengirim 1 data variabel, data error tidak begitu terlihat. Akan tetapi saat digunakan untuk mengirim multi variabel sekaligus maka pada waktu tertentu akan terjadi data error berupa hilangnya data atau data yang terlewati. Contohnya tampak pada serial monitor mada arduino berikut.

    1. Hasil saat awal pembacaan data

Terlihat bahwa 4 data yang dikirim masih sesuai dengan yang diterima.

 

    1. Hasil pembacaan data setelah beberapa waktu

Tampkak bahwa ada data yang terlewat. Sehingga hanya 1 data yang terbaca.

 

Solusi

Hipotesa awal data eror yang terjadi adalah karena data yang dikirim terus menerus dengan kecepatan tinggi sehingga dimungkinkan akan ada data yang terlewat dalam pengiriman. Untuk mengatasi hal dilakukan percobaan dengan membatasi pengiriman dengan sebuah parameter tertentu. Parameter tersebut berfungsi sebagai pembangkit komunikasi serial dan satu parameter lagi untuk menghentikan pengiriman sesaat. Pengiriman tersebut dilakukan berulang-ulang dengan tunda waktu yang singkat sehingga data yang diterima tidak terlalu terlambat dalam men-cover perubahan data variabel sensor. Selain itu data juga tampak berkesinambungan layaknya komunikasi serial pada umumnya. Pada percobaan yang dilakukan, parameter yang digunakan untuk membangkitkan dan memutus komunikasi serial adalah pin digital arduino yang memberikan logika high sebagai parameter mulai pengiriman dan logika low sebagai parameter pemutus pengiriman.

Berikut adalah potongan listing program yang digunakan dalam percobaan.

  1. Listing pada loop IOIO.

@Override

publicvoid loop() throws ConnectionLostException,

InterruptedException {

try {

/*

* String s= Integer.toString(z); //konversi integer ke

* string //String r= Integer.toString(y); int

* akhir=s.length();//panjang karakter byte[] t= new

* byte[akhir]; //array karakter t=s.getBytes();//mengambil

* data karakter for(int i=0;i<t.length;i++){

* //out_.write(t);//kirim nilai sumbu z }

*

* a=0; if (a == 0) { for (int i = 0; i < 1; i++) {

* out1.write(‘z’); a = 1; } } if (a == 1) { for (int i = 0;

* i < 1; i++) { out1.write(z); a = 2; } } if (a == 2) { for

* (int i = 0; i < 1; i++) { out1.write(‘y’); a = 3; } } if

* (a == 3) { for (int i = 0; i < 1; i++) { out1.write(y); }

* }

*/

boolean value = input1.read();

if (value==true) {

out1.write(‘z’);

out1.write(z);

out1.write(‘y’);

out1.write(y);

led_.write(false);

thread.sleep(100);

}

if (value==false) {

//out1.write(‘a’);

led_.write(true);

thread.sleep(100);

}

// out1.write(‘y’);

// out1.write(y);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

};

}

 

  1. Listing pada Arduino

void loop() {
digitalWrite(43, HIGH);
delay(10);
if(Serial2.available()){
Data1=Serial2.read();
Serial.println(Data1);
}

digitalWrite(43, LOW);
delay(100);
}

Hasil dari percobaan

    1. Hasil saat awal pembacaan data

 

      1. Hasil pembacaan data setelah beberapa waktu

 

 

Kesimpulan

Data yang terbaca menjadi lebiah stabil tanpa ada data yang terlewat.

Leave a comment