Уроки технологии
Технология Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Arduino Variable Types

Каковы различные типы переменных Arduino? Независимо от того, являетесь ли вы новичком в Arduino или уже умеете программировать, это руководство поможет вам открыть для себя все наиболее полезные типы переменных Arduino. Прежде всего, Arduino — это подмножество C/C++ с дополнительными функциями, связанными с аппаратными особенностями платы. Таким образом, вы можете ожидать, что у вас будут схожие типы данных. Это верно для некоторых типов, но с Arduino вы также получаете модифицированные и новые эксклюзивные типы. Давайте рассмотрим все типы переменных Arduino, которые вы будете использовать, с ограничениями и особенностями каждого из них.

Типы переменных Arduino – целые числа

байт

Номер байта — это наименьший тип данных Arduino, который вы можете использовать для круглых чисел при программировании с помощью Arduino. Байт содержит 8 бит. Бит — это просто двоичная информация: 0 или 1. Вы учитесь использовать Arduino для создания собственных проектов? Ознакомьтесь с Arduino для начинающих и учитесь шаг за шагом. Итак, байт будет содержать 8 двоичных значений. Например, число 45, записанное в 8-битном формате, будет выглядеть так: 00101101. Именно так байт будет храниться в Arduino. В вашей программе вы можете использовать либо двоичное представление числа, либо десятичное представление (также работает шестнадцатеричное представление). байт б = 260; // десятичное //… или … байт b = 0b00101101; // двоичный // … или … байт b = 0x2D; // шестнадцатеричный И вы можете напечатать число с помощью функции Serial.println(), используя разные аргументы для разных представлений числа.

byte b = 45;

void setup()
{
    Serial.begin(9600);
    Serial.println(b);
    // print in decimal by default
    Serial.println(b, DEC);
    // print in decimal, same as above
    Serial.println(b, BIN);
    // print in binary
    Serial.println(b, HEX);
    // print in hexadecimal
}
void loop() {}

Здесь результат в Serial Monitor будет: 45 45 101101 2D Минимальное значение байта — 0, максимальное значение — 255 (байт — это беззнаковый тип данных, подробнее об этом позже в этом руководстве). Как видите, это довольно коротко, поэтому будьте внимательны при использовании этого типа данных. Используйте его только для хранения очень маленьких чисел. А что произойдет, если вы попытаетесь сохранить число меньше 0 или больше 255? Что ж, программа все равно будет работать, но ваша переменная переполнится. Переполнение означает, что как только значение достигнет 256, оно вернется к 0. Итак, если вы попытаетесь присвоить байту 260:

byte b = 260;
void setup()
{
    Serial.begin(9600);
    Serial.println(b);
    // print in decimal by default
    Serial.println(b, DEC);
    // print in decimal, same as above
    Serial.println(b, BIN);
    // print in binary
    Serial.println(b, HEX);
    // print in hexadecimal
}
void loop() {}

Ты получишь: 4 4 00000100 4 260 стало 4, потому что 256 возвращается к 0, затем 257 становится 1 и т. д. и 260 становится 4. Итак, еще раз, обратите внимание при использовании небольших типов данных, таких как byte, в ваших программах Arduino: если вы попытаетесь использовать слишком большое число, переменная переполнится, и ее значение будет неправильным. Ваша программа по-прежнему будет компилироваться, но при запуске вы будете получать всевозможные ошибки приложения.

Int

Int или целое число — это один из наиболее распространенных типов переменных, которые вы будете использовать и сталкиваться. Int — это круглое число, которое может быть положительным или отрицательным. На платах Arduino, таких как Uno, Nano и Mega, int хранит 2 байта информации. Так, например, 9999 будет представлено как 00100111 00001111. Хотя вам не обязательно знать двоичное представление, вы можете просто работать с десятичными числами. интервал я = 9999; интервал j = -4578; Вы можете использовать int везде для хранения любой информации, представленной круглым числом. Например: счетчик, температура, количество шагов для шагового двигателя, угол для серводвигателя и т.д. Минимальное значение для 2-байтового целого числа — -32 768, а максимальное значение — +32 767. Что касается байтов, оно может переполниться. Например, если вы попытаетесь присвоить 32 768 (что чуть выше максимального предела), значение, которое вы прочтете внутри переменной, будет -32 768. А если вы попытаетесь присвоить -32 769, то получите +32 767. Поэтому будьте осторожны, чтобы не использовать слишком большие числа с int. На таких платах, как Arduino Due и Zero, целые числа хранят 4 байта, поэтому диапазон значений намного выше: от -2 147 483 648 до 2 147 483 647. Но на классических платах Arduino (Uno, Nano, Mega и т. д.), если вы хотите использовать большие целые числа, вам придется использовать long вместо int.

