Anda di halaman 1dari 20

20 Resmi

Laporan

Praktikum 8

Pengiriman Frame Data Pada Komunikasi Serial

Disusun oleh :
Happy Fibi Ananda
Yunika Bestari
Gabymars Yofie
Ulfa Sutrianingsih
Mohammad Bastomy
Nur Rahmaniah

1210 121 033


1210 121 036
1210 121 046
1210 121 048
1210 121 049
1210 121 053

JURUSAN TELEKOMUNIKASI
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
2014

Praktikum 8 | Praktikum Mikrokontroler

Pengiriman Frame Data20Pada Komunikasi Serial


I.

Tujuan
1. Mahasiswa mampu menggunakan program Arduino dengan baik.
2. Mahasiswa memahami dan mampu mengirim frame data pada komunikasi serial
Arduino.

II.

Dasar Teori
II.1.
Parsing Data
Parsing data merupakan sebuah kegiatan untuk pengolahan data terhadap sebuah
paket data tertentu. Parsing data juga diperlukan pada sisi software dan hardware dari
robosoccer. Data yang diperoleh dari komputer server mengharuskan hardware
melakukan parsing data terhadap paket data yang diterima.
Proses parsing data terjadi pada fungsi. Sebelum proses parsing dimulai, data yang
diterima yang telah ditampung sebelummnya ditampilkan/dikirimkan kembali melalui
serial port.
Parsing data dilakukan dengan cara mengecek tiap karakter yang ada pada
variabel yang telah dideskripsikan. Tiap karakter tersebut akan dibandingkan dengan
tail (karakter terakhir paket data) yang, misal, berupa karakter pagar (#) dan karakter
pemisah antar data yang, misal, berupa karakter koma(,). Pengecekan dimulai dari
index 1 (karakter kedua) variabel, hal ini dikarenakan index 0 (karakter pertama)
merupakan header (karakter pertama) dalam paket data.
Setiap karakter yang telah melalui proses pengecekan, akan ditampung kedalam
sebuah variabel string yang dikelompokkan dalam sebuah array. Jika pada proses
pengecekan ditemukan karakter koma (,), maka dengan otomatis variabel penampung
data setelah dicek akan berpindah dengan cara increment index array-nya. Proses
tersebut akan terus dilakukan berulangkali sampai perulangan berakhir.
Setelah proses parsing data selesai, data hasil proses parsing yang terdapat pada
array akan ditampilkan. Dengan begitu, proses parsing data pun selesai dilakukan.

Praktikum 8 | Praktikum Mikrokontroler

Pengertian Komunikasi Serial20

II.2.

Komunikasi serial adalah salah satu metode komunikasi data dimana proses
pengiriman data dilakukan per satu bit data secara berurutan dan bergantian yang
dikirimkan melalui seuntai kabel pada suatu waktu tertentu. Fungsinya digunakan
untuk komunikasi data antara Arduino dengan komputer atau perangkat lain (PLC,
Sensor, HMI, dll).
Tabel 8.1. Daftar Istilah pada Komunikasi Serial
1.

No.

Istilah
Baudrate

Penjelasan
Kecepatan transfer data dinyatakan dalam

2.

Data Bit

satuan bps (bit per second)


Jumlah bit yang dikirimkan dalam 1 frame

3.

Parity Bit

data (5bit 9 bit)


Bit parity digunakan dalam pengecekan
error untuk menemukan kesalahan yang

4.
5.

Start Bit

mungkin terjadi selama transmisi data


Bit yang digunakan sebagai indikator awal

Stop Bit

sebuah frame data (selalu Low)


Bit yang digunakan sebagai indikator akhir
sebuah frame data (selalu high)

Komunikasi ini mempunyai suatu kelebihan yaitu hanya membutuhkan satu jalur
dan kabel yang sedikit dibandingkan dengan komunikasi paralel. Pada prinsipnya
komunikasi serial merupakan komunikasi dimana pengiriman data dilakukan per bit
sehingga lebih lambat dibandingkan komunikasi parallel, atau dengan kata lain
komunikasi serial merupakan salah satu metode komunikasi data di mana hanya satu
bit data yang dikirimkan melalui seuntai kabel pada suatu waktu tertentu. Pada
dasarnya komunikasi serial adalah kasus khusus komunikasi paralel dengan nilai n = 1,
atau dengan kata lain adalah suatu bentuk komunikasi paralel dengan jumlah kabel
hanya satu dan hanya mengirimkan satu bit data secara simultan.Hal ini dapat
disandingkan dengan komunikasi paralel yang sesungguhnya di mana n-bit data
dikirimkan bersamaan, dengan nilai umumnya 8 n 128.

Praktikum 8 | Praktikum Mikrokontroler

20

Gambar 8.1. Ilustrasi Pengiriman Komunikasi Serial


Komunikasi serial ada dua macam, asynchronous serial dan synchronous
serial.Synchronous serial adalah komunikasi dimana hanya ada satu pihak (pengirim
atau penerima) yang menghasilkan clock dan mengirimkan clock tersebut bersamasama dengan data. Contoh pengunaan synchronous serial terdapat pada transmisi data
keyboard. Asynchronous serial adalah komunikasi dimana kedua pihak (pengirim dan
penerima) masing-masing menghasilkan clock namun hanya data yang ditransmisikan,
tanpa clock. Agar data yang dikirim sama dengan data yang diterima, maka kedua
frekuensi clock harus sama dan harus terdapat sinkronisasi. Setelah adanya
sinkronisasi, pengirim akan mengirimkan datanya sesuai dengan frekuensi clock
pengirim dan penerima akan membaca data sesuai dengan frekuensi clock penerima.
Contoh penggunaan asynchronous serial adalah pada Universal Asynchronous
Receiver Transmitter (UART) yang digunakan pada serial port (COM) komputer.
II.3.

Prinsip Kerja Pengiriman Frame Data pada Komunikasi Serial


Data yang dikirim ke serial port akan dikirim ke buffer pengirim (Tx buffer)
begitupun data yg diterima adalah data yg diambil dari buffer penerima (RX buffer).

Praktikum 8 | Praktikum Mikrokontroler

20

Gambar 8.2. Gambaran Cara Kerja Buffer pada Komunikasi Serial


(sumber : https://pccontrol.wordpress.com/2014/06/28/pengetahuan-dasar-serialkomunikasi-pada-arduino/)

Data yang dikirim dan diterima arduino dalam bentuk ASCII. Misalnya program
arduino mengirim huruf A maka akan dikirim sebenarnya adalah 1 byte code ascii
yaitu 65. Jika mengirim angka 123 maka sebetulnya yg dikirm adalah 3 byte data ascii
yaitu 49, 48, dan 50.
Tabel. 8.2. Fungsi yang Tersedia untuk Komunikasi Serial Arduino
No

Fungsi

Keterangan

.
1.

if (Serial)

mengecek apakah Port sudah siap

2.

Serial.available()

mengecek apakah data sudah ada di buffer

Praktikum 8 | Praktikum Mikrokontroler

20

penerima
3.

Serial.begin()

mengeset kecepatan transmisi data

4.

serial.end()

menon-aktifkan pin rx dan tx sbg fungsi serial


dan kembali sbg pin I/O

5.

Serial.find()

mencari string dlm buffer data

6.

Serial.findUntil()

mencari

buffer

data

sampai

data

dgn

panjang/terminator nya yg diberikan ditemukan


7.

Serial.flush()

menunggu data terkirim semua

8.

Serial.parseFloat()

mengambil data float pertama dari data di buffer


serial.

9.

serial.parseInt()

mengambil data integer pertama dari data di


buffer serial.

10.

Serial.peek()

mengambil data berikutnya di bufer penerima

11.

Serial.print()

mengirim data ASCII

12.

Serial.println()

mengirimdata ASCII + CR,LF (kode enter)

13.

Serial.read()

membaca data yg diterima

14.

Serial.readBytes()

membaca data byte yg diterima

15.

Serial.setTimeout()

mengeset

batas

maksimum

waktu

tunggu(timeout) transmisi data.


16.

Serial.write()

mengirim data byte (numerik)

17.

Serial.serialEvent()

fungsi

ini

akan

dipanggil

jika

datang/diterima.berlaku spt interupsi serial.


III.

Alat dan Bahan


1. Software Arduino

Praktikum 8 | Praktikum Mikrokontroler

data

2. Perangkat Komputer
3. Arduino Uno
4. Kabel USB
IV.

20

Langkah Percobaan
Hubungkan Arduino ke PC Anda menggunakan kabel USB, lalu buka software
Arduino. Program ini untuk memastikan bahwa koneksi antara Arduino dan PC tidak ada
kendala. Ketik program seperti di bawah ini lalu upload ke Arduino.
a. Pengiriman Frame Data dengan Header
1)
void setup() {
Serial.begin(9600);
}
void loop() {
int dataValue1=100;
int dataValue2=80;
char header1='%';
char header2='!';
Serial.print(header1);
Serial.print(dataValue1);
Serial.print(header2);
Serial.print(dataValue2);
Serial.println("");
delay(1);
}
2)
void setup() {
Serial.begin(9600);
}
void loop() {
int dataValue1=100;
int dataValue2=80;
char header1='%';
char header2='!';
Serial.print(header1 + dataValue1 + header2 + dataValue2);

Praktikum 8 | Praktikum Mikrokontroler

Serial.println("");

20

delay(1);
}
3)
void setup() {
Serial.begin(9600);
}
void loop() {
int dataValue1=100;
int dataValue2=80;
char header1='%';
char header2='!';
Serial.print((String)header1 + (String)dataValue1 + (String) header2 + (String)dataValue2);
Serial.println("");
delay(1);
}

