Contents
String adalah tipe data yang berisi kumpulan karakter alfanumerik, bisa berupa angka, huruf maupun karakter khusus (*, @, #, dst). Tipe data string umum digunakan dalam berbagai macam Software Development Kit (SDK) semacam Delphi, VB, PHP, Java, dll. Namun bagaimana dengan bahasa pemrograman untuk perangkat embedded system, semisal mikrokontroller yang memiliki keterbatasan memori?
Char vs String
Di sistem Arduino, pada awalnya hanya mendukung ‘tipe sata ‘string’ dalam bentuk ‘kumpulan karakater’ (char array). Contoh
char inistringku[]=”saptaji.com”;
Variabel ‘inistringku’ di atas sebenarnya bukan murni string, tetapi sebenarnya adalah tipe data ‘char’ yang dikumpulan jadi satu (char array).
Pada perkembangannnya (kalo ngga salah sejak versi 1.6.x ke atas), Arduino sudah mendukung String object. Bisa dikatakan bahwa string object inilah yang sama dengan pengertian string di bahasa pemrograman lain. Tapi yang perlu diperhatikan, penggunaan string object ini akan sangat menghabiskan dynamic memory. Jadi buat yang menggunakan Arduino Uno dan sekelasnya harap diperhatikan ya, supaya tidak muncul warning di jendela debug Arduino IDE.
Penggunaan Variabel String di Arduino
Untuk menggunakan variabel string di Arduino caranya cukup mudah. Anda tinggal mendeklarasikan variabel tersebut seperti pada tipe data yang lain. Tapi jangan lupa untuk memakai Arduino IDE versi 1.6.x ke atas ya. Contoh deklarasi variable string:
String s=”ini contoh variabel string’;
Variabel ini juga bisa dideklarasikan sebagai variabel global maupun variabel lokal, sama seperti tipe data yang lain.
Konversi Tipe Data Lain ke Tipe Data String
Untuk mengkonversi tipe data lain ke variabel String caranya cukup mudah, cukup dengan memanggil function ‘String’ diikuti tipe datanya. Berikut ini adalah contoh konversi data integer, float (double) dan char array ke variabel string:
int i=10; float f=1.23; char c[] = “saptaji.com”; String istring = String (i); String fstring = String (f); String cstring = String (c);
Anda bisa menambahkan perintah Serial.println () untuk menampilkan masing-masing variabel ke jendela debug Serial Monitor.
Konversi Tipe Data String ke Tipe Data Lain
Sedangkan untuk mengkonversi dari tipe data string ke tipe data lain, caranya cukup berbeda. Anda harus memanggil function yang berbeda-beda sesuai tujuan konversi data Anda. Contoh
– mengubah variabel string ke variabel integer
Untuk mengubah variabel string ke integer Anda dapat menggunakan function string.toInt(). Contoh:
String istring = “123” int I = istring.toInt();
– mengubah variabel string ke variabel float/double
Untuk mengubah variabel string ke float atau doube Anda dapat menggunakan function string.toFloat(). Contoh:
String long_GPS = “103.8975530”; double longf = long_GPS.toFloat();
– mengubah variabel string ke variabel char array
Untuk mengubah variabel string ke char array Anda dapat menggunakan function string.toCharArray. Contoh:
char charbuf[15]; String s = “saptaji.com” s.toCharArray(charbuf,15);
Dengan memanggil toCharArray() seperti pada contoh di atas, maka string ‘saptaji.com’ akan di-copy-kan ke variabel char array ‘charbuf’. Yang perlu diperhatikan adalah ukuran (size of) dari variabel char array-nya ya (contoh di atas angka ‘15’). Jangan sampai lebih kecil dari variabel string-nya
Operasi variabel String
String object menawarkan kemudahan dalam mengoperasikan variabel-variabel yang termaktub di dalamnya. Berikut ini adaah beberapa contohnya:
– menggabungkan variabel string
Salah satu favorit saya dalam mengoperasikan variabel string adalah menggunakan operator ‘+’ untuk menggabungkan (concatenate) dua (atau lebih) variabel String. Contoh:
String s1 = "saptaji"; String s2 = ".com"; String s = s1+s2;
dengan script di atas, maka variabel s akan berisi ‘saptaji.com’
– mencari fix substring di dalam variabel string
Untuk mencari substring tertentu di dalam variabel string, Anda dapat menggunakan function ‘indexOf’. Function ini sebenarnya digunakan untuk mencari index dari substring tersebut. Jika substring ditemukan, function indexOf akan mengembalikan nilai di atas angka 0 (yang menunjukkan index substring), tapi jika tidak ditemukan akan menghasilkan nilai ‘0’. Contoh:
String s = “ini adalah contoh variabel string”; If (s.indexOf (“contoh”) > -1) { //substring ‘contoh’ ditemukan } else { // substring ‘contoh’ tidak ditemukan }
Function indexOf juga dapat diset offset-nya (offset = titik mulai pencarian). Pada contoh di atas, offset pencarian tidak ditulis yang menandakan offset = 0 yang artinya pencarian dimulai dari awal string. Jika ingin pencarian dimulai dari index ke x (tidak dari awal string), maka Anda harus menulis script dengan sintaks:
s.indexOf (“contoh”, 10);
Kegunaan menggunakan offset adaah ketika Anda mencari index substring yang sama yang jumlahnya lebih dari satu pada variabel string.
– mencari substring di dalam variabel string berdasarkan index
Kalau pada contoh sebelumnya, Anda ingin mencari substring yang sudah fix, ada atau tidak dalam variabel string, contoh berikut lain penggunaannya. Contoh case-nya adalah sebagai berikut :
Ketika ada SMS masuk ke GSM modul, ada string yang diterima Arduino sebagai berikut:
+CMT: “+6281910026910″,””,”16/11/02,05:54:25+28″
Dari string di atas, Anda ingin mengambi nomor handphone pengirimnya saja, yakni +6281910026910. Nah, jika ada kasus seperti ini, Anda dapat menggunakan function substring sbb:
String s= +CMT: "+6281910026910","","16/11/02,05:54:25+28"; int ix1=s.indexOf("\"+"); int ix2=s.indexOf("\","); pengirim=s.substring(ix1+1,ix2); Serial.print ("pengirimnya: "); Serial.println (pengirim);
Demikian sedikit pengetahuan tentang string object yang saya sarikan dari berbagai macam sumber dan dari pengalaman pribadi. Mungkin ada banyak function yang berkenaan dengan tipe data string yang belum ada di tutorial di atas, karena function-function di atas adalah function yang sering saya gunakan untuk mengoperasikan variabel string di Arduino. Sekali lagi jangan lupa untuk seminimal mungkin menggunakan variabel string karena akan banyak sekali menghabiskan dynamic memory (SRAM), kecuali Anda menggunakan Arduino Mega. Selamat berkarya dan semoga dapat bermanfaat buat yang membutuhkan.
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Mas,sy mau tanya,untuk merubah data string dari arduino jadi integer di delphi,di delphi nya kah atau di arduinonya mas? Mana yang lebih mudah mas? Karna sy lagi coba buat counter barang,Tolong kasih pencerahannya mas..matur nuhun mas aji.
lebih mudah di delphinya mas
Mas kalo mau buat string di android untuk memanggil string di arduino gimna ya??
koneksinya pake apa dulu ini mas? bluetooth atau wifi atau kabel?
Mas permisi mau tanya kalo mau kirim data array dari delphi ke arduino gimana ya? Begitu juga sebaliknya. Terima kasih sebelumnya
data array diubah dulu ke string –> sisi delphi
data string (atau char stream) diubah ke data array –> sisi arduino
Mas kalau mau ngambil data dari sensor trus dikirim via email dengan koneksi wifi gmn ya Mas?
pake SMTP mas
bang lok misalkan saya punya data dari sensor yang lebih dari 0 terus saya ubah menjadi nilai 1. dan di jumlahkan hasilnya dalam permenit. maksud saya saya mau menghitung berapa kali sensor itu terbaca dalam 1 menit. giaman ya?
tinggal bikin counter dalam timer mas. Counter ini untuk menghitung berapa kali sensor terbaca. Wujudnya berua variabel integer aja dan cukup dijumlahkan tiap sensor terbaca. Contoh mudahnya gini
int i; //variabel ‘i; sebagai counter
if (sensor==terbaca){
//sub rutin
i++;
}
untuk pengambilan data counter dilakukan jika timer sudah menunjukkan 1 menit (misalnya). Tp yang perlu diperhatikan timer di sini harus sifatnya yg ‘thread’, jadi tidak mengganggu proses lainnya di arduino. Salah satu library timer yg support ‘thread’ di arduino adalah SimpleTimer.h.
Silahkan dicoba, semoga membantu
mas kalo misalnya saya punya string dengan code=1234321
saya pengen jika stringnya berupa code=xxxxx, saya bisa dapet nilai xxxxnya jika itu code= , bagaimana ya ? thanks
pake kombinasi function indexOf() sama subString() mas
mas klo mau merubah string to char array dua dimensi bagaimana yaa?
contohnya gmna mas? maksud sy string-nya kayak gimana mau dijadikan seperti apa?
contoh data stringnya “33 3b 3a 3c” dan “3d 34 35 3e” jadikan char array 2 dimensi mas ? saya ingin menggabungan banyak input data string ke var char array mas.
kalo case-nya kayak gitu, prosesnya agak panjang mas.
yg pertama: parsing data yg masuk sesuai format data, sehingga diperoleh data1=33, data2=3b dst
langkah kedua : convert tiap data ke char array
langkah ketiga : copy data ke matrix char array dua dimensi sesuai format dan ‘koordinat’ yang diinginkan
Slmt malem mas…mau tanya mas aji…kalo sy read data dr timbNgan dgital gmn ya mas??misalnya data dr timbangan dgital “wn-0002.89kg” dan itu kontinyu datanya dan yg mau saya ambil adalah data -2.89kg…bagaimana caranya mas…tq
kalo data “wn-0002.89kg” udah bisa diterima arduino mas? kalo udah bisa mah mudah aja buat ambil data yang diinginka. Caranya gini:
1. Copy data yang diterima ke variabel String (untuk mudahnya pake String, kalo udah advance bisa pake Char array untuk hemat SRAM)
2. Cari indeks karakter yang akan diambil pake function ‘indexOf’
3. Copy karakter yang akan diambil pake function ‘subString’
Bisa kasi cntoh sketchnya mas??
selama ini sy pake serial.parsefloat..hasilnya lgsg kebaca -2.89..sdh ok utk ketelitian 10 gram dgn 2 angka dbelakang koma….rencana utk tmbngan 1gram 0.000 atau 3 angka dbelakang koma sy masi blm paham, makanya mau pake cara split diatas mas
kalo pake parseFloat udah bisa ya pake itu aja mas, ntar kan kalo angka yang dikirim 3 angka dibelakang koma tetap aja akan ketangkap
Eh iya mas aji…udh ok…tq bgt mas…owh iya mas..kalo nyimpen di eeprom data misal 0.222 (3 angka belakang koma gmn mas??udh sy simpen tp yg keluar wkt di panggil cmn 2 angka belakang koma..
pake EEPROM.put() untuk menyimpan, EEPROM.get() buat ambil datanya
Maaf Pak, jika saya ingin mngirim perintah seperti “i=1” untuk menghidupkan lampu. bagaimana Pak? Karena, sejauh ini. saya hanya bisa mengirimkan hruf atau angka saja. Terima Kasih
ini maksudnya pake serial ya kirim datanya? tinggal kirim data, ntar receivernya pake Serial.readString() atau bisa juga pake Serial.parseChar()
Nice post. Keep update yaa
klw misal gini :
Float i = 122.465839234;
char a;
saya mw ambil nilai i masukkan ke char a,
supaya yang terambil full 122.46583923, gimana yah?
ga bisa mas, variabel char hanya menyimpan satu karakter. Untuk mudahnya saya sarankan pake object string. Contoh:
String a=String(i);
Tp penggunaan object string akan memakan memori yang cukup banyak, sebagai alternatifnya bisa digunakan ‘sprintf’. Jk memori Anda msh byk gunakan object String tp kalo tinggal dikit sy sarankan gunakanlah sprintf. Untuk sintaksnya googling sendiri yach 🙂
String a = String(i);
nilai yg di ambil cuman 122.47
klw misal mw ambil full nilai di blakang koma, kyak gmn yah?
coba String a=String (i,4); //4 angka di belakang koma
Kalo ngga bisa, coba googling sendiri ya 🙂 , intinya sih bisa, cuma agak lupa sintaksnya
bang seumpama saya ada 2 sensor yang satu analog sama digital itu kan gunakan via wifi lalu masing” sensor menggunakan float cara agar bisa meenyendirikan hasil agar tidak tercampur nilainya gimana ya ?
saya udah coba gunakan float temp1 dan float temp2 nilainya kenpa jadi satu minta saran gan ?
2 sensor dikirim bersamaan sebagai satu string tapi dikasih karakter pemisah, misalnya : sensor1#sensor2 (karakter ‘#’ sbg karakter pemisah antar sensor). Kemudian sisi receivernya, data string tersebut diurai kembali berdasarkan karakter pemisah
catatan : untuk mempermudah encoding dan decoding data, bisa menggunakan JSON (utk advanced user only)
mas mau tanya kalau ngirim string dari php ke arduino gimana ya mas?
tanpa menggunakan modul ethernet, saya menggungganakan raspberry.
koneksi dr arduino ke raspberry pake apa mas?
saya juga ada pertanyaan yang sama mas. kalo saya arduino kke raspberrynya pake modul nrf24l01
pada dasarnya untuk komunikasi antar perangkat harus memenuhi syarat minimal 2 layer. Layer yang pertama adalah physical layer. Layer paling bawah ini masih bertumpu pada parameter electrical, bisa pake kabel (wired) atau nirkabel (wireless). Nanti kalo bicara wireless, lebih panjang lagi bahasannya, bisa pake frekuensi radio, RF, WIFI (2.4 GHz), GSM (900/1800 MHz), dst. Layer yang kedua adalah data protokol. Katakanlah mas, pilih layer pertama menggunakan wireless dg device nrf24l01, maka yang berikutnya anda harus menentukan protokol apa yang akan dipakai supaya kedua perangkat yang berkomunikasi bisa saling mengerti data yang dipertukarkan. Anda bisa menggunakan protokol yang sudah standar (serial,… Read more »
Untk protokol yang saya gunakan pada Arduno dan raspberry sama2 menggunakan SPI mas. Sya ada kendala ketika data yang dikirimkan dari arduino ke raspberry. Ketika saya jalankan lewat terminal raspberry selalu bertuliskan “Substring Not Found”.
Kalau sebaliknya, mau rubah char ke integer gimana ya mas?
mudahnya gini mas: variabel char – ‘0’
contoh:
char x=’4′;
int y = x – ‘0’;
int z=y+5;
Serial.println(z);
–> maka akan tertampil d serial monitor angka 9
baik mas, sekaian kalau mau merubah char yang #$%^&*..dst ke bilangan desimal gimana mas?
ga bisa mas, kan karakter tsb bukan bilangan
mas saya sudah ngoding di arduino IDE kendali 6 relay via sms , di coding itu pke header ‘Pstring’ dan cukup lumayan banyak juga codingan nya waktu di upload muncul tulisan “low memory available , stability problems may occur” memori sudah terpakai 80% dibantu mas gimana caranya warning itu gak muncul lgi karena ada bebrp fungsi tidak jalan saat dicoba
kalo sampai muncul ‘low memory’ itu karena SRAM nya tidak mencukupi saat runtime. Saran saya kurangi variabel yang sifatnya global, ganti dengan variabel lokal (udah tau bedanya kan?). Yg kedua kedua, coba cek ada library2 yang ga kepake ga? kalo ada, dihilangkan aja. Yg ketiga, sejauh mungkin hindari penggunaan variabel string atau string object, karena akan menghabiskan banyak memori. Sebagai gantinya gunakan variabel char atau char array. Yg keempat mungkin ga perlu pakai library ‘PString’ (cukup pake point 3 sblmnya). Misalkan library pstring ini dihilangkan sy yakin akan mengurangi penggunaan memori secara signfikan. Yg terakhir, jika keempat opsi diatas dirasa… Read more »
Waduh saya belum ngerti mas ubah varibel global ke lokal, dan bingung jg kalo rombak hbs coding yg dibagian void loop nya , ya udah ganti ke mega aja solusinya .. Makasih ya mas pelajarannya ..
hmm, sudah saya duga :), tapi ya sah2 aja. Sy jg seringnya gitu 🙂
Assalamu’alaikum, Bang. Saya mau bertanya, pertama-tama kasusnya gini : Saya mengirim data keypad dari arduino ke micon yg lain (texas instruments) dengan harapan micon tersebut mengirim kembali data ke arduino dalam bentuk sinyal lain kemudian akan ditampilkan di LCD. Nah, gmn langkah2 programming nya, Bang? Soalnya sya sdh coba, tpi data dr arduino langsung tampil di lcd tanpa melalui micon yg satunya dlu. Itu, kendalanya apa ya, Bang? Maaf sblmnya mrptkan. Jika ada teman2 lain yg bsa, tolong bantu jawab, yah. Wassalam.
waalaikumsalam wr wb. mungkin belum diprogram utk kirim data ke mikrokontroller lain, dan mikrokontroller blm diprogram untuk menerima data dari mikrokontroller pengirim
Asalamu’alaikum. Pak, gmana kalau kita mau nyimpen data keypad yg sdh diketik, trus data tersebut baru terkirim (tampil d SM dan LCD) setelah di enter. Sy sdh coba, tp yg tmpil malah angka 0. Katanya harus diconvert ke String dlu, sy juga sdh coba, tp masih 0 yg tampil. Ini mungkin murni kesalahan program yg saya buat. Nah, intinya Pak, gmn cara menampilkan data tersebut sesuai dengan data yg sya input (ketik) pd keypad.
waalaikumsalam wr wb. SM itu apa mas?
Serial Monitor di arduino, Pak
data yg disimpan ke eeprom harus berupa string, bisa pake library di atas atau pake library bawaan eeprom arduino juga bisa pake EEPROM.put (address,data_string). Kemudian utk ambil datanya pake EEPROM.get (address,data_string_ygdiambil). Variabel ‘data_string_ygdiambil’ baru ditampilkan di SM dan Lcd
Mantapa
Mas string to float tuh maksudnya gimana?
misal ada string s1=”1″ dan s2=”0.25″. Kalo diperasikan s1+s2 hasilnya akan mejadi “10.25”, tapi kalo variabel float, misal f1=1, f2=0.25, jika dioperasikan f1+f2 hasilnya akan menjadi 1.25. Nah string to float itu mengubah variabel string menjadi variabel float agar dapat dioperasikan sesuai kebutuhan
Mas Adjie, gimana caranya meng copy satu txt file dari sd card module ke usb module ch376s pakai arduino mega 2560.
usb module nya nancep kemana mas?
sd cardnya ke SPI dan USB Module nya ke HardwareSerial. dua duanya nancep di mega 2560. Terima kasih sebelumnya.