long

long — это то же самое, что и int, но использует 4 байта. Минимальное значение становится -2 147 483 648, а максимальное значение — 2 147 483 647. При этом вам не нужно слишком беспокоиться о переполнении. длинный l = 4000000; длинный к = - 1234567; Обычно вы используете long, когда знаете (или предполагаете), что размера int будет недостаточно.

Типы переменных Arduino – unsigned

Для стандартных переменных с круглыми числами вы можете добавить «без знака» перед типом данных, чтобы немного изменить его. Если вы добавите «беззнаковый», переменная будет содержать только положительные числа, начиная с 0. Это то, что у нас было для byte, который уже является беззнаковым типом данных (фактически, похожим на unsigned char, который вы увидите позже).

unsigned int

Чтобы создать беззнаковый int: беззнаковое целое число = 45000; Беззнаковое целое число начинается с 0 и имеет максимальное значение 65 535 (4 294 967 295 в 4-байтовой доске, например Due/Zero). Поскольку отрицательных чисел больше нет, все эти числа добавляются к максимальному положительному значению, которое вы можете использовать. Концепция переполнения здесь та же. Если вы попытаетесь использовать 65 536, вы вернетесь к 0. Таким образом, unsigned int можно использовать, если вы уверены, что будете хранить для переменной только положительные числа (это будет обеспечивать это). Кроме того, увеличивается максимальный предел, поэтому, например, если вам нужно использовать переменную от 0 до 50 000 для считывания данных с датчика, это будет хороший вариант.

unsigned long

Чтобы создать unsigned long: unsigned long b = 999999; Беззнаковый длинный номер начинается с 0 и имеет максимальное значение 4 294 967 295, что является очень большим числом. Опять же, использование long очень похоже на тип данных int, только для больших чисел. На Arduino, когда вы пытаетесь узнать время с помощью millis или micros, вы получите результат в формате unsigned long.

Типы переменных Arduino – bool/boolean