b. Penerimaan Komunikasi Serial


int incomingByte = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
while(Serial.available()>0){
incomingByte = Serial.read();
Serial.write(incomingByte);
Serial.println("");
Serial.println(incomingByte);
}
}
c. Melakukan Parsing Data pada Arduino
int incomingByte;
char buffer[15];
int index=0;
boolean flag;
Praktikum 8 | Praktikum Mikrokontroler

20
void setup(){
Serial.begin(9600);
}
void loop(){
while(Serial.available()>0){
incomingByte=Serial.read();
if(incomingByte == '%'){
index=0;
flag=true;
}
if(flag){
buffer[index++] = incomingByte;
}
}
Serial.write(buffer);
Serial.println("");
}

Tugas
a. Buat program untuk parsing data untuk dua header $ dan #
int incomingByte;
char buffer[15];
char buffer1[15];
int index=0;
boolean flag;
boolean flag1;
void setup(){
Serial.begin(9600);
}
void loop(){
while(Serial.available()>0){
incomingByte=Serial.read();
Praktikum 8 | Praktikum Mikrokontroler

if(incomingByte=='!'){

20

index=0;
flag=false;
flag1=false;
}
if(flag){
buffer[index++]=incomingByte;
}
if(flag1){
buffer1[index++]=incomingByte;
}
if(incomingByte=='%'){
index=0;
flag=true;
flag1=false;
}
if(incomingByte=='#'){
index=0;
flag=false;
flag1=true;
}
}
Serial.write(buffer);
Serial.println("");
Serial.write(buffer1);
Serial.println("");
}

