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 ditemukan akan cepat berubah menjadi unsur lain, karena radon bersifat radio aktif. Dan kar

Unsur Periode Ketiga

Dari namanya juga sudah kita ketahui sebagai unsur periode ketiga , berarti unsur-unsur ini di  antaranya adalah : Natrium(Na),magnesium(Mg), aluminium(Al), silikon(Si), fosfor(P), sulfur(S), klorin(Cl) dan argon(Ar). Unsur tersebut terletak dalam golongan yang berlainan, berikut tabel mengenai letak unsur periode 3: Na Mg Al Si P S Cl Ar IA,IIA,IIIA (Logam) IVA (Metaloid) VA,VIA,VIIA (Non-metal) VIIIA (gas mulia) Sifat dan Ciri Unsur Periode ketiga    Unsur-unsur yang ada di dalam periode ketiga terdiri dari unsur logam (Na, Mg, Al), metaloid (Si), nonlogam (P, S, Cl), dan gas mulia (Ar). Dari tabel dapat dilihat bahwa keelektronegatifan unsur-unsur periode ketiga semakin ke kanan semakin besar diakibatkan oleh jari-jari atomnya yang semakin ke kanan semakin mengecil. Kekuatan ikatan antar atom dalam logam meningkat (dari Na ke Al). Hal ini berkaitan dengan pertambahan electron valensinya. Dalam peri

Logam Alkali

Ah.. gaada kerjaan. Gatau mau nge-post apa. Mending nge-post hasil kerjaan tugas kimia aja kali, ya ? okedeh, daripada mikirin ulangan fisika tadi yang zonk. Langsung aja deh. Unsur logam alkali (IA) terdiri dari litium, natrium, kalium, rubidium, sesium, dan fransium (zatradioaktif). Unsur-unsur ini berada di golongan pertama atau IA. Unsur ini mempunyai energi ionisasi paling kecil karena mempunyai konfigurasi elektron ns1. Oleh karena itu, unsur logam alkali mudah melepaskan elektron dan merupakan reduktor yang paling kuat. Semuanya merupakan unsur logam yang lunak (mudah diiris dengan pisau). Pada saat logam dibersihkan, terlihat warna logam putih mengkilap (seperti perak). Disebut logam alkali karena oksidanya mudah larut dalam air dan menghasilkan larutan yang bersifat basa (alkalis). Semua logam alkali sangat reaktif sehingga di alam tidak pernah diperoleh dalamkeadaan bebas. Di alam terdapat dalam bentuk senyawa. Sifat-Sifat Logam Alkali Sifat Fisis Sifat u