Skip to main content

PARSING DATA ARDUINO


DEFINISI

Kata Parsing (parse) berasal dari Bahasa inggris yang memiliki arti mengurai. Maka, parsing data adalah suatu kegiatan untuk  mengurai suatu data.

Dalam pemrograman misal di Arduino, kegiatan parsing data dapat dikaitkan sebagai suatu kegiatan untuk mengolah suatu paket data masukkan dengan cara memisahkan paket data tersebut ke dalam uraian-uraian data yang akan diolah ke tahap berikutnya.

FUNGSI
  1. Pemilihan dan pengambilan data pada suatu paket data masukan.
  2. Mempermudah komunikasi data karena dengan adanya metoda parsing, pengirim hanya perlu memberi satu line paket data yang didalamnya sudah mencakup banyak data.


CONTOH

Paket data masukan :
“A100B124C14D15”

A,B,C,D sebagai identifier.

100, 124,14,15, sebagai value dari identifier.

Terurai menjadi data-data sebagai berikut:

1. A = 100

2. B = 124

3. C = 14

4. D = 15

Dimana A,B,C, dan D adalah data-data yang akan diolah selanjutnya.

IMPLEMENTASI PADA PROGRAM

Berikut hanyalah contoh sketsa program pada sebuah project 

String dataIn;             //variabel penampung
String YAW[10];            //variabel string array penampung data uraian YAW
String PITCH[10];          //variabel string array penampung data uraian PITCH
int i, X, Y;        // indeks-indeks array data penampung, dataIn, YAW, PITCH
boolean parsing = false;   //Inisialisasi (just in case)

//variabel penampung hasil parsing

int Position_YAW ;
int Position_PITCH;

void setup()
{
  Serial.begin(9600);
}

void loop()

{
  if (Serial.available() > 0) //jika ada serial
  {
    char inChar = (char)Serial.read();                //serial in char per char
    dataIn += inChar;                                 //tampung char

    if (inChar == ' ')                  //indikasi paket data selesai (CR)
    {
      parsing = true;
    }
  }
  if (parsing)
  {
    parsingData();                       //panggil fungsi parsing
    parsing = false;                     //parsing selesai
    dataIn = " ";                        //data penampung dihapus
  }
}

void parsingData()
{

  Serial.print("data masuk : ");
  Serial.print(dataIn);
  Serial.print("\n");


  for (i = 0; i < dataIn.length(); i++)        //scan string penampung per 1 karakter
  {

    if (dataIn[i] == 'Y')                      //jika pengenal Y untuk YAW terbaca
    {
      Y++;                                     // maka indeks penampung YAW +1
      YAW[Y] = "";                             // kosong sebelum diisi
    }

    else
    {
      YAW[Y] = YAW[Y] + dataIn[i]; //Array indeks ke-Y penampung data YAW dibuffer
    }

    if (dataIn[i] == 'X')         //jika pengenal X untuk PITCH terbaca
    {
      X++;                        // maka indeks penampung PITCH +1
      PITCH[X] = "";
    }

    else
    {
      PITCH[X] = PITCH[X] + dataIn[i]; //Array indeks ke-X penampung data PITCH dibuffer
    }

  }

  if (PITCH[X] == "")
  {
    Serial.print("YAW : ");
    Serial.print(YAW[Y].toInt());
    Serial.print("\n");
    Serial.print("PITCH : ");
    Serial.print('0');
    Serial.print("\n");
  }

  if (YAW[Y] == "")
  {
    Serial.print("YAW : ");
    Serial.print(YAW[Y].toInt());
    Serial.print("\n");
    Serial.print("PITCH : ");
    Serial.print('0');
    Serial.print("\n");
  }
  else
  {
    Serial.print("YAW : ");
    Serial.print(YAW[Y].toInt());
    Serial.print("\n");
    Serial.print("PITCH : ");
    Serial.print( PITCH[X].toInt());
    Serial.print("\n");
  }

  //hasil parsing tampung ke dalam integer

  Position_YAW = YAW[Y].toInt();
  Position_PITCH = PITCH[X].toInt();
}

PENJELASAN

Fungsi di loop:

void loop()

{
  if (Serial.available() > 0) //jika ada serial
  {
    char inChar = (char)Serial.read();                //serial in char per char
    dataIn += inChar;                                 //tampung char



    if (inChar == ' ')                  //indikasi paket data selesai (CR)
    {
      parsing = true;
    }
  }
  if (parsing)
  {
    parsingData();                       //panggil fungsi parsing
    parsing = false;                     //parsing selesai
    dataIn = " ";                        //data penampung dihapus
  }
}

Serial arduino membaca data byte per byte. Satu byte tersebut ditampung ke inChar. Lalu, data inChar ditumpuk di variabel penampung/buffer dataIn. Setelah ada indikasi paket data selesai dengan adanya carriage return –  dalam hal ini menggunakan spasi (“ “) – parsing data dilakukan dengan memanggil fungsi parsingData();

Fungsi parsing :