b. Tambahan program dengan tail dari dua header tersebut, tail yang digunakan
adalah !
Praktikum 8 | Praktikum Mikrokontroler

int incomingByte;

20

char buffer[15];
char buffer1[15];
int index=0;
boolean flag;
boolean flag1;
void setup(){
Serial.begin(9600);
}
void loop(){
while(Serial.available()>0){
incomingByte=Serial.read();
if(flag){
buffer[index++]=incomingByte;
if(incomingByte=='!'){
index=0;
flag=false;
flag1=false;
}
}
if(flag1){
buffer1[index++]=incomingByte;
if(incomingByte=='!'){
index=0;
flag=false;
flag1=false;
}
}
if(incomingByte=='%'){
index=0;
flag=true;
flag1=false;
}
if(incomingByte=='#'){
Praktikum 8 | Praktikum Mikrokontroler

index=0;

20

flag=false;
flag1=true;
}
}
Serial.write(buffer);
Serial.println("");
Serial.write(buffer1);
Serial.println("");
}

V.

Hasil Percobaan
a. Pengiriman Frame Data dengan Header
Output :
1)
%100 !80
2)
%100 !80
3)
%100 !80
b. Penerimaan Komunikasi Serial
Output :
0
0
0
.
.
.
0
c. Melakukan Parsing Data pada Arduino
Input :
%100

Praktikum 8 | Praktikum Mikrokontroler

20

Output :
100
100
100
.
.
.
100
Tugas
a. Buat program untuk parsing data untuk dua header $ dan #
Input :
$100#80
Output :
100
80
100
80
.
.
.
b. Tambahan program dengan tail dari dua header tersebut, tail yang digunakan
adalah !
Input :
%100!#80!
Output :
100
80
100
80
.
.
.
VI.

Analisa Data
Pada praktikum ini, terdapat 3 percobaan mengenai pengiriman frame data pada
komunikasi serial. Berikut adalah sub percobaan yang terdapat dalam percobaan ini.

Praktikum 8 | Praktikum Mikrokontroler

a) Pengiriman Frame Data dengan20Header


