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
void setup()
{
byte valueToSave = 123
EEPROM.write(0, valueToSave);
}
В первом аргументе функции write передается адрес в ЭСППЗУ, куда должен быть записан байт данных, а во втором — значение для записи в этот адрес.
Для чтения данных из ЭСППЗУ используется команда read. Чтобы прочитать единственный байт, достаточно выполнить следующую команду:
EEPROM.read(0);
где 0 — это адрес в ЭСППЗУ.
Пример использования ЭСППЗУ
Следующий пример демонстрирует типичный сценарий записи значения в процессе нормального выполнения программы и его чтения в момент запуска. Приложение реализует кодовый замок двери и дает возможность вводить и изменять шифр с помощью монитора последовательного порта. Шифр хранится в ЭСППЗУ, поэтому его можно менять. Если бы шифр должен был сбрасываться при каждом запуске Arduino, не было бы смысла давать пользователю возможность изменять его.
В дискуссии, приведенной далее, будут обсуждаться отдельные фрагменты скетча. Желающие увидеть полный код скетча могут открыть скетч sketch_06_06_EEPROM_example в Arduino IDE, доступный в пакете примеров для этой книги на сайте www.simonmonk.org. Опробуйте этот скетч у себя, чтобы получить более полное представление о его работе. Он не требует подключения дополнительного аппаратного обеспечения к Arduino.
Функция setup содержит вызов функции initializeCode.
void initializeCode()
{
byte codeSetMarker = EEPROM.read(0);
if (codeSetMarker == codeSetMarkerValue)
{
code = readSecretCodeFromEEPROM();
}
else
{
code = defaultCode;
}
}
Задача этой функции — записать значение в переменную code (шифр). Это значение обычно читается из ЭСППЗУ, но при этом возникает несколько сложностей.