Arduino - Senar
String digunakan untuk menyimpan teks. Mereka dapat digunakan untuk menampilkan teks pada LCD atau di jendela Arduino IDE Serial Monitor. String juga berguna untuk menyimpan input pengguna. Misalnya, karakter yang diketik pengguna di keypad terhubung ke Arduino.
Ada dua jenis string dalam pemrograman Arduino -
- Array karakter, yang sama dengan string yang digunakan dalam pemrograman C.
- Arduino String, yang memungkinkan kita menggunakan objek string dalam sketsa.
Pada bab ini, kita akan mempelajari String, objek, dan penggunaan string dalam sketsa Arduino. Di akhir bab, Anda akan mempelajari jenis string yang digunakan dalam sketsa.
Array Karakter String
Jenis string pertama yang akan kita pelajari adalah string yang merupakan rangkaian karakter dari tipe tersebut char. Pada bab sebelumnya, kita telah mempelajari apa itu array; serangkaian variabel yang sama yang disimpan dalam memori. String adalah larik variabel karakter.
String adalah larik khusus yang memiliki satu elemen tambahan di akhir string, yang selalu bernilai 0 (nol). Ini dikenal sebagai "string diakhiri null".
Contoh String Karakter Array
Contoh ini akan menunjukkan cara membuat string dan mencetaknya ke jendela monitor serial.
Example
void setup() {
char my_str[6]; // an array big enough for a 5 character string
Serial.begin(9600);
my_str[0] = 'H'; // the string consists of 5 characters
my_str[1] = 'e';
my_str[2] = 'l';
my_str[3] = 'l';
my_str[4] = 'o';
my_str[5] = 0; // 6th array element is a null terminator
Serial.println(my_str);
}
void loop() {
}
Contoh berikut menunjukkan dari apa sebuah string terdiri dari; array karakter dengan karakter yang dapat dicetak dan 0 sebagai elemen terakhir dari array untuk menunjukkan bahwa di sinilah string berakhir. String dapat dicetak ke jendela Arduino IDE Serial Monitor dengan menggunakanSerial.println() dan melewatkan nama string.
Contoh yang sama ini dapat ditulis dengan cara yang lebih nyaman seperti yang ditunjukkan di bawah ini -
Example
void setup() {
char my_str[] = "Hello";
Serial.begin(9600);
Serial.println(my_str);
}
void loop() {
}
Dalam sketsa ini, kompilator menghitung ukuran larik string dan juga secara otomatis null mengakhiri string dengan nol. Sebuah array yang terdiri dari enam elemen dan terdiri dari lima karakter diikuti dengan nol dibuat persis sama seperti pada sketsa sebelumnya.
Memanipulasi Array String
Kita dapat mengubah array string dalam sketsa seperti yang ditunjukkan pada sketsa berikut.
Contoh
void setup() {
char like[] = "I like coffee and cake"; // create a string
Serial.begin(9600);
// (1) print the string
Serial.println(like);
// (2) delete part of the string
like[13] = 0;
Serial.println(like);
// (3) substitute a word into the string
like[13] = ' '; // replace the null terminator with a space
like[18] = 't'; // insert the new word
like[19] = 'e';
like[20] = 'a';
like[21] = 0; // terminate the string
Serial.println(like);
}
void loop() {
}
Hasil
I like coffee and cake
I like coffee
I like coffee and tea
Sketsa tersebut bekerja dengan cara berikut.
Membuat dan Mencetak String
Dalam sketsa yang diberikan di atas, string baru dibuat dan kemudian dicetak untuk ditampilkan di jendela Serial Monitor.
Mempersingkat String
String ini dipersingkat dengan mengganti karakter ke-14 dalam string dengan nol yang mengakhiri nol (2). Ini adalah elemen nomor 13 dalam larik string yang dihitung dari 0.
Ketika string dicetak, semua karakter dicetak hingga nol baru yang mengakhiri nol. Karakter lainnya tidak hilang; mereka masih ada di memori dan larik string masih berukuran sama. Satu-satunya perbedaan adalah bahwa setiap fungsi yang bekerja dengan string hanya akan melihat string hingga terminator nol pertama.
Mengubah Kata dalam String
Akhirnya, sketsa tersebut mengganti kata "kue" dengan "teh" (3). Pertama-tama harus mengganti terminator null di like [13] dengan spasi sehingga string dikembalikan ke format yang dibuat semula.
Karakter baru menimpa "cak" dari kata "kue" dengan kata "teh". Ini dilakukan dengan menimpa karakter individu. 'E' dari "cake" diganti dengan karakter penghentian null baru. Hasilnya adalah bahwa string sebenarnya diakhiri dengan dua karakter null, yang asli di akhir string dan yang baru menggantikan 'e' di "cake". Ini tidak membuat perbedaan ketika string baru dicetak karena fungsi yang mencetak string berhenti mencetak karakter string ketika bertemu dengan terminator null pertama.
Fungsi untuk Memanipulasi Array String
Sketsa sebelumnya memanipulasi string secara manual dengan mengakses karakter individu dalam string. Untuk mempermudah memanipulasi larik string, Anda dapat menulis fungsi Anda sendiri untuk melakukannya, atau menggunakan beberapa fungsi string dariC perpustakaan bahasa.
S.No. | Fungsi & Deskripsi |
---|---|
1 | String() Kelas String, bagian dari inti pada versi 0019, memungkinkan Anda untuk menggunakan dan memanipulasi string teks dengan cara yang lebih kompleks daripada yang dilakukan array karakter. Anda dapat menggabungkan String, menambahkannya, mencari dan mengganti substring, dan banyak lagi. Dibutuhkan lebih banyak memori daripada larik karakter sederhana, tetapi juga lebih berguna. Sebagai referensi, array karakter disebut sebagai string dengan 's' kecil, dan instance kelas String disebut sebagai String dengan huruf kapital S. Perhatikan bahwa string konstan, yang ditentukan dalam "tanda kutip ganda" diperlakukan sebagai array karakter, bukan contoh dari kelas String |
2 | charAt() Akses karakter tertentu dari String. |
3 | compareTo() Membandingkan dua String, menguji apakah yang satu muncul sebelum atau sesudah yang lain, atau apakah keduanya sama. String tersebut dibandingkan karakter demi karakter, menggunakan nilai ASCII dari karakter tersebut. Artinya, misalnya, 'a' muncul sebelum 'b' tetapi setelah 'A'. Angka datang sebelum huruf. |
4 | concat() Menambahkan parameter ke String. |
5 | c_str() Mengonversi konten string sebagai gaya-C, string diakhiri null. Perhatikan bahwa ini memberikan akses langsung ke buffer String internal dan harus digunakan dengan hati-hati. Secara khusus, Anda tidak boleh mengubah string melalui pointer yang dikembalikan. Saat Anda memodifikasi objek String, atau saat dihancurkan, pointer apa pun yang sebelumnya dikembalikan oleh c_str () menjadi tidak valid dan tidak boleh digunakan lagi. |
6 | endsWith() Menguji apakah sebuah String diakhiri dengan karakter dari String lain. |
7 | equals() Membandingkan dua string untuk persamaan. Perbandingannya peka huruf besar / kecil, artinya String "hello" tidak sama dengan String "HELLO". |
8 | equalsIgnoreCase() Membandingkan dua string untuk persamaan. Perbandingannya tidak case-sensitive, artinya String ("hello") sama dengan String ("HELLO"). |
9 | getBytes() Menyalin karakter string ke buffer yang disediakan. |
10 | indexOf() Menemukan karakter atau String dalam String lain. Secara default, ini mencari dari awal String, tetapi juga bisa mulai dari indeks tertentu, memungkinkan untuk menemukan semua contoh karakter atau String. |
11 | lastIndexOf() Menemukan karakter atau String dalam String lain. Secara default, ini mencari dari akhir String, tetapi juga dapat bekerja mundur dari indeks tertentu, memungkinkan untuk menemukan semua contoh karakter atau String. |
12 | length() Mengembalikan panjang String, dalam karakter. (Perhatikan bahwa ini tidak termasuk karakter nol di belakangnya.) |
13 | remove() Modifikasi di tempat, string yang menghapus karakter dari indeks yang disediakan ke akhir string atau dari indeks yang disediakan ke indeks plus hitungan. |
14 | replace() Fungsi String replace () memungkinkan Anda untuk mengganti semua instance dari karakter tertentu dengan karakter lain. Anda juga dapat menggunakan replace untuk mengganti substring dari string dengan substring yang berbeda. |
15 | reserve() Fungsi String reserve () memungkinkan Anda mengalokasikan buffer dalam memori untuk memanipulasi string. |
16 | setCharAt() Menetapkan karakter String. Tidak berpengaruh pada indeks di luar panjang String yang ada. |
17 | startsWith() Menguji apakah suatu String dimulai dengan karakter dari String lain. |
18 | toCharArray() Menyalin karakter string ke buffer yang disediakan. |
19 | substring() Dapatkan substring dari sebuah String. Indeks awal bersifat inklusif (karakter terkait disertakan dalam substring), tetapi indeks akhir opsional bersifat eksklusif (karakter terkait tidak disertakan dalam substring). Jika indeks akhir dihilangkan, substring berlanjut ke akhir String. |
20 | toInt() Mengonversi String yang valid menjadi integer. String masukan harus dimulai dengan bilangan bulat. Jika string berisi angka non-integer, fungsi tersebut akan berhenti melakukan konversi. |
21 | toFloat() Mengonversi String yang valid menjadi float. String input harus dimulai dengan digit. Jika string berisi karakter non-digit, fungsi tersebut akan berhenti melakukan konversi. Misalnya, string "123.45", "123", dan "123fish" masing-masing dikonversi menjadi 123.45, 123.00, dan 123.00. Perhatikan bahwa "123.456" didekati dengan 123.46. Perhatikan juga bahwa float hanya memiliki presisi 6-7 digit desimal dan string yang lebih panjang mungkin terpotong. |
22 | toLowerCase() Dapatkan String versi huruf kecil. Mulai 1.0, toLowerCase () memodifikasi string pada tempatnya daripada mengembalikan yang baru. |
23 | toUpperCase() Dapatkan versi huruf besar dari sebuah String. Mulai 1.0, toUpperCase () memodifikasi string pada tempatnya daripada mengembalikan yang baru. |
24 | trim() Dapatkan versi String dengan menghapus spasi di depan dan di belakangnya. Mulai 1.0, trim () memodifikasi string pada tempatnya daripada mengembalikan yang baru. |
Sketsa selanjutnya menggunakan beberapa fungsi string C.
Contoh
void setup() {
char str[] = "This is my string"; // create a string
char out_str[40]; // output from string functions placed here
int num; // general purpose integer
Serial.begin(9600);
// (1) print the string
Serial.println(str);
// (2) get the length of the string (excludes null terminator)
num = strlen(str);
Serial.print("String length is: ");
Serial.println(num);
// (3) get the length of the array (includes null terminator)
num = sizeof(str); // sizeof() is not a C string function
Serial.print("Size of the array: ");
Serial.println(num);
// (4) copy a string
strcpy(out_str, str);
Serial.println(out_str);
// (5) add a string to the end of a string (append)
strcat(out_str, " sketch.");
Serial.println(out_str);
num = strlen(out_str);
Serial.print("String length is: ");
Serial.println(num);
num = sizeof(out_str);
Serial.print("Size of the array out_str[]: ");
Serial.println(num);
}
void loop() {
}
Hasil
This is my string
String length is: 17
Size of the array: 18
This is my string
This is my string sketch.
String length is: 25
Size of the array out_str[]: 40
Sketsa tersebut bekerja dengan cara berikut.
Cetak String
String yang baru dibuat dicetak ke jendela Serial Monitor seperti yang dilakukan pada sketsa sebelumnya.
Dapatkan Panjang String
Fungsi strlen () digunakan untuk mendapatkan panjang string. Panjang string hanya untuk karakter yang dapat dicetak dan tidak termasuk terminator nol.
String tersebut berisi 17 karakter, jadi kami melihat 17 karakter tercetak di jendela Serial Monitor.
Dapatkan Panjang Array
Operator sizeof () digunakan untuk mendapatkan panjang array yang berisi string. Panjangnya termasuk terminator nol, jadi panjangnya lebih dari satu panjang string.
sizeof () terlihat seperti fungsi, tetapi secara teknis adalah operator. Ini bukan bagian dari pustaka string C, tetapi digunakan dalam sketsa untuk menunjukkan perbedaan antara ukuran array dan ukuran string (atau panjang string).
Salin String
Fungsi strcpy () digunakan untuk menyalin string str [] ke array out_num []. Fungsi strcpy () menyalin string kedua yang diteruskan ke string pertama. Salinan string sekarang ada di larik out_num [], tetapi hanya membutuhkan 18 elemen larik, jadi kita masih memiliki 22 elemen karakter bebas dalam larik. Elemen bebas ini ditemukan setelah string di memori.
String tersebut disalin ke array sehingga kita akan memiliki beberapa ruang ekstra dalam array untuk digunakan di bagian selanjutnya dari sketsa, yang menambahkan string ke akhir string.
Menambahkan String ke String (Concatenate)
Sketsa tersebut menggabungkan satu string ke string lainnya, yang dikenal sebagai penggabungan. Ini dilakukan dengan menggunakan fungsi strcat (). Fungsi strcat () menempatkan string kedua yang diteruskan ke ujung string pertama yang diteruskan ke sana.
Setelah penggabungan, panjang string dicetak untuk menunjukkan panjang string baru. Panjang array kemudian dicetak untuk menunjukkan bahwa kita memiliki string sepanjang 25 karakter dalam array panjang 40 elemen.
Ingatlah bahwa string panjang 25 karakter sebenarnya mengambil 26 karakter dari array karena nol mengakhiri nol.
Array Bounds
Saat bekerja dengan string dan array, sangat penting untuk bekerja dalam batasan string atau array. Dalam sketsa contoh, sebuah array dibuat, yang panjangnya 40 karakter, untuk mengalokasikan memori yang dapat digunakan untuk memanipulasi string.
Jika larik dibuat terlalu kecil dan kami mencoba menyalin string yang lebih besar dari larik ke dalamnya, string tersebut akan disalin di akhir larik. Memori di luar akhir larik dapat berisi data penting lainnya yang digunakan dalam sketsa, yang kemudian akan ditimpa oleh string kita. Jika memori di luar ujung string dibanjiri, itu bisa merusak sketsa atau menyebabkan perilaku yang tidak terduga.