void parsingData()
{

  Serial.print("data masuk : ");
  Serial.print(dataIn);
  Serial.print("\n");


  for (i = 0; i < dataIn.length(); i++)        //scan string penampung per 1 karakter
  {

    if (dataIn[i] == 'Y')                      //jika pengenal Y untuk YAW terbaca
    {
      Y++;                                     // maka indeks penampung YAW +1
      YAW[Y] = "";                             // kosong sebelum diisi
    }

    else
    {
      YAW[Y] = YAW[Y] + dataIn[i]; //Array indeks ke-Y penampung data YAW dibuffer
    }

    if (dataIn[i] == 'X')         //jika pengenal X untuk PITCH terbaca
    {
      X++;                        // maka indeks penampung PITCH +1
      PITCH[X] = "";
    }

    else
    {
      PITCH[X] = PITCH[X] + dataIn[i]; //Array indeks ke-X penampung data PITCH dibuffer
    }

  }

  ...

  //hasil parsing tampung ke dalam integer

  Position_YAW = YAW[Y].toInt();
  Position_PITCH = PITCH[X].toInt();
}




Konsep utama dari parsing ini adalah melakukan scanning terhadap variabel buffer/penampung dataIn. Rangkaian string dataIn di-scan huruf demi huruf dengan menggunakan perulangan yang mengontrol indeks string dataIn[i]. 

dataIn[1] = huruf ke satu dari dataIn, dataIn[2] = huruf ke dua dst. Dicek satu per satu menggunakan perulangan.

Isi blok perulangan tersebut adalah perkondisian (IF) untuk mencari identifier data yang dimaksud saat proses scanning. Dalam kasus program di atas, identifier yang dimaksud adalah Y dan X.

if (dataIn[i] == 'Y')

Jika identifier bertemu dengan kondisi, maka indeks array dari variabel uraian yang bersangkutan bertambah (increment), dan variable array[indeks] tersebut siap di isi. Saat kondisi (IF) tidak bertemu lagi dengan identifier maka blok ELSE dijalankan. Blok ELSE akan menampung data uraian berdasarkan nilai di paket data.


TRACING


dataIn = “A100B124C14D15”

dataIn[0] = ‘A’ ; dataIn[1] = ‘1’ ; dataIn[2] = ‘0’ ; dataIn[3] = ‘0’ dst…

perulangan ke-1 , dataIn[0]
if (dataIn[0] == 'A') //bertemu identifier
a++;

Output :
a = 1

perulangan ke-2 , dataIn[1]

else //karena dataIn[1] == ‘1’ (tidak bertemu identifier)
dataA[a] = dataA[a] + dataIn[1];

Output :
dataA[1] = ‘ ‘ + ‘1’    à  dataA[1] = ‘1’   

perulangan ke-3, dataIn[2]

else //karena dataIn[2] == ‘0’ (tidak bertemu identifier)
dataA[a] = dataA[a] + dataIn[2];

Output :
dataA[1] = ‘1’ + ‘0’    à  dataA[1] = ‘10’   

perulangan ke-4, dataIn[3]

else //karena dataIn[3] == ‘0’ (tidak bertemu identifier)
dataA[a] = dataA[a] + dataIn[3];

Output :
dataA[1] = ‘10’ + ‘0’    à  dataA[1] = ‘100’   

Lalu ditampung ke variabel integer lain untuk diolah (tergantung kebutuhan) misal;

Data_Paramter_A = dataA[a] .toInt();

Sebenarnya ada banyak metoda parsing data, tergantung kasusnya bagaimana. Namun di atas adalah salah satu caranya.






Popular posts from this blog

Gas Mulia (Noble gases)

Gas mulia adalah unsur-unsur yang terdapat dalam golongan VIIIA yang memiliki kestabilan yang sangat tinggi dan sebagian ditemukan di alam dalam bentuk monoatomik. Unsur ini adalah unsur non-logam. Unsur-unsur yang terdapat dalam gas mulia yaitu Helium (He), Neon (Ne), Argon(Ar), Kripton(Kr), Xenon (Xe), Radon (Rn).     Gas-gas ini pun sangat sedikit kandungannya di bumi. Dalam udara kering maka akan ditemukan kandungan gas mulia sebagai berikut : Nama Gas Mulia Kadar di Bumi Helium 0,00052 % Neon 0,00182 % Argon 0,934% Kripton 0,00011% Xenon 0,000008% Radon -radioaktif-         Sebenarnya, di alam semesta kandungan Helium paling banyak diantara gas mulia yang lain karena Helium meupakan bahan bakar dari matahari.         Radon amat sedikit jumlahnya di atmosfer atau udara. Dan sekalipun ditemuk...

Komunikasi Data

Halo ! Ada yang baru lagi nih, minggu kemarin ada project membuat aplikasi berbasis visual basic.. Aplikasi itu bisa buat kontrol pergerakan motor stepper, Chatting antar laptop, dan Kontrol LED.. Untuk penjelasan mengenai cara pembuatan bahkan cara kerja program ini, mungkin lain kali saya post.. Tapi seperti biasa, saya punya laporan mingguan dari kegiatan ini... Download Laporan Komunikasi Data   Ini file pembuatan aplikasinya, pastikan ada visual basic 6.0, dan hardware yang required di laporan saya oke... Download File Aplikasi Sekian dulu thank you