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 :