Pada pengiriman frame data dengan header ini, dilakukan 3 modifikasi
program dimana perbedaan terletak pada perintah pengoutputan program. Berikut
penjelasan mengenai ketiga modifikasi program tersebut.
Deklarasi Variabel
Pada ketiga program yang dibuat, variable yang dideskripsikan adalah :
int dataValue1=100;
int dataValue2=80;
char header1='%';
char header2='!';
Pada deklarasi variable tersebut, dataValue1 memiliki nilai 100 dan
dataValue2 memiliki nilai 80 dengan tipe data integer. Sedangkan header1,
yang merupakan header dari dataValue1 adalah karakter % dan header2, yang
merupakan header dari dataValue2 adalah karakter !.

Praktikum 8 | Praktikum Mikrokontroler

Inisialisasi

20

Inisialisasi dilakukan pada fungsi setup() dimana hanya dijalankan sekali


saat program pertama kali dijalankan. Dengan kata lain fungsi setup() akan
dijalankan pada saat rangkaian diberi sumber tegangan.
void setup() {
Serial.begin(9600);
}
Pada program tersebut, program diatur dengan baudrate sebesar 9600.

Mengirim Data Serial


Proses mengirim data serial dilakukan fungsi loop(). Pada proses ini,

digunakan serial.print() untuk mengirim data ascii, namun output akan muncul
dalam baris yang sama. Data ascii yang dikirim adalah data yang telah
dideklarasikan sebelumnya. Output akan muncul sesuai dengan pengaturan
serial.print(). Sedangkan, serial.printl() untuk mengirimkan data ascii, namun
output akan muncul pada baris selanjutnya (penambahan enter). Selain itu,
ditambahkan delay(1) agar output selanjutnya terdelay 1 ms.
Pada program ini, dilakukan perbedaan pada output serial.print(). Berikut
perbedaannya :
Program (1)
Serial.print(header1);
Serial.print(dataValue1);
Serial.print(header2);
Serial.print(dataValue2);
Pada program tersebut, maka output yang dihasilkan adalah :
%100 !80
Program (2)
Serial.print(header1 + dataValue1 + header2 + dataValue2);
Pada program tersebut, maka output yang dihasilkan adalah :
%100 !80
Program (3)
Serial.print((String)header1 + (String)dataValue1 + (String) header2 +
Praktikum 8 | Praktikum Mikrokontroler

(String)dataValue2); 20
Pada program tersebut, maka output yang dihasilkan adalah :
%100 !80
Persamaan output pada ketiga program tersebut dikarenakan output
dikeluarkan dengan perintah serial.print(). Dari program tersebut, terlihat pula
bahwa pengeluaran data dengan header dapat dengan 3 cara berbeda. Pada
program (3), data juga dapat dikategorikan dalam string. Namun, dengan
adanya string tersebut, data tersebut tidak dapat diolah lebih lanjut dalam
perhitungan.
b) Penerimaan Komunikasi Serial
Pada penerimaan komunikasi serial ini, terdapat bagian program yang
dijelaskan di bawah ini :
Deklarasi Variabel
Pada program yang dibuat, variable yang dideskripsikan adalah :
int incomingByte = 0;
Pada deklarasi variable tersebut, incomingByte memiliki nilai 0 dengan tipe
data integer.

Inisialisasi
Inisialisasi dilakukan pada fungsi setup() dimana hanya dijalankan sekali

saat program pertama kali dijalankan. Dengan kata lain fungsi setup() akan
dijalankan pada saat rangkaian diberi sumber tegangan.
void setup() {
Serial.begin(9600);
}
Pada program tersebut, program diatur dengan baudrate sebesar 9600.

Terima Data Serial


Terima data serial dilakukan pada fungsi loop() dimana dilakukan

pengulangan program dengan perintah while(). Program akan dijalankan terus


selama rangkaian mendapatkan supplai tegangan. Di bawah ini adalah fungsi
loop() tersebut:
void loop() {
while(Serial.available()>0){
Praktikum 8 | Praktikum Mikrokontroler

20
incomingByte = Serial.read();

Serial.write(incomingByte);
Serial.println("");
Serial.println(incomingByte);
}
}
Pada program tersebut, program diatur untuk melakukan pengecekan pada
data yang masuk dengan perintah serial.available(). Pada fungsi pengulangan
while(), data diambil dari buffer penerima dengan perintah serial.read().
Pengambilan dilakukan pada variable incomingByte yang bernilai 0. Kemudian,
program akan mengirimkan data incomingByte dengan perintah serial.write(), lalu
mengeluarkannya secara sebaris-sebaris dengan perintah serial.println() dan
serial.println(incomingByte).
Maka, output yang dihasilkan adalah nilai 0, sesuai yang dideskripsikan pada
variable incomingByte. Nilai 0 tersebut akan dikeluarkan secara terus menerus
dalam baris yang berkelanjutan. Output dari program tersebut adalah :
0
0
.
.
0
c) Melakukan Parsing Data pada Arduino
Pada penerimaan komunikasi serial ini, terdapat bagian program yang
dijelaskan di bawah ini :
Deklarasi Variabel
Pada program yang dibuat, variable yang dideskripsikan adalah :
int incomingByte;
char buffer[15];
int index=0;
boolean flag;
Pada deklarasi variable tersebut, incomingByte memiliki tipe data integer;
variable buffer bertipe character dengan batas karakter 15; variable index
bernilai 0 dengan tipe integer; dan variable flag bertipe data boolean.
Praktikum 8 | Praktikum Mikrokontroler

Inisialisasi

20

Inisialisasi dilakukan pada fungsi setup() dimana hanya dijalankan sekali


saat program pertama kali dijalankan. Dengan kata lain fungsi setup() akan
dijalankan pada saat rangkaian diberi sumber tegangan.
void setup() {
Serial.begin(9600);
}
Pada program tersebut, program diatur dengan baudrate sebesar 9600.

Parsing Data
Terima data serial dilakukan pada fungsi loop() dimana dilakukan

pengulangan program dengan perintah while(). Program akan dikalankan terus


selama rangkaian mendapatkan supplai tegangan. Di bawah ini adalah fungsi
loop() tersebut:
void loop(){
while(Serial.available()>0){
incomingByte=Serial.read();
if(flag){
buffer[index++] = incomingByte;
}
if(incomingByte == '%'){
index=0;
flag=true;
}
}
Serial.write(buffer);
Serial.println("");
}
Pada program tersebut, program diatur untuk melakukan pengecekan
berulangan pada data yang masuk dengan perintah pengulangan while(). Data
diinputkan melalui keyboard dengan perintah Serial.write(buffer) dimana diberi
Praktikum 8 | Praktikum Mikrokontroler

batasan maksimal sepanjang 1520


karakter. Pada praktikum ini, input buffer yang
diberikan adalah %100.
Pengecekan dilakukan dengan cek incomingByte atau data header. Jika header
berisi %, maka nilai index diberi nilai default 0, maka flag bernilai true. Perintah
true pada flag ini kemudian menjalankan perintah if selanjutnya yang akan
mengecek karakter buffer selanjutnya satu persatu dengan perintah :
if(flag){
buffer[index++] = incomingByte;
}
Jika program menemui %, maka index akan kembali ke default 0. Hal ini
akan menyebabkan program hanya akan mengeluarkan karakter setelah %, tanpa
menuliskan %.
Maka, output yang dihasilkan dari input %100 adalah nilai 100 tanpa header
%, sesuai yang diinputkan pada buffer. Nilai 100 tersebut akan dikeluarkan
secara terus menerus dalam baris yang berkelanjutan. Output dari program
tersebut adalah :
100
100
.
.
100
VII.

Kesimpulan
Kesimpulan yang didapatkan dari praktikum ini adalah :
1. Pada pengirimian data frame dengan header, header dideskripsikan dalam tipe data
char dimana data dengan header dapat dicetak dengan perintah serial.print().
Pengeluaran data juga dapat dilakukan dalam 3 cara berbeda : (1) pengeluaran data dan
header secara satu persatu (dalam serial.print() berbeda); (2) pengeluaran data dan
header secara bersamaan (dalam serial.print() yang sama); (3) pengeluaran data dan
header secara bersamaan (dalam serial.print() yang sama), namun dalam tipe string.
2. Pada penerimaan komunikasi serial, data disimpan di buffer, kemudian dapat
dipanggil dengan perintah serial.read().
3. Pada parsing data Arduino, karakter yang dimasukkan dapat dicek satu persatu untuk
mengecek posisi header. Kemudian data input akan dikeluarkan tanpa header.

Praktikum 8 | Praktikum Mikrokontroler

20

Daftar Pustaka

https://grsbatch5.wordpress.com/2013/02/19/parsing-data-di-arduino/
http://ricosanfransisko-samosir.blogspot.com/2013/10/komunikasi-serial_22.html
https://pccontrol.wordpress.com/2014/06/28/pengetahuan-dasar-serial-komunikasi-pada-

arduino/
http://simpultekno.blogspot.com/2014/11/belajar-komunikasi-serial-arduino.html

Praktikum 8 | Praktikum Mikrokontroler

Anda mungkin juga menyukai