Логическое/логическое значение — это особый тип данных Arduino, который содержит только двоичную информацию: 1 или 0 (истина или ложь). Вы будете использовать логические значения для проверки условий, в которых ответом является простой да/нет. Bool isComponentAlive = ложь; void setup() { if (!comComponentAlive) { // запускаем процесс инициализации isComponenetAlive = true; } } недействительный цикл() { } В Arduino вы можете использовать стандартный тип bool C++ или идентичный логический тип. Однако Документация Arduino предполагает, что вы используете только bool.

Типы переменных Arduino – числа с плавающей запятой

На данный момент мы рассмотрели только то, как хранить и использовать круглые числа с помощью Arduino. Но что, если вы хотите сохранить число, например 3,14?

float

Переменная с плавающей запятой может хранить отрицательное или положительное число с плавающей запятой. Что касается каждого типа данных, то он имеет минимум и максимум: от 3,4028235E+38 до -3,4028235E+38. Это намного больше, чем long, хотя число с плавающей запятой также хранится в 4 байтах. Причина проста: оба типа данных хранятся по-разному. Чтобы создать поплавок: плавающее значение f = 2,97; с плавающей запятой г = -6000,0; Таким образом, разрешение чисел с плавающей точкой выше, чем круглых чисел, что делает их удобными для некоторых вычислений или для считывания непрерывного значения с датчика. Однако обратите внимание, что точность для float не равна 100%, в отличие от типов данных с круглыми числами. Например, если вы попытаетесь присвоить 3,00 внутри числа с плавающей запятой, реальное значение может быть чем-то вроде 3,0000001.

double

В таких платах, как Uno, Mega и Nano, double и float идентичны. Например, в Due двойной размер хранится в 8 байтах вместо 4, что отличает его. Вы можете хранить еще большие числа. Одна вещь, которую нужно знать о числах с плавающей запятой (тип данных float или double): микроконтроллеру Arduino потребуется гораздо больше времени для обработки вычислений с числами с плавающей запятой, чем с круглыми числами. Поскольку вычислительная мощность очень ограничена, старайтесь как можно чаще использовать круглые числа и числа с плавающей запятой только тогда, когда у вас нет выбора.

Типы переменных Arduino — текстовые типы данных

Отлично, теперь вы узнали, как хранить логические значения, круглые числа и числа с плавающей запятой. Последняя важная категория здесь — это способ хранения текста, который часто используется, когда вы хотите поделиться информацией с пользователем (текст имеет больше смысла для человека, чем шестнадцатеричный код) или, например, для общения в ASCII.

char (символ)

Тип данных char весьма специфичен, поскольку он в основном используется для хранения букв, но в конечном итоге реальным значением является число от -128 до +127 (хранится в 1 байте). Соответствующие значения букв и цифр вы можете найти в таблице ASCII. Например, буква «F» в верхнем регистре имеет значение 70, а буква «f» в нижнем регистре имеет значение 102. char f_upper = ‘F’; // ИЛИ - то же, что и char f_upper = 70; char f_lower = ‘f’; // ИЛИ - то же, что и char f_lower = 102; Вы можете производить вычисления, используя char. Если к букве «F» добавить +1, число станет 71, а соответствующая буква «G» станет прописной. Тип данных char может быть весьма полезен для отправки данных через Serial/I2C/SPI между устройствами. Он не занимает много места (минимум — 1 байт), поэтому его передача выполняется быстрее, и вы можете напрямую связать действие с буквой — например: «m» для перемещения двигателя, «s» для остановки, «a» для ускорения и т. д.

unsigned char (беззнаковый символ)

Тип данных unsigned char фактически аналогичен типу переменной byte. Оба имеют минимальное значение 0 и максимальное 255. Рекомендуется использовать byte вместо unsigned char.

String

Тип данных String специфичен для Arduino, его нет в стандарте C/C++. Также обратите внимание на заглавную букву «S». Тип переменной — String, а не string. Вы будете использовать этот тип для хранения текста. Вы можете выполнять такие операции, как конкатенация, непосредственно с помощью оператора «+». String a = «Привет»; String b = «мир»; Строковый результат = a + " " + b; String — это класс, а не примитивный тип данных. Чтобы создать строку, вам придется использовать массив символов. С классом String вы упростите свою жизнь, а также получите множество дополнительных функций.

Массив переменных

И, конечно же, каждый из типов данных Arduino, которые вы здесь видели, может храниться внутри массива. Обязательно используйте только один тип данных для всех элементов массива.

int intArray[3] = {1, -2, 3};
long longArray[3] = {4500, -798, 0};
unsigned int unsignedIntArray[3] = {10, 11, 12};
unsigned long unsignedLongArray[3] = {20000, 30000, 999999};
bool boolArray[3] = {false, true, false};
double floatArray[3] = {8.0, 9.9, 12121313131.3};
double doubleArray[3] = {3.14, -3.14, 7.00};
char charArray[3] = {'a', 'b', 'c'}; 
// or directly: = "abc"; 
String stringArray[3] = { "Hello", " ", "World" };

Заключение

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

  • Как вы видели, вы можете получить ошибочные результаты, если некоторые из ваших переменных переполнятся. Поэтому всегда проверяйте, какой диапазон и минимальное/максимальное значение может хранить переменная. — Кроме того, чем сложнее тип данных, тем больше времени потребуется на вычисления. А Arduino гораздо менее мощный, чем «стандартный» компьютер, так что вам придется это принять во внимание. Если вы видите, что ваша программа работает слишком медленно, возможно, вы захотите измерьте, сколько времени занимает определенное действие, и попытайтесь сделать его быстрее, изменив типы данных для некоторых переменных и переупорядочив/оптимизировав операции. .
  • Наконец, если вы используете круглые числа и знаете, что ожидаете только положительные числа, используйте беззнаковую версию типа данных. Ваша программа станет более понятной и менее подверженной ошибкам. Не забывайте, что преждевременная оптимизация — корень всех зол. Когда вы пишете свои программы, используйте больший тип данных, если у вас есть какие-либо сомнения, и оптимизируйте только тогда, когда вы видите, что все работает слишком медленно.