Так как строки, хранящиеся в массивах символов, часто оказываются короче самих массивов, в библиотеке предусмотрена удобная функция с именем strlen. Эта функция подсчитывает число символов в массиве, предшествующих нулевому символу, отмечающему конец строки.
Функция принимает массив символов в своем единственном параметре и возвращает размер строки (исключая пустой символ), хранящейся в нем, например, команда
strlen("abc");
вернет число 3.
Библиотека Arduino String Object
В Arduino IDE, начиная с версии 019, вышедшей несколько лет тому назад, включается библиотека String, более понятная и дружественная разработчикам, использующим Java, Ruby, Python и другие языки, где конкатенацию строк допускается выполнять простым оператором +. Эта библиотека также предлагает массу вспомогательных функций для работы со строками.
Конечно, данная библиотека добавляет к скетчу несколько килобайт кода. Кроме того, она использует механизм динамического распределения памяти со всеми сопутствующими проблемами, такими как исчерпание памяти. Поэтому подумайте хорошенько, прежде чем принять решение о ее использовании. Многие пользователи Arduino предпочитают применять обычные массивы символов.
Эта библиотека удивительно проста в использовании, и, если вам приходилось работать со строками в Java, благодаря библиотеке Arduino String Object вы будете чувствовать себя как дома.
Создание строк
Создать строку можно из массива элементов типа char, а также из значения типа int или float, как показано в следующем примере:
String message = "Temp: ";
String temp = String(123);
Конкатенация строк
Строки типа String можно объединять друг с другом и с данными других типов с помощью оператора +. Попробуйте добавить следующий код в функцию setup пустого скетча:
Serial.begin(9600);
String message = "Temp: ";
String temp = String(123);
Serial.println(message + temp + " C");
Обратите внимание на то, что последнее значение, добавляемое в строку, в действительности является массивом символов. Если первый элемент в последовательности значений между операторами + является строкой, остальные элементы автоматически будут преобразованы в строки перед объединением.
Другие строковые функции
В табл. 6.1 перечислены еще несколько удобных функций из библиотеки String. Полный список доступных функций можно найти по адресу http://arduino.cc/en/Reference/StringObject.
Таблица 6.1. Некоторые полезные функции в библиотеке String
| Функция | Пример | Описание |
|---|---|---|
| [] | char ch = String("abc")[0] | Переменная ch получит значение "a" |
| trim | String s = " abc "; s.trim(); | Удалит пробелы с обеих сторон от группы символов abc. Переменная s получит значение "abc" |
| toInt | String s = "123"; int x = s.toInt(); | Преобразует строковое представление числа в значение типа int или long |
| substring | String s = "abcdefg"; String s2 = s.substring(1, 3); | Возвращает фрагмент исходной строки. Переменная s2 получит значение "bc". В параметрах передаются: индекс первого символа фрагмента и индекс символа, следующего за последним символом фрагмента |
| replace | String s = "abcdefg"; s.replace("de", "DE"); | Заменит все вхождения "de" в строке на "DE". Переменная s2 получит значение "abcDEfg" |
Использование ЭСППЗУ
Содержимое всех переменных, используемых в скетче Arduino, теряется при выключении питания или выполнении сброса. Чтобы сохранить значения, их нужно записать байт за байтом в память ЭСППЗУ. В Arduino Uno имеется 1 Кбайт памяти ЭСППЗУ.
ПРИМЕЧАНИЕ
Это не относится к плате Arduino Due, не имеющей ЭСППЗУ. В этой модели данные следует сохранять на карту microSD.
Для чтения и записи данных в ЭСППЗУ требуется использовать библиотеку, входящую в состав Arduino IDE. Следующий пример демонстрирует, как записать единственный байт в ЭСППЗУ, в данном случае операция выполняется в функции setup:
#include <EEPROM.h>
void setup()
{
byte valueToSave = 123
EEPROM.write(0, valueToSave);
}
В первом аргументе функции write передается адрес в ЭСППЗУ, куда должен быть записан байт данных, а во втором — значение для записи в этот адрес.