Kamis, 26 Februari 2015

Arduino Komunikasi serial dan pemisahan terhadap separator perintah

Berikut adalah penggunaan Arduino dengan komunikasi serial. Yang mana perintah dikirim dari pc melalui komunikasi serial. Perintah yang dikirim oleh pc memiliki format "data_1""separator""data_2". Disini separator yang digunakan adalah tanda "+". Misalnya pc mengirimkan perintah "12+3" maka Arduino harus memisahkan perintah tersebut menjadi data_1 dan data_2. Pada percobaan kali ini data_1 dan data_2 kemudian dijumlahkan.

Berikut adalah sourcecode yang digunakan: 


/*
Author: Muhammad Nurul Puji
muhammadpuji.its@gmail.com
16 Feb 2015
*/

char buff_char;
String buff_string = "";
float data_1, data_2, total;
String buff_data_1, buff_data_2;

void setup()
{
  Serial.begin(57600);
  delay(100);
  Serial.println("Welcome Muhammad Nurul Puji");
  Serial.println("");
  delay(1000);
}

void loop()
{
 

while(Serial.available()) {  //blok untuk menerima perintah serial    
    buff_char = Serial.read();
    buff_string.concat(buff_char);
    delay(1);  //delay ini sangat penting
  } 
 
 
  if(buff_string != ""){
    buff_data_1=(splitValue(buff_string, '+', 0));  //memisahkan string data dengan string separator "+"
    buff_data_2=(splitValue(buff_string, '+', 1));
   
    //char buff[buff_data_1.length()];               //mengubah string ke float
    //buff_data_1.toCharArray(buff,buff_data_1.length()+1);
    //data_1=atof(buff);

    data_1=buff_data_1.toInt();   //cara singkat mengubah string ke number
   
    //buff[buff_data_2.length()];                    //mengubah string ke float
    //buff_data_2.toCharArray(buff,buff_data_2.length()+1);
    //data_2=atof(buff); 

    data_2=buff_data_2.toInt();   //cara singkat mengubah string ke number   
    

    total = data_1 + data_2;
   
    Serial.print("Perintah awal adalah ");
    Serial.print(buff_string);  //bukan println karena perintah dikirim setelah ditekan enter
    Serial.print("Data 1 = ");
    Serial.println(data_1);
    Serial.print("Data 2 = ");
    Serial.println(data_2);
    Serial.print("Total data adalah ");
    Serial.println(total);
    Serial.println("");
   
    buff_string="";
  }
}

//Function untuk memisahkan data dengan separator

String splitValue(String data, char separator, int index){
  int found = 0;
  int strIndex[]={0, -1};
  int maxIndex = data.length()-1;
  for(int i=0; i<=maxIndex && found<=index; i++){
    if(data.charAt(i) == separator || i==maxIndex){
      found++;
      strIndex[0] = strIndex[1]+1;
      strIndex[1] = (i == maxIndex) ? i+1 : i;
    }
  }
  return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}



Referensi: dari postingan - postingan sebelumnya...........
--
Semoga bermanfaat

Tidak ada komentar:

Posting Komentar

Selamat berinovasi :D Salam berbagi..

Cara mengetahui ip address raspberry atau perangkat lain yg terhubung pada wifi yg sama

1. Install nmap [jika belum ada]: sudo apt install nmap 2. Cek ip address komputer (yg akses ke wifi yang sama): ip addr misal hasilnya 192....