Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Библиотеки/Streaming

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Библиотека Streaming[1]

Новички иногда задаются вопросом, почему в «языке Arduino» нет операторов для конкатенации, к которым многие привыкли, к примеру, в языках Java, VB, C#, C++ и т.д.

// на Arduino такое не сработает; очень жаль:
lcd.print("The button was pressed " + counter + " times");
// "кнопка была нажата " + counter + " раз"

Тем временем, опытные программисты обходят эту проблему, синтезируя потоки при помощи громоздкого повторяющегося кода вроде того, что показан ниже:

lcd.print("GPS #");
lcd.print(gpsno);
lcd.print(" date: ");  // " дата: "
lcd.print(day);
lcd.print("-");
lcd.print(month);
lcd.print("-");
lcd.println(year); // брр!

Библиотека Streaming позволяет ужать такие фрагменты до строчек, напоминающих операцию конкатенации:

lcd << "GPS #" << gpsno << " date: " <<
day << "-" << month << "-" << year << endl;

Библиотека работает с любым классом, наследующим у Print:

Serial << "Counter: " << counter;
//  Serial << "Счетчик: " << counter;
 
lcd << "Temp: " << t.get_temperature() << " degrees";
//  lcd << "Температура: " << t.get_temperature() << " градусов";
 
my_pstring << "Hi Mom!" << endl;
//  my_pstring << "Привет, мам!" << endl;

Кроме того, при помощи Streaming можно выполнять форматирование:

Serial << "Byte value: " << _HEX(b) << endl;
//  Serial << "Значение байта: " << _HEX(b) << endl;
 
lcd << "The key pressed was " << _BYTE(c) << endl;
//  lcd << "Нажатая клавиша: " << _BYTE(c) << endl;

Этот синтаксис знаком многим, его легко прочитать и ему легко научиться, но, что важнее всего, библиотека Streaming не потребляет абсолютно никаких ресурсов. Дело в том, что функции этого оператора являются, по сути, строковыми аналогами для функций print(), в результате чего размер скетча не увеличивается и не потребляет больше RAM-памяти.

Надеюсь, когда-нибудь это маленькое нововведение, позволяющее совмещать несколько печатаемых значений, станет частью официальной библиотеки Arduino.

Загрузка

Чтобы загрузить библиотеку, кликните по этой ссылке. Когда ZIP-файл скачается, распакуйте его. Обязательно проверьте эту папку на наличие файла «Streaming.h».

Установка

Чтобы использовать библиотеку, поместите распакованный ZIP-файл в папку для библиотек IDE Arduino. Чтобы узнать, где находится эта папка на PC, откройте IDE Arduino, кликните на Файл > Настройки (File > Preferences) – адрес папки будет указан в самом верху, в поле «Размещение папки скетчей» (Sketchbook location). Затем перезапустите IDE Arduino. Если папки «libraries» нет, ее нужно создать.

Версия

Узнать текущую версию библиотеки можно, найдя в файле «Streaming.h» фрагмент с STREAMING_LIBRARY_VERSION. Стояще справа число и будет текущей версией библиотеки.

Примеры

См.также

Внешние ссылки

  1. arduiniana.org - Streaming