Проверка/Оформление/Редактирование: Мякишев Е.А.
Класс 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 байт.
Примеры
См.также
Внешние ссылки
развернутьПартнерские ресурсы |
---|
Криптовалюты |
|
---|
Магазины |
|
---|
Хостинг |
|
---|
Разное |
- Викиум - Онлайн-тренажер для мозга
- Like Центр - Центр поддержки и развития предпринимательства.
- Gamersbay - лучший магазин по бустингу для World of Warcraft.
- Ноотропы OmniMind N°1 - Усиливает мозговую активность. Повышает мотивацию. Улучшает память.
- Санкт-Петербургская школа телевидения - это федеральная сеть образовательных центров, которая имеет филиалы в 37 городах России.
- Lingualeo.com — интерактивный онлайн-сервис для изучения и практики английского языка в увлекательной игровой форме.
- Junyschool (Джунискул) – международная школа программирования и дизайна для детей и подростков от 5 до 17 лет, где ученики осваивают компьютерную грамотность, развивают алгоритмическое и креативное мышление, изучают основы программирования и компьютерной графики, создают собственные проекты: игры, сайты, программы, приложения, анимации, 3D-модели, монтируют видео.
- Умназия - Интерактивные онлайн-курсы и тренажеры для развития мышления детей 6-13 лет
- SkillBox - это один из лидеров российского рынка онлайн-образования. Среди партнеров Skillbox ведущий разработчик сервисного дизайна AIC, медиа-компания Yoola, первое и самое крупное русскоязычное аналитическое агентство Tagline, онлайн-школа дизайна и иллюстрации Bang! Bang! Education, оператор PR-рынка PACO, студия рисования Draw&Go, агентство performance-маркетинга Ingate, scrum-студия Sibirix, имидж-лаборатория Персона.
- «Нетология» — это университет по подготовке и дополнительному обучению специалистов в области интернет-маркетинга, управления проектами и продуктами, дизайна, Data Science и разработки. В рамках Нетологии студенты получают ценные теоретические знания от лучших экспертов Рунета, выполняют практические задания на отработку полученных навыков, общаются с экспертами и единомышленниками. Познакомиться со всеми продуктами подробнее можно на сайте https://netology.ru, линейка курсов и профессий постоянно обновляется.
- StudyBay Brazil – это онлайн биржа для португалоговорящих студентов и авторов! Студент получает уникальную работу любого уровня сложности и больше свободного времени, в то время как у автора появляется дополнительный заработок и бесценный опыт.
- Автор24 — самая большая в России площадка по написанию учебных работ: контрольные и курсовые работы, дипломы, рефераты, решение задач, отчеты по практике, а так же любой другой вид работы. Сервис сотрудничает с более 70 000 авторов. Более 1 000 000 работ уже выполнено.
- StudyBay – это онлайн биржа для англоязычных студентов и авторов! Студент получает уникальную работу любого уровня сложности и больше свободного времени, в то время как у автора появляется дополнительный заработок и бесценный опыт.
|
---|
развернутьПримеры Arduino |
---|
Стандартные функции |
---|
Основы |
|
---|
Цифровой сигнал |
|
---|
Аналоговый сигнал |
|
---|
Связь |
- ReadASCIIString - Анализ строки, состоящей из разделенных запятыми int-значений, и их последующее использование для управления RGB-светодиодом.
- ASCII Table - Демонстрирует продвинутые способы вывода данных на Serial Monitor.
- Dimmer - Изменение яркости светодиода при помощи движения мышкой.
- Graph - Отправка данных на компьютер и их графическое отображение в скетче Processing.
- Physical Pixel - Включение/выключение светодиода путем отправки данных со скетча Processing (или Max/MSP) на Arduino.
- Virtual Color Mixer - Отправка с Arduino на компьютер сразу нескольких значений, а затем их считывание при помощи скетча для Processing или Max/MSP.
- Serial Call Response - Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»).
- Serial Call Response ASCII - Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»). До передачи данные зашифровываются в ASCII.
- SerialEvent - Демонстрирует использование SerialEvent().
- Serial input (Switch (case) Statement) - Как совершать различные действия, беря за основу символы, присланные через последовательный порт.
- MIDI - Передача через последовательный порт сообщений с MIDI-нотами.
- MultiSerialMega - Использование двух последовательных портов на Arduino Mega.
|
---|
Управляющие структуры |
- If Statement - Как использовать оператор «if» для создания условий, опирающихся на входные аналоговые данные, при которых светодиод будет либо включаться, либо оставаться выключенным.
- For Loop - Управление несколькими светодиодами, чтобы они мигали, как LED-полоска у автомобиля Китт из сериала «Рыцарь дорог».
- Array - Вариация примера «For Loop», но с использованием массива.
- While Loop - Использование цикла while() для калибровки датчика. Калибровка включается при нажатии на кнопку.
- Switch Case - Как совершать какие-либо действия в зависимости от значений, полученных от датчика. Эквивалент примера «If Statement», но если бы условий было не два, а четыре. Этот пример демонстрирует, как дробить диапазон данных от датчика на четыре «суб-диапазона», а затем в зависимости от полученных результатов совершать одно из четырех действий.
- Switch Case 2 - Второй пример, демонстрирующий использование оператора switch. Показывает, как совершать различные действия в зависимости от определенных символов, полученных через последовательный порт.
|
---|
Датчики |
- ADXL3xx - Считывание данных с акселерометра ADXL3xx.
- Knock - Определение стука при помощи пьезоэлемента.
- Memsic2125 - Считывание данных с 2-осевого акселерометра Memsic2125.
- Ping - Определение объектов при помощи ультразвукового дальномера.
|
---|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
---|
Строки |
|
---|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
---|
Клавиатура |
- KeyboardMessage - Отправка текстовой строки при нажатии на кнопку.
- KeyboardLogout - Выход из текущей пользовательской сессии при помощи клавиатурных комманд.
- KeyboardSerial - Считывает байт, присланный через последовательный порт, а в ответ отсылает другой байт.
- KeyboardReprogram - Открывает новое окно в среде разработки Arduino, а затем перешивает Leonardo скетчем «Моргание».
|
---|
Мышь |
|
---|
Разное |
---|