Parsing data 
merupakan sebuah kegiatan yang wajib ada pada sebuah program, jika pada 
program tersebut terdapat 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 paring data terhadap paket data yang diterima. Pada postingan
 kali ini, akan dibahas mengenai program parsing data pada robot, yang 
mana pembuatan programnya menggunakan arduino IDE.
Pada
 program kali ini, terdapat beberapa bagian mulai dari program 
inisialisasi, terima data, parsing data, menampilkan data dan beberapa 
bagian lainnya. Berikut ini penjelasan singkat mengenai bagian-bagian 
pada program.
1.   Deklarasi variabel
Deklarasi
 variabel digunakan untuk mengenalkan variabel-variabel yang akan 
digunakan. Terdapat beberapa variabel yang dideklarasikan sebagai 
variabel global, yaitu sebagai berikut :
String dataIn; String dt[10]; int i; boolean parsing=false;
2.   Inisialisasi
Proses
 inisialisasi dan beberapa konfigurasi terletak pada fungsi setup(). Hal
 ini dikarenakan fungsi setup() adalah fungsi yang 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);
   dataIn="";
}
pada program diatas, terdapat sebuah konfigurasi yang merupakan pengaktifan komunikasi serial dengan nilai baudrate sebesar 9600. Selain itu, variabel dataIn akan diinisialisasi dengan cara mengisi variabel tersebut dengan data kosong.
3.   Terima data serial
Proses
 terima data serial terdapat didalam fungsi loop(). Setiap program yang 
ada didalam fungsi ini akan dijalankan terus selama rangkaian 
mendapatkan supplai tegangan. Kontroller selalu dalam posisi stand by
 untuk menerima data serial. Jika ada data masuk, maka data tersebut 
akan ditampung dahulu kedalam sebuah variabel bernama inChar. Variabel 
tersebut akan dicek, jika karakter yang diterima berupa karakter enter 
(‘\n’) maka proses penerimaan data selesai yang kemudian akan memberikan
 nilai true pada variabel parsing. Jika karakter yang diterima buka 
karakter enter, maka karakter tersebut akan ditampung terlebih dahulu 
kedalam sebuah buffer yang berupa variabel string bernama dataIn.
Jika
 variabel parsing bernilai true, maka menandakan proses parsing data 
dimulai. Proses parsing data dimulai dengan pemanggilan fungsi 
parsingData(). Dan proses parsing data pun dimulai.
void loop() {
  if(Serial.available()>0) {
    char inChar = (char)Serial.read();
    dataIn += inChar;
    if (inChar == '\n') {
    parsing = true;
  }
}
if(parsing){
    parsingData();
    parsing=false;
    dataIn="";
  }
}
4.   Parsing data
Proses
 parsing data terjadi pada fungsi parsingData(). 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 dataIn. Tiap karakter tersebut akan dibandingkan dengan tail
 (karakter terakhir paket data) yang berupa karakter pagar (#) dan 
karakter pemisah antar data yang berupa karakter koma(,). Pengecekan 
dimulai dari index 1 (karakter kedua) variabel dataIn, 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 yang diberi
 nama dt. 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 dt akan ditampilkan. Dengan begitu, proses parsing data pun 
selesai dilakukamn.
Berikut ini merupakan program yang terdapat pada fungsi parsingData().
void parsingData(){
int j=0;
//kirim data yang telah diterima sebelumnya
Serial.print("data masuk : ");
Serial.print(dataIn);
Serial.print("\n");
//inisialisasi variabel, (reset isi variabel)
dt[j]="";
//proses parsing data
for(i=1;i<dataIn.length();i++){
//pengecekan tiap karakter dengan karakter (#) dan (,)
if ((dataIn[i] == '#') || (dataIn[i] == ','))
{
//increment variabel j, digunakan untuk merubah index array penampung
j++;
dt[j]="";       //inisialisasi variabel array dt[j]
}
else
{
//proses tampung data saat pengecekan karakter selesai.
dt[j] = dt[j] + dataIn[i];
}
}
//kirim data hasil parsing
Serial.print("data 1 : ");
Serial.print(dt[0].toInt());
Serial.print("\n");
Serial.print("data 2 : ");
Serial.print(dt[1].toInt());
Serial.print("\n");
Serial.print("data 3 : ");
Serial.print(dt[2].toInt());
Serial.print("\n\n");
}
Hasil program :