Arduino:Библиотеки/PString
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Класс PString[1]
Когда вышла Arduino 0012, вместе с нею был внедрен и класс Print, и для того, чтобы воспользоваться его возможностями, были написано множество библиотек, включая HardwareSerial, LiquidCrystal, Ethernet Client/Server и NewSoftSerial. Однако если вам нужно вывести отформатированный текст на устройства, для которых подобные библиотеки пока не написаны, то здесь придется либо писать специальный код, либо обращаться к ресурсоемким альтернативным решениям вроде sprint().
Специально для таких случаев была написан класс PString (означает «Print-to-String», т.е. «из Print в String»). В ее основе лежит строковый класс PString (наследующий у класса Print), который рендерит текст в символьный буфер. Благодаря объектам Pstring вы можете использовать текстовый движок Print на любом устройстве, даже если он не поддерживает напрямую текст в формате класса Print, а в первую очередь просто «печатает» строку.
Самое простейшее применение – это воспользоваться объектом PString, чтобы просто отформатировать текст:
char buffer[30];
#define pi 3.14159
PString(buffer, sizeof(buffer), pi);
Этот код использует функционал Print, который затрагивает обработку чисел с плавающей точкой. Он генерирует строковый эквивалент константы pi, сохраняя ее в buffer.
Поскольку PString наследует у Print, объекты PString могут делать то же, что и объект Print:
char buffer[50];
PString mystring(buffer, sizeof(buffer));
char name[] = "Joe"; // "Джо"
int age = 45;
mystring.print("Hi, my name is "); // "Привет, мое имя "
mystring.print(name);
mystring.print(" and I am "); // ", и мне "
mystring.print(age);
mystring.println(" years old."); // " лет."
При помощи этого кода вы помещаете в буфер предложение и делаете это, по сути, тем же способом, как если бы передавали его по последовательному порту.
Другие функции
PString – это очень минималистичный строковый класс. Он может сообщать о своих длине и объеме, а также обеспечивает постоянный доступ к своему внутреннему строковому буферу:
Serial.print(str.length());
Serial.print(str.capacity());
Serial.print(str);
Чтобы повторно воспользоваться одним и тем же объектом, существует функция begin(). Она сбрасывает позицию в буфере, с которой начнется следующий печатаемый текст.
str.print("Hello");
str.begin();
str.print("World");
// теперь объект str содержит слово "World"
Операторы
PString предусматривает работу с тремя операторами – для присваивания, конкатенации и равенства:
char buffer[20];
PString str(buffer, sizeof(buffer));
str = "Yin"; // присваивание
str += " Yang"; // конкатенация
if (str == "Yin Yang") // равенство
{
Serial.println("They are equal!"); // "Они одинаковы!"
}
Свойства объектов PString
Объекты PString не «владеют» собственными буферами, а полагаются на статические буферы, которые заданы заранее. Эти статические буферы передаются объектам PString в момент создания экземпляра класса. Объекты PString никогда не выделяют память динамично – даже если результат функции print(), присвоение или конкатенация приводят к переполнению размера буфера. В этом случае излишние данные просто игнорируются, а в конце самой строки, как и положено, ставится «0».
Благодаря этим ограничениям объекты PString обладают тремя ключевыми свойствами:
- Они никогда не приведут к переполнению буфера
- Строковый буфер всегда будет валидной памятью
- Буферы всегда будут содержать валидную строку (т.е. строку, завершающуюся нулем) в формате языка C
Загрузка
Чтобы загрузить класс, кликните по этой ссылке. Когда ZIP-файл скачается, распакуйте его. Проверьте эту папку на наличие файлов «PString.cpp» и «PString.h».
Установка
Чтобы использовать класс, поместите распакованный ZIP-файл в папку для библиотек IDE Arduino. Чтобы узнать, где находится эта папка на PC, откройте IDE Arduino, кликните на Файл > Настройки (File > Preferences) – адрес папки будет указан в самом верху, в поле «Размещение папки скетчей» (Sketchbook location). Затем перезапустите IDE Arduino. Если папки «libraries» нет, ее нужно создать.
История изменений
- Версия 1 – первоначальный релиз
- Версия 2 – добавлена поддержка строковых конверторов с модификаторами HEX, OCT и т.д. (позднее – и поддержка чисел с плавающей точкой).
- Версия 3 – добавлена совместимость с Arduino 1.0
Потребление ресурсов
Во время существования объект PString потребляет 8 байт памяти. В зависимости от используемых функций, подключение класса PString, как правило, добавляет к размеру скетча лишь 100-600 байт.
Примеры
- test pstring - Тестовый скетч для класса PString
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |