Description
Prints data to the serial port as human-readable ASCII text. This command can take many forms. Numbers are printed using an ASCII character for each digit. Floats are similarly printed as ASCII digits, defaulting to two decimal places. Bytes are sent as a single character. Characters and strings are sent as is. For example:
-
Serial.print(78) gives «78»
-
Serial.print(1.23456) gives «1.23»
-
Serial.print(‘N’) gives «N»
-
Serial.print(«Hello world.») gives «Hello world.»
An optional second parameter specifies:
-
The base (format) to be printed for integral data types (byte, char, int, long, short, unsigned char, unsigned int, unsigned long, word). The permitted values are:
-
BIN: binary, or base 2
-
OCT: octal, or base 8
-
DEC: decimal, or base 10
-
HEX: hexadecimal, or base 16
-
-
The number of decimal places to be printed for floating point numbers (double, float).
For example:
-
Serial.print(78, BIN) gives «1001110»
-
Serial.print(78, OCT) gives «116»
-
Serial.print(78, DEC) gives «78»
-
Serial.print(78, HEX) gives «4E»
-
Serial.print(1.23456, 0) gives «1»
-
Serial.print(1.23456, 2) gives «1.23»
-
Serial.print(1.23456, 4) gives «1.2345»
You can pass flash-memory based strings to Serial.print() by wrapping them with F(). For example:
Serial.print(F(«Hello World»))
Типы данных
Тип | Занимаемый размер (байт) | Минимальное значение | Максимальное значение |
---|---|---|---|
1 | false | true | |
1 | -128 | 127 | |
1 | 255 | ||
2 | -32768 | 32767 | |
2 | 65535 | ||
4 | -2147483648 | 2147483647 | |
4 | 4294967295 | ||
4 | -3.4028235E+38 | 3.4028235E+38 |
Логический тип, может принимать только 2 значения — true (правда) и false (ложь). В памяти занимает 1 байт.
числа
char
Тип позволяет хранить 1 алфавитно-цифровой символ и занимае 1 байт. Для записи символа используются одинарные кавычки.
В памяти хранится число, соответствующее записанному символу в таблице ASCII, поэтому над переменной можно производить арифметические действия.
Переменная это типа — знаковая, диапазон допустимых значений — от -128 до 127.
int
Пожалуй самый частоиспользуемый тип для хранения целых чисел со знаком — integer (целое число). Занимает 2 байта и может хранить цисла от -32768 до 32767.
На платформе Arduino также присутствует тип , который ничем не отличается от типа int.
long
Тип long служит для хранение больших целых знаковых чисел. Диапазон его значений от -2147483648 до 2147483647, а занимает в памяти он 4 байта.
float
Тип данных чисел с плавающей точкой (или с плавающей запятой). Используется для нецелочисленных расчетов. В Arduino используется например для считывания значений с аналоговых пинов. Диапазон значений от -3.4028235E+38 до 3.4028235E+38,а занимает такая переменная 4 байта.
Точность — 6-7 знаков после запятой.
double
Тип ничем не отличается от типа float и введен для обратной совместимости. На многих других платформах он имеет большую чем у float точность.
string
Тип для хранение текстовых строк. Является массивом символов типа char и символа конца строки ‘\0’ в последнем его элементе. Не путать с классами string и String.
Строка может быть создана и инициализирована несколькими способами:
Если забыть указать символ конца строки при посимвольной инициализации или не отвести под него место, то функции работы со строками будут работать некорректно.
массив
Массив — это набор элементов одного типа с доступом к каждому элементу по индексу.
Нумерация индексов массива начинается с 0.
Преобразование типов
Преобразование типов — это приведение значение переменной к другому типа, отличному от типа данной переменной.
Приведение типов делится на явное и неявное.
Пример явного приведения типа:
Пример неявного приведения типа:
Условная конструкция if принимает на вход значение типа boolean, поэтому целочисленное значение переменной a будет приведено к типа boolean.
Еще один пример явного приведения типа:
Функции и методы класса String
Для работы со строками в String предусмотрено множество полезных функций. Приведем краткое описание каждой из них:
- String() – конструктор, создает элемент класса данных string. Возвращаемого значения нет. Есть множество вариантов, позволяющих создавать String из строк, символов, числе разных форматов.
- charAt() возвращает указанный в строке элемент. Возвращаемое значение – n-ный символ строки.
- compareTo() – функция нужна для проверки двух строк на равенство и позволяет выявить, какая из них идет раньше по алфавиту. Возвращаемые значения: отрицательное число, если строка 1 идет раньше строки 2 по алфавиту; 0 – при эквивалентности двух строк; положительное число, если вторая строка идет раньше первой в алфавитном порядке.
- concat() – функция, которая объединяет две строки в одну. Итог сложения строк объединяется в новый объект String.
- startsWith() – функция показывает, начинается ли строка с символа, указанного во второй строке. Возвращаемое значение: true, если строка начинается с символа из второй строки, в ином случае false.
- endsWith() – работает так же, как и startsWith(), но проверяет уже окончание строки. Также возвращает значения true и false.
- equals() – сравнивает две строки с учетом регистра, т.е. строки «start» и «START» не будут считаться эквивалентными. Возвращаемые значения: true при эквивалентности, false в ином случае.
- equalsIgnoreCase() – похожа на equals, только эта функция не чувствительна к регистру символов.
- getBytes() – позволяет скопировать символы указанной строки в буфер.
- indexOf() – выполняет поиск символа в строке с начала. Возвращает значение индекса подстроки val или -1, если подстрока не обнаружена.
- lastIndexOf() –выполняет поиск символа в строке с конца.
- length() – указывает длину строки в символах без учета завершающего нулевого символа.
- replace() – заменяет в строке вхождения определенного символа на другой.
- setCharAt() – изменяет нужный символ в строке.
- substring() – возвращает подстроку. Может принимать два значения – начальный и конечный индексы. Первый является включительным, т.е. соответствующий ему элемент будет включаться в строку, второй – не является им.
- toCharArray() – копирует элементы строки в буфер.
- toLowerCase() – возвращает строку, которая записана в нижнем регистре.
- toUpperCase() – возвращает записанную в верхнем регистре строку.
- toInt() – позволяет преобразовать строку в число (целое). При наличии в строке не целочисленных значений функция прерывает преобразование.
- trim() – отбрасывает ненужные пробелы в начале и в конце строки.
See Also
-
Language : Arduino — Serial
-
Language : Serial.available()
-
Language : Serial.availableForWrite()
-
Language : Serial.begin()
-
Language : Serial.end()
-
Language : Serial.find()
-
Language : Serial.findUntil()
-
Language : Serial.flush()
-
Language : Serial.getTimeout()
-
Language : if(Serial)
-
Language : Serial.parseFloat()
-
Language : Serial.parseInt()
-
Language : Serial.peek()
-
Language : Serial.println()
-
Language : Serial.read()
-
Language : Serial.readBytes()
-
Language : Serial.readBytesUntil()
-
Language : Serial.readString()
-
Language : Serial.readStringUntil()
-
Language : serialEvent()
-
Language : Serial.setTimeout()
-
Language : Serial.write()
Создание строк в ардуино с помощью String
В ардуино у нас есть несколько способов создать строку, приведем основные:
- char myCharStr = “Start”; – массив типа char с завершающим пустым символом;
- String myStr = “Start”; – объявляем переменную, создаем экземпляр класса String и записываем в него константу-строку.
- String myStr = String(“Start”); – аналогичен предыдущему: создаем строку из константы
- String myStr(myCharStr); – создаем объект класса String с помощью конструктра, принимающего на вход массив типа char и создающего из char String.
- String myStr = String(50); – создаем строку из целого числа (преобразование int to string).
- String myStr = String(30, H); – создаем строку – представление числа в 16-чной системе (HEX to String)
- String myStr = String(16, B); – создаем строку – представление числа в двоичной системе (Byte to String).
Каждый раз, когда мы объявляем в коде строку с использованием двойных кавычек, мы создаем неявный объект класса String, являющийся константой. При этом обязательно использование именно двойных кавычек: “String” – это строка. Одинарные кавычки нужны для обозначения отдельных символов. ‘S’ – это символ.
Для чего нужен String в ардуино
Стандартным способом работы со строками в языке C является использование массива символов. Это все означало необходимость работы с указателями и понимания адресной арифметики. В ардуино и C++ у программистов появилось гораздо больше возможностей. Все “низкоуровневые” операции по работе со строкой выделены в отдельный класс, а для основных операций даже переопределены операторы. Например, для объединения срок мы просто используем хорошо знакомый знак “+”, а не зубодробильные функции типа malloc и strcpy. С помощью String мы работаем со строкой как с целым объектом, а не рассматриваем его как массив символов. Это позволяет сосредоточиться на логике скетча, а не деталях реализации хранения символов в памяти.
Естественно, у любого “упрощения” всегда есть свои подводные камни. String всегда использует больше оперативной памяти и в некоторых случаях функции класса могут медленнее обрабатываться. Поэтому в реальных больших проектах придется тщательно взвешивать все плюсы и минусы и не забывать, что никто не мешает нам работать со строками в стиле С. Все обычные функции обработки массивов char остаются в нашем арсенале и в arduino.
Преобразование String в массив char
Тип данных Char позволяет объявлять текстовые строки несколькими способами:
- char myStr1; – в данном случае объявлен массив определенного размера.
- char myStr2 = {‘a’, b, ‘c’, ‘d’, ‘e’}; – объявлен сам массив. Конечный символ не записанявно, его прибавит сам компилятор.
- char myStr3 = {‘a’, b, ‘c’, ‘d’, ‘e’’/0’}; – объявлен массив, при этом в конце прописан признак окончания строки.
- char myStr4 = “abcde”; – инициализация массива строковой постоянной. Размер и завершающий символ добавляются автоматически компилятором.
- char myStr5 = “abcde”; – инициализация массива с точным указанием его размера.
- char myStr 6 = “abcde”; – аналогично, но размер указан больше для возможности использования строк большей длины.
Еще раз напомним, что в типе данных char строковые константы нужно записывать в двойные кавычки «Abcde», а одиночные символы – в одинарные ‘a’.
Конвертировать строку в массив сhar array можно при помощи следующего кода:
String stringVar = “111”;
char charBufVar;
stringVar.toCharArray(charBufVar, 20);
Можно сделать обратное преобразование – char to string.
char[] chArray = “start”;
String str(chArray);
Пример преобразования String to const char*. Указание звездочкой char*означает, что это массив указателей.
String stringVar=string (`start);
Char charVar;
stringVar.toCharArray(charVar, sizeof(charVar));
string
Description
Text strings can be represented in two ways. you can use the String data type, which is part of the core as of version 0019, or you can make a string out of an array of type char and null-terminate it. This page described the latter method. For more details on the String object, which gives you more functionality at the cost of more memory, see the String object page.
Examples
All of the following are valid declarations for strings.
char Str1; char Str2 = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; char Str3 = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'}; char Str4 = "arduino"; char Str5 = "arduino"; char Str6 = "arduino";
Possibilities for declaring strings
- Declare an array of chars without initializing it as in Str1
- Declare an array of chars (with one extra char) and the compiler will add the required null character, as in Str2
- Explicitly add the null character, Str3
- Initialize with a string constant in quotation marks; the compiler will size the array to fit the string constant and a terminating null character, Str4
- Initialize the array with an explicit size and string constant, Str5
- Initialize the array, leaving extra space for a larger string, Str6
Null termination
Generally, strings are terminated with a null character (ASCII code 0). This allows functions (like Serial.print()) to tell where the end of a string is. Otherwise, they would continue reading subsequent bytes of memory that aren’t actually part of the string.
This means that your string needs to have space for one more character than the text you want it to contain. That is why Str2 and Str5 need to be eight characters, even though «arduino» is only seven — the last position is automatically filled with a null character. Str4 will be automatically sized to eight characters, one for the extra null. In Str3, we’ve explicitly included the null character (written ‘\0’) ourselves.
Note that it’s possible to have a string without a final null character (e.g. if you had specified the length of Str2 as seven instead of eight). This will break most functions that use strings, so you shouldn’t do it intentionally. If you notice something behaving strangely (operating on characters not in the string), however, this could be the problem.
Single quotes or double quotes?
Strings are always defined inside double quotes («Abc») and characters are always defined inside single quotes(‘A’).
Wrapping long strings
You can wrap long strings like this:
char myString[] = "This is the first line" " this is the second line" " etcetera";
Arrays of strings
It is often convenient, when working with large amounts of text, such as a project with an LCD display, to setup an array of strings. Because strings themselves are arrays, this is in actually an example of a two-dimensional array.
In the code below, the asterisk after the datatype char «char*» indicates that this is an array of «pointers». All array names are actually pointers, so this is required to make an array of arrays. Pointers are one of the more esoteric parts of C for beginners to understand, but it isn’t necessary to understand pointers in detail to use them effectively here.
Example
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3", "This is string 4", "This is string 5","This is string 6"}; void setup(){ Serial.begin(9600); } void loop(){ for (int i = 0; i < 6; i++){ Serial.println(myStrings); delay(500); } }
Программирование Ардуино
Язык программирования устройств Ардуино основан на C/C++. Он прост в освоении, и на данный момент Arduino — это, пожалуй, самый удобный способ программирования устройств на микроконтроллерах.
Базовые и полезные знания, необходимые для успешного программирования под платформу Arduino:
|
|
Справочник языка Ардуино
Язык Arduino можно разделить на три раздела:
Операторы
Управляющие операторы
Синтаксис
Арифметические операторы
Операторы сравнения
Логические операторы
Унарные операторы
|
ДанныеКонстанты
Типы данных
Преобразование типов данных
Область видимости переменных и квалификаторы
|
ФункцииЦифровой ввод/вывод
Аналоговый ввод/вывод
Дополнительные фунции ввода/вывода
Работа со временем
Математические функции
Тригонометрические функции
Генераторы случайных значений
Внешние прерывания
Функции передачи данныхSerial |
Библиотеки Arduino
Servo — библиотека управления сервоприводами.EEPROM — чтение и запись энергонезависимой памяти микроконтроллера.SPI — библиотека, реализующая передачу данных через интерфейс SPI.Stepper — библиотека управления шаговыми двигателями.
Overview of Strings in C
In the Arduino C language, a string is the type used to store any text including alphanumeric and special characters. Internally, it’s represented as an array of characters. Each string is terminated by a ‘null’ character. They are called “null-terminated strings.” Each character is enclosed within single quotes whereas a string is enclosed with double quotes. Many Arduino C programs make use of strings and associated properties. The operations possible on strings include- calculating the string length, concatenation of strings, comparison of strings and so on.
What is Type Conversion?
Many times in C programs, expressions contain variables and constants of different data types. For calculation purposes, they need to be converted to the same data type. When you convert one data type into another, the method is termed type conversion.
In Arduino C, we have 2 types of type conversion
Implicit Type Conversion – This kind of type conversion is done automatically by the compiler. Programmers do not play any role here.
Explicit Type Conversion– Here the programmer is responsible for the type conversion. This is also called typecasting. The syntax is as follows.
(datatype) expression;
The above item is called a cast operator. Take a look at this example.
char a;
int b;
a=(char)b;
This is a simple way to convert an integer to a character type. Here, ‘a’ is of character data type and b is of integer data type. It is not possible to assign the value of variable b to variable a as they are of different data types. So, we typecast integer b to character in this example. Now, both a and b are of character data type.
How to Convert String to Integer in the Arduino ?
Sometimes, a number is input as a string. To use it for any mathematical operation, we have to convert the string to integer. There are two ways to do this.
The first method is to manually convert the string into an integer.
The second method is to use the built-in functions.
Manual Conversion
Below is a list of ASCII (American Standard Code for Information Interchange) characters and their decimal value.
ASCII Character Decimal Value
0 = 48
1 = 49
2 = 50
3 = 51
4 = 52
5 = 53
6 = 54
7 = 55
8 = 56
9 = 57
Numbers are stored in character format within the string. In order to get the decimal value of each string element, we have to subtract it with decimal value of character ‘0.’ Let’s make this clear with the help of an example.
Example 1: Program to Manually Convert a String to an Integer
/* * circuits4you.com * String to Integer Manual Conversion */ void setup() { Serial.begin(9600); } void loop() { String num = "1234"; int i, len; int result=0; Serial.print("Number: "); Serial.println(num); len = num.length(); for(i=0; i<len; i++) { result = result * 10 + ( num - '0' ); } Serial.println(result); }
The program code is written within the curly braces of the main function. Inside the loop function we first define and declare the different variables along with their data types. Variables i, len and result are declared as of integer data type. The result variable is initialized to zero. The serial.print() function is then called to display the message “number” on the terminal screen. In this case, the string is an array of characters pointed to by num. Then, we calculate the length of the string using the length() function. Next, we loop through the string and convert the string into decimal value. Finally, the string is converted into an integer and printed on the screen.
Example 2: A Program to Convert String to Integer Using the atoi() Function
atoi() is a function that converts a string data type to integer data type in the C language. The syntax of this function is as follows
int atoi((const char * str);
Here, str is of type pointer to a character. The const keyword is used to make variables non-modifiable. This function returns an integer value after execution. The atoi() function is present in the stdlib.h header file. This header file contains all the type casting functions used in the C language.
void setup() { Serial.begin(9600); } void loop() { char x = "450"; int result = atoi(x); Serial.print("integer value of the string is: "); Serial.println(result); while(1); }
The list of other string to numerical values in-built type casting functions used in C programs include
atof()– This function is used to convert string to a floating point value.atol()– Use this function to convert a string to a long integer value.
Hope this article was helpful and informative. Do try out the examples for yourself and experiment with them. Programming is one of those things that becomes better with practice.
Когда использовать строковый объект или массив строковых символов
Объект String намного проще в использовании, чем массив строковых символов. Объект имеет встроенные функции, которые могут выполнять ряд операций со строками, которые полностью задокументированы в справочном разделе на веб-сайте Arduino.
Основным недостатком использования объекта String является то, что он использует много памяти и может быстро использовать оперативную память Arduino, что может привести к зависанию, сбою или неожиданному поведению Arduino. Это особенно верно для небольших плат, таких как Arduino Uno.
Если скетч на Arduino небольшой и ограничивает использование объектов, то проблем возникнуть не должно.
Строки символьных массивов сложнее использовать, и вам может потребоваться написать свои собственные функции для работы с этими типами строк. Преимущество состоит в том, что у вас есть контроль над размером создаваемых массивов строк, поэтому вы можете сохранять массивы небольшими для экономии памяти.
Вам нужно убедиться, что вы не пишете через конец границ массива строковыми массивами. У объекта String нет этой проблемы, и он позаботится о границах строки за вас при условии, что у него достаточно памяти. Объект String может попытаться выполнить запись в несуществующую память, когда ему не хватает памяти, но никогда не будет записывать поверх конца строки, с которой он работает.
Объединение строк Arduino
Объединить две строки в одну можно различными способами. Эта операция также называется конкатенацией. В ее результате получается новый объект String, состоящий из двух соединенных строк. Добавить к строке можно различные символы:
- String3 = string1 + 111; // позволяет прибавить к строке числовую константу. Число должно быть целым.
- String3 = string1 + 111111111; // добавляет к строке длинное целое число
- String3 = string1 + ‘А’; // добавляет символ к строке
- String3 = string1 + “aaa”;// добавляет строковую постоянную.
- String3 = string1 + string2; // объединяет две строки вместе.
Важно осторожно объединять две строки из разных типов данных, так как это может привести к ошибке или неправильному результату
Создание строк в ардуино с помощью String
В ардуино у нас есть несколько способов создать строку, приведем основные:
- char myCharStr = “Start”; – массив типа char с завершающим пустым символом;
- String myStr = “Start”; – объявляем переменную, создаем экземпляр класса String и записываем в него константу-строку.
- String myStr = String(“Start”); – аналогичен предыдущему: создаем строку из константы
- String myStr(myCharStr); – создаем объект класса String с помощью конструктра, принимающего на вход массив типа char и создающего из char String.
- String myStr = String(50); – создаем строку из целого числа (преобразование int to string).
- String myStr = String(30, H); – создаем строку – представление числа в 16-чной системе (HEX to String)
- String myStr = String(16, B); – создаем строку – представление числа в двоичной системе (Byte to String).
Каждый раз, когда мы объявляем в коде строку с использованием двойных кавычек, мы создаем неявный объект класса String, являющийся константой. При этом обязательно использование именно двойных кавычек: “String” – это строка. Одинарные кавычки нужны для обозначения отдельных символов. ‘S’ – это символ.
Платы и модули для функционала
Существует много плат Arduino, описание которых говорит о различиях в объеме памяти, портах, питании, тактовой частоте и др. Одни предназначены для решения простых задач, другие — для решения более сложных.
К популярным платам относятся следующие виды:
- Arduino Uno. Наиболее распространенная плата. Есть большой выбор уроков. Плата допускает замену контроллера. Оснащена 14 цифровыми вводами-выводами (6 ШИМ), 6 аналоговыми входами, флеш-памятью 32 Кб (ATmega328), из которых 0,5 Кб использует загрузчик.
- Arduino Mega 2560. Создана на базе микроконтроллера ATmega2560. Флеш-память — 256 Кб, из которых 8 Кб использует загрузчик. Имеет 54 цифровых вводов-выводов (14 ШИМ), 16 аналоговых входов, 8 Кб оперативной памяти. Среди всех плат «Ардуино» у этой самый большой размер.
- Arduino Due. Оснащена 54 цифровыми вводами-выводами (12 ШИМ), 12 аналоговыми входами (2 выходами). Создана на базе микроконтроллера AT91SAM3X8E с рабочим напряжением 3,3 В и флеш-памятью 512 Кб.
- Arduino Pro Mini 3.3V. Самая миниатюрная плата в семействе Arduino. Напряжение — 3,3 В. Требует использования внешнего программатора. Память данных составляет 2 Кб. Создана на базе микроконтроллера ATmega328P. Количество цифровых выводов — 14 линий (6 из которых — ШИМ), аналоговых — 6.
- Arduino Pro Mini 5V. Аналог предыдущей модели с напряжением 5 В.
- Arduino Nano V3.0. Создана на базе ATmega328. Сдержит 32 Кб памяти, из которых 2 Кб использует загрузчик. Имеет 14 цифровых вводов-выводов (6 ШИМ), 6 аналоговых входов, встроенный порт USB. Напряжение — 5 В.
- Arduino Micro. Разновидность платы c возможностью имитировать различные USB-устройства при подключении к ПК. Оснащена 20 цифровыми вводами-выводами (7 ШИМ), 12 аналоговыми входами.
Кроме того, существуют дополнительные модули и датчики с нужными ответвлениями:
- Датчики. Системы, считывающие, отправляющие и обрабатывающие информацию. Расширяют аппаратные функции проекта.
- Модули. Дополнения, которые позволяют расширить вычислительные мощности проекта. К ним относят карты памяти, вспомогательные процессы.
Датчики можно разделить на категории:
- Устройства получения информации. Датчики и сканеры, позволяющие получить сведения об окружающей среде: давлении, температуре, влажности, расстоянии до объектов. Есть возможность вводить параметры, зависящие от этих показаний. С помощью датчика расстояния можно создавать роботы-пылесосы, которые передвигаются по комнате, избегая препятствий.
- Устройства обработки информации. Реализуются отдельно или совместно с предыдущими датчиками. Используются для совершения промежуточных операций.
- Устройства вывода информации. Это ЖК-экраны, светодиодные индикаторы, сенсорные экраны, динамики и т. д.
Среди наиболее популярных модулей «Ардуино» можно выделить:
- Ультразвуковой дальномер HC-SR04. Датчик, позволяющий с помощью ультразвука измерить расстояние от 2 см до 4 м.
- Инфракрасный дальномер Sharp. Измеряет расстояние от 20 см до 1,5 м посредством инфракрасного излучения.
- Модуль температуры и влажности DHT11. Измеряет температуру в диапазоне от 0 до +50°C и влажность от 20 до 90%. Используется для теплиц или в качестве комнатного термометра. Часто приобретается для умного дома.
- Датчик влажности почвы FC-28. Измеряет влажность почвы или другой среды. Нужен для автоматизированного полива растений.
- Bluetooth HC-06. Помогает организовать беспроводную связь с другими устройствами.
Объединение строк Arduino
Объединить две строки в одну можно различными способами. Эта операция также называется конкатенацией. В ее результате получается новый объект String, состоящий из двух соединенных строк. Добавить к строке можно различные символы:
- String3 = string1 + 111; // позволяет прибавить к строке числовую константу. Число должно быть целым.
- String3 = string1 + 111111111; // добавляет к строке длинное целое число
- String3 = string1 + ‘А’; // добавляет символ к строке
- String3 = string1 + “aaa”;// добавляет строковую постоянную.
- String3 = string1 + string2; // объединяет две строки вместе.
Важно осторожно объединять две строки из разных типов данных, так как это может привести к ошибке или неправильному результату
Array Bounds
When working with strings and arrays, it is very important to work within the bounds of strings or arrays. In the example sketch, an array was created, which was 40 characters long, in order to allocate the memory that could be used to manipulate strings.
If the array was made too small and we tried to copy a string that is bigger than the array to it, the string would be copied over the end of the array. The memory beyond the end of the array could contain other important data used in the sketch, which would then be overwritten by our string. If the memory beyond the end of the string is overrun, it could crash the sketch or cause unexpected behavior.
Previous Page
Print Page
Next Page
String-строки
Давайте рассмотрим большой пример, из которого будет понятно, как объявить строку и как с ней работать, а также учтены некоторые тонкости:
Как вы могли заметить, строки можно объявлять большим количеством способов, а также буквально складывать строки, как числа, оператором + . Я уже говорил, что строки являются объектами класса String , и у этого класса есть огромное количество удобных методов по работе со строками, далее мы их все рассмотрим с некоторыми примерами. Но для начала запомните вот что: строки – очень тяжёлый инструмент, очень медленный и занимающий кучу памяти: уже просто само наличие строк (от одной и более) в прошивке занимает +5% Flash памяти, т.к. подключается сам “инструмент” – класс String . Для небольших проектов это не страшно, памяти всегда будет навалом. Также неаккуратное использование строк может приводить к фрагментации оперативной памяти и зависанию программы, подробнее читайте ниже.
Инструменты для String
Помимо набора методов, библиотека String имеет несколько перегруженных операторов, благодаря которым мы можем:
- Работать с элементами String-строки как с массивами: myString = ‘a’;
- Сравнивать String-строки между собой: if (myString1 == myString2)
- Сравнивать String-строки с массивами символов: if (myString1 == «kek»)
- Инициализировать String-строки любым численным типом данных, символом, массивом символов и массивом символов внутри макроса F(): String myString = 10.0;
- Прибавлять к строке любой численный тип данных, символ или массив символов: myString += 12345;
Во всех перечисленных случаях можно считать, что данные “сами превратятся в String” и будут взаимодействовать со String-строкой, стоящей слева от оператора. Это не совсем так, но для понимания достаточно.
Итак, методы для работы со строками. Как и все методы, они применяются к своим объектам (к строкам) через точку. В рассмотренных ниже примерах строка называется myString.
Функции и методы класса String
Для работы со строками в String предусмотрено множество полезных функций. Приведем краткое описание каждой из них:
- String() – конструктор, создает элемент класса данных string. Возвращаемого значения нет. Есть множество вариантов, позволяющих создавать String из строк, символов, числе разных форматов.
- charAt() возвращает указанный в строке элемент. Возвращаемое значение – n-ный символ строки.
- compareTo() – функция нужна для проверки двух строк на равенство и позволяет выявить, какая из них идет раньше по алфавиту. Возвращаемые значения: отрицательное число, если строка 1 идет раньше строки 2 по алфавиту; 0 – при эквивалентности двух строк; положительное число, если вторая строка идет раньше первой в алфавитном порядке.
- concat() – функция, которая объединяет две строки в одну. Итог сложения строк объединяется в новый объект String.
- startsWith() – функция показывает, начинается ли строка с символа, указанного во второй строке. Возвращаемое значение: true, если строка начинается с символа из второй строки, в ином случае false.
- endsWith() – работает так же, как и startsWith(), но проверяет уже окончание строки. Также возвращает значения true и false.
- equals() – сравнивает две строки с учетом регистра, т.е. строки «start» и «START» не будут считаться эквивалентными. Возвращаемые значения: true при эквивалентности, false в ином случае.
- equalsIgnoreCase() – похожа на equals, только эта функция не чувствительна к регистру символов.
- getBytes() – позволяет скопировать символы указанной строки в буфер.
- indexOf() – выполняет поиск символа в строке с начала. Возвращает значение индекса подстроки val или -1, если подстрока не обнаружена.
- lastIndexOf() –выполняет поиск символа в строке с конца.
- length() – указывает длину строки в символах без учета завершающего нулевого символа.
- replace() – заменяет в строке вхождения определенного символа на другой.
- setCharAt() – изменяет нужный символ в строке.
- substring() – возвращает подстроку. Может принимать два значения – начальный и конечный индексы. Первый является включительным, т.е. соответствующий ему элемент будет включаться в строку, второй – не является им.
- toCharArray() – копирует элементы строки в буфер.
- toLowerCase() – возвращает строку, которая записана в нижнем регистре.
- toUpperCase() – возвращает записанную в верхнем регистре строку.
- toInt() – позволяет преобразовать строку в число (целое). При наличии в строке не целочисленных значений функция прерывает преобразование.
- trim() – отбрасывает ненужные пробелы в начале и в конце строки.