Arduino.ru
Очень часто встречаю в примерах скетчей следующие строки:
Пытался разобраться самостоятельно что-то и с чем это едят. но не смог, подскажите что это . или посоветуйте чтиво какое .
- Войдите на сайт для отправки комментариев
Вроде бы так — uint8_t — тип целого числа без знака длиной 8 бит т.е. все равно, что байт — byte, а uint32_t — тип целого числа без знака длиной 32 бит т.е. все равно, что 4 байта — unsigned long .
- Войдите на сайт для отправки комментариев
В интернете я прочел тоже самое, но все равно не понимаю . а в каких случаях его необходимо приминять?
Где то на просторах нашел информацию, что если объявлен uint8_t, то в ОЗУ выделяется 1 байт. все верно?
- Войдите на сайт для отправки комментариев
Ага верно, но байт это 2^8=256 а если значение составляет 65536 или более?
- Войдите на сайт для отправки комментариев
да, то же самое происходит, когда объявляете byte
- Войдите на сайт для отправки комментариев
Если в коде критично важна разрядность целочисельных типов даных то вместо int, char, short и т.д лучше использовать такое определение.
int8_t, int_16, int_32, int_64 — как выше сказано 8,16,32,64 длина, могут принимать минус и плюс, приставка u (uint_8) — тоже только с плюсом.
Вообще «хорошым тоном» написания кода считаеться использование именно таких определений, а связано ето с возможной несовместимостю различных компиляторов и соответственно переноса програмного кода.
Из своего опыта: проблем в использовании одного и другого замечено не было.
Uint8 t arduino что это
Ваша корзина пуста!
- Главная
- Статьи
- Уроки Arduino типы данных для начинающих
Привет друзья от geekmatic.in.ua! Пора заняться полезным делом и разобрать типы данных, представленные в Arduino IDE.
Перед использованием переменных, объектов и функций, мы должны сначала объявить их в тексте программы для того, чтобы компилятор отвел для них отдельное место в ячейках памяти. А для того, чтобы компилятор знал сколько места нужно отводить в памяти, нужно еще и указать типы этих данных при объявлении. Так же типы данных требуются компилятору для правильной интерпретации выражений над ними.
| Тип | Синоним | Байт | Диапазон |
| bool | boolean | 1 | false, true |
| byte | uint8_t | 1 | 0. 255 |
| char | 1 | -128. 127 | |
| unsigned char | 1 | 0. 255 | |
| int | short, int16_t | 2 | -32768. 32767 |
| unsigned int | word, uint16_t | 2 | 0. 65535 |
| long | int32_t | 4 | -2147483648. 2147483647 |
| unsigned long | uint32_t | 4 | 0. 4294967295 |
| float | double | 4 | -3.4028235E+38… 3.4028235E+38 |
| void | |||
| String() |
Так что погружаемся в дебри ардуиновских правил урезанного языка Си и да прибудет с нами мотивация! Обещаю в конце урока выделить самые необходимые типы создаваемых переменных. А пока начнем разбор по порядку с типа bool.
| Тип | Синоним | Байт | Диапазон |
| bool | boolean | 1 | false, true |
Тип данных bool используется для логических переменных, хранящих два возможных значения: true или false (правда или ложь). Такие переменные удобны для создания программных флажков или защелок, для хранения состояния дискретного входа. Для переменных, которые должны отвечать на вопрос типа да или нет, включен или выключен и подобных.
Здесь представлены примеры возможных вариантов объявления такой переменной и присвоения ей значений. Нам желательно запомнить, что все присваиваемые числа, больше нуля, будут переводить переменную типа bool в состояние true.
Булевскую переменную можно вставлять в функцию digitalWrite() для задания состояния дискретному выходу контроллера.
Так же удобно, как показано на примере, использовать булевскую переменную в условных операторах if. В первом примере условие сработает, если переменная в состоянии true, а во втором наоборот.
| Тип | Синоним | Байт | Диапазон |
| byte | uint8_t | 1 | 0. 255 |
Byte незаслуженно недооцененный начинающими программистами тип данных, который почему-то заменен типом int даже в большинстве примеров Arduino IDE. Он хорош тем, что занимает столько же места, сколько и один регистр памяти 8-битных контроллеров Arduino. 8 бит так же занимает и минимальный коммуникационный пакет данных в сети UART, I2C и других. LCD-индикаторы тоже принимают побайтные (8-битные) данные и команды. Поэтому тип byte незаменим при коммуникациях контроллера с различной умной периферией, при прямой работе с регистрами, а так же для хранения целых десятичных чисел в промежутке 0…255.
| Тип | Синоним | Байт | Диапазон |
| char | 1 | -128. 127 | |
| unsigned char | 1 | 0. 255 |
Unsigned char – тоже символьный тип данных, но он может хранить цифровые коды символов в диапазоне 0…255. Считается бесполезным. Неоднократно получал награду Золотой валенок.
Теперь посмотрим на саму таблицу ASCII.
Это таблица соответствия заложенных в компилятор символов и их десятичных цифровых кодов. До 32-го символа идут не читаемые символы. В примере мы использовали букву А. Вы можете попробовать найти здесь её цифровой код. А кириллицу кстати тут не найдёшь. Её буквы начинаются с кода 192 в расширенной таблице ASCII. О кириллице продолжим в конце урока.
| Тип | Синоним | Байт | Диапазон |
| int | short, int16_t | 2 | -32768. 32767 |
| unsigned int | word, uint16_t | 2 | 0. 65535 |
Int и unsigned int – самые популярные целочисленные типы. Они охватывают большой диапазон целых чисел, но занимают в два раза больше памяти чем тип byte. Переменная типа int занимает 16 бит. Unsigned int – тот же тип, только без знака. Он охватывает только положительные значения 0…65535. Эти два типа хорошо подходят например для хранения считанного значения аналогового входа.
| Тип | Синоним | Байт | Диапазон |
| long | int32_t | 4 | -2147483648. 2147483647 |
| unsigned long | uint32_t | 4 | 0. 4294967295 |
Типы long и unsigned long используются в тех случаях, когда не хватает размера int. Они тоже содержат целые числа, но, в отличии от int, занимают 32 бита памяти каждый. В переменных такого типа можно хранить например скорость UART-порта контроллера, номер телефона, количество миллисекунд. Такие большие числа в проектах встречаются не часто, но бывают.
| Тип | Синоним | Байт | Диапазон |
| float | double | 4 | -3.4028235E+38… 3.4028235E+38 |
Float – тип переменной с плавающей точкой или вещественного числа. Float позволяет получать и хранить значения данных с точностью до 6-7 знаков после запятой. Занимает 32 бита памяти. Применяется для хранения и отображения значения физических величин, результатов математических расчетов, аргументов математических формул, математических констант и так далее.
Обратите внимание на примеры, взятые из документации Arduino, по преобразованию целого числа int в вещественное float – тут есть свои нюансы.
Тип double на других платформах, позволяет получать значения чисел с точностью до 15 знаков после запятой, но у Arduino этот тип полностью аналогичен float.
| Тип | Синоним | Байт | Диапазон |
| void |
Тип void применим к функциям. Это тип-пустышка, который означает, что функция не возвращает никакого значения.
Здесь на примере для сравнения показана функция myfunc1, возвращающая значение типа int и три функции не возвращающие никакого значения, объявленные с типом void.
| Тип | Синоним | Байт | Диапазон |
| String() |
При объявлении типа String мы используем специальный класс для работы со строковыми данными. Он позволяет работать с длинными текстами, ограниченными только размерами памяти конкретного контроллера.
Текст присваивается переменной в двойных кавычках. А так же в Arduino IDE предусмотрена функция String(), которая преобразовывает значения различных типов переменных и констант в строку String. Вы видите примеры того, какие аргументы можно передавать функции String(). Интересно и то, что текст тут можно писать даже на кириллице.
Подробнее о строковых переменных будем говорить позднее.
А пока, напомним себе таблицу типов данных Arduino. Запоминать их все пока не обязательно, а ознакомиться не помешает. И, Чтобы новичков не сильно пугать, выполняя обещание, свожу самые используемые типы переменных в следующую упрощенную таблицу.
| Тип | Байт | Диапазон |
| int | 2 | -32768. 32767 |
| float | 4 | -3.4028235E+38… 3.4028235E+38 |
| String() |
Основные небольшие проекты можно строить всего на 3-х типах переменных, представленных в этой табличке. Без целочисленного int не обойдемся почти нигде. Для точных вычислений и представлений физических величин необходим тип с плавающей точкой. А текстовый String необходим для удобного вывода символов на LCD-индикаторы и в монитор порта.
Кому из вас трудно дается такая информация, просмотрите урок несколько раз. И спасибо за внимание! Всем вам желаю успехов и до новых встреч!
Типы данных в Arduino IDE и их вес (размер) в байтах.
Arduino IDE — это интегрированная среда разработки (IDE), которая используется для программирования микроконтроллеров Arduino. В Arduino IDE используются различные типы данных, которые определяют, какой тип информации можно хранить и обрабатываеть микроконтроллером.

Типы данных и их вес (размер) в байтах:
- int:
- Описание: Тип данных int (integer) представляет целые числа со знаком.
- Размер: 2 байта (от -32,768 до 32,767).
- unsigned int:
- Описание: Тип данных unsigned int представляет целые числа без знака.
- Размер: 2 байта (от 0 до 65,535).
- long:
- Описание: Тип данных long представляет длинные целые числа со знаком.
- Размер: 4 байта (от -2,147,483,648 до 2,147,483,647).
- unsigned long:
- Описание: Тип данных unsigned long представляет длинные целые числа без знака.
- Размер: 4 байта (от 0 до 4,294,967,295).
- float:
- Описание: Тип данных float представляет числа с плавающей точкой одинарной точности.
- Размер: 4 байта (от -3.4028235E+38 до 3.4028235E+38).
- double:
- Описание: Тип данных double представляет числа с плавающей точкой двойной точности.
- Размер: 8 байт (от -1.7976931348623157E+308 до 1.7976931348623157E+308).
- uint8_t:
- Описание: Тип данных uint8_t представляет беззнаковые целые числа размером 8 бит (1 байт).
- Размер: 1 байт (от 0 до 255).
- int8_t:
- Описание: Тип данных int8_t представляет целые числа со знаком размером 8 бит (1 байт).
- Размер: 1 байт (от -128 до 127).
- uint16_t:
- Описание: Тип данных uint16_t представляет беззнаковые целые числа размером 16 бит (2 байта).
- Размер: 2 байта (от 0 до 65,535).
- int16_t:
- Описание: Тип данных int16_t представляет целые числа со знаком размером 16 бит (2 байта).
- Размер: 2 байта (от -32,768 до 32,767).
- uint32_t:
- Описание: Тип данных uint32_t представляет беззнаковые целые числа размером 32 бита (4 байта).
- Размер: 4 байта (от 0 до 4,294,967,295).
- int32_t:
- Описание: Тип данных int32_t представляет целые числа со знаком размером 32 бита (4 байта).
- Размер: 4 байта (от -2,147,483,648 до 2,147,483,647).
- uint64_t:
- Описание: Тип данных uint64_t представляет беззнаковые целые числа размером 64 бита (8 байт).
- Размер: 8 байт (от 0 до 18,446,744,073,709,551,615).
- int64_t:
- Описание: Тип данных int64_t представляет целые числа со знаком размером 64 бита (8 байт).
- Размер: 8 байт (от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807).
- boolean:
- Описание: Тип данных boolean представляет логические значения true (истина) или false (ложь).
- Размер: 1 байт (обычно хранит 0 для false и 1 для true, но фактически использует только 1 бит).
- char:
- Описание: Тип данных char представляет одиночные символы или небольшие целые числа (хранит ASCII-код символа).
- Размер: 1 байт (от -128 до 127 или от 0 до 255, в зависимости от использования со знаком или без).
- byte:
- Описание: Тип данных byte представляет беззнаковые целые числа размером 8 бит (1 байт).
- Размер: 1 байт (от 0 до 255).
Пример кода:

Типы данных.
| Тип данных | Вес (размер) в байтах | Диапазон значений |
|---|---|---|
| int | 2 | -32,768 до 32,767 |
| unsigned int | 2 | 0 до 65,535 |
| long | 4 | -2,147,483,648 до 2,147,483,647 |
| unsigned long | 4 | 0 до 4,294,967,295 |
| float | 4 | -3.4028235E+38 до 3.4028235E+38 |
| double | 8 | -1.7976931348623157E+308 до 1.7976931348623157E+308 |
| uint8_t | 1 | 0 до 255 |
| int8_t | 1 | -128 до 127 |
| uint16_t | 2 | 0 до 65,535 |
| int16_t | 2 | -32,768 до 32,767 |
| uint32_t | 4 | 0 до 4,294,967,295 |
| int32_t | 4 | -2,147,483,648 до 2,147,483,647 |
| uint64_t | 8 | 0 до 18,446,744,073,709,551,615 |
| int64_t | 8 | -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 |
| boolean | 1 | true (истина) или false (ложь) |
| char | 1 | -128 до 127 или 0 до 255 |
| byte | 1 | 0 до 255 |
Примечание:
Размеры типов данных, как указано выше, верны для микроконтроллеров AVR (например, Arduino Uno) и многих других платформ на базе AVR. Если вы используете Arduino на базе других микроконтроллеров (например, ARM) или другой версии Arduino IDE, размеры типов данных могут отличаться.
Заключение:
Используя различные типы данных в Arduino IDE, вы можете эффективно управлять памятью и работать с различными типами информации на микроконтроллере Arduino. Знание размеров типов данных поможет вам избежать ненужных переполнений памяти и эффективно использовать ограниченные ресурсы устройства.
Понравилась статья Типы данных в Arduino IDE и их вес (размер) в байтах? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Типы данных, переменные

Переменная – это ячейка в оперативной памяти микроконтроллера, которая имеет своё уникальное название (а также адрес в памяти) и хранит значение соответственно своему размеру. К переменной мы можем обратиться по её имени или адресу и получить это значение, либо изменить его. Зачем это нужно? В переменной могут храниться п ромежуточные результаты вычислений, полученные “снаружи” данные (с датчиков, Интернета, интерфейсов связи) и так далее.
Измерение информации
Прежде чем перейти к переменным и их типам, нужно вспомнить школьный курс информатики, а именно – как хранятся данные в “цифровом” мире. Любая память состоит из элементарных ячеек, которые имеют всего два состояния: 0 и 1. Эта единица информации называется бит (bit). Минимальным блоком памяти, к которому можно обратиться из программы по имени или адресу, является байт (byte), который в Arduino (и в большинстве других платформ и процессоров) состоит из 8 бит, таким образом любой тип данных будет кратен 1 байту.
Максимальное количество значений, которое можно записать в один байт, составляет 2^8 = 256. В программировании счёт всегда начинается с нуля, поэтому один байт может хранить число от 0 до 255. Более подробно о двоичном представлении информации и битовых операциях мы поговорим в отдельном уроке.
Стандартные типы переменных в Arduino по своему размеру кратны степени двойки, давайте их распишем:
- 1 байт = 8 бит = 256
- 2 байта = 16 бит = 65 536
- 4 байта = 32 бита = 4 294 967 296
Типы данных
Переменные разных типов имеют разные особенности и позволяют хранить числа в разных диапазонах.
- (*) – да, bool занимает 1 байт (8 бит), так как это минимальная адресуемая ячейка памяти. Есть способы запаковать логические переменные в 1 бит, о них поговорим в другом уроке.
- (**) – на ESP8266/ESP32 int и unsigned int занимает 4 байта, то есть является аналогами типов long и unsigned long !
- (***) – Компилятор также поддерживает 64 битные числа. Стандартные Arduino-библиотеки с переменными этого типа не работают, поэтому можно использовать только в своём коде.
Целочисленные типы
Переменные целочисленных типов нужны для хранения целых чисел. В своей программе рекомендуется использовать альтернативное название типов (второй столбец в таблице выше), потому что:
- Проще ориентироваться в максимальных значениях
- Легче запомнить
- Название более короткое
- Проще изменить один тип на другой
- Размер переменной задан жёстко и не зависит от платформы (например int на AVR это 2 байта, а на esp8266 – 4 байта)
Максимальные значения хранятся в константах, которые можно использовать в коде. Иногда это помогает избавиться от лишних вычислений:
- UINT8_MAX – 255
- INT8_MAX – 127
- UINT16_MAX – 65 535
- INT16_MAX – 32 767
- UINT32_MAX – 4 294 967 295
- INT32_MAX – 2 147 483 647
- UINT64_MAX – 18 446 744 073 709 551 615
- INT64_MAX – 9 223 372 036 854 775 807
Логический тип
bool – логический, он же булевый (придуман Джорджем Булем) тип данных, принимает значения 0 и 1 или false и true – ложь и правда. Используется для хранения состояний, например включено/выключено, а также для работы в условных конструкциях.
Также переменная типа bool принимает значение true , если присвоить ей любое отличное от нуля число.
Символьный тип
char – тип данных для хранения символов, символ указывается в одинарных кавычках: char var = ‘a’; . По факту это целочисленный тип данных, а переменная хранит номер (код) символа в таблице ASCII:

Отдельный символьный тип данных нужен для удобства работы, чтобы программа могла понять разницу между числом и символом, например для вывода на дисплей (чтобы вывести именно букву A, а не число 65). Из символов можно составлять строки, об этом более подробно поговорим в уроках про символьные строки и String-строки.
Дробные числа
float (англ. float – плавающий) – тип данных для чисел с плавающей точкой, т.е. десятичных дробей. Arduino поддерживает три типа ввода чисел с плавающей точкой:
| Тип записи | Пример | Чему равно |
| Десятичная дробь | 20.5 | 20.5 |
| Научный | 2.34E5 | 2.34*10^5 или 234000 |
| Инженерный | 67e-12 | 67*10^-12 или 0.000000000067 |
Выше в таблице есть пометка “точность: 6-7 знаков” – это означает, что в этом типе можно хранить числа, размер которых не больше 6-7 цифр, остальные цифры будут утеряны! Причём целой части отдаётся приоритет. Вот так это выглядит в числах (в комментарии – реальное число, которое записалось в переменную):
Другие особенности float чисел и работу с ними мы рассмотрим в уроках про математические операции и условия.
Объявление и инициализация
- Объявление переменной – резервирование ячейки памяти указанного типа на имя: тип_данных имя;
- Присваивание – задание переменной значения при помощи оператора = (равно): имя = значение;
- Инициализация переменной – объявление и присваивание начального значения: тип_данных имя = значение;
Можно объявить и инициализировать несколько переменных через запятую:
- Переменная должна быть объявлена до использования, буквально выше по коду. Иначе вы получите ошибку Not declared in this scope – переменная не объявлена.
- Нельзя объявить две и более переменных с одинаковым именем в одной области определения.
Константы
Что такое константа понятно из её названия – что-то, значение чего мы можем только прочитать и не можем изменить: при попытке изменить получим ошибку компиляции. Задать константу можно двумя способами:
Как переменную, указав перед типом данных слово const: const тип_данных имя = значение; . Пример: const byte myConst = 10; . По сути это будет обычная переменная, но её значение нельзя поменять. Особенности:
- Занимает место в оперативной памяти, но может быть оптимизирована (вырезана) компилятором, если используется просто как значение.
- Имеет адрес в памяти, по которому к ней можно обратиться.
- Вычисления с ней не оптимизируются и чаще всего выполняются точно так же, как с обычными переменными.
- Компилятор выдаст ошибку, если имя константы совпадает с именем другой переменной в программе.
При помощи директивы #define, без знака равенства и точки с запятой в конце: #define имя значение . Пример: #define BTN_PIN 10 . Работает так: указанное имя буквально заменяется в тексте программы на указанное значение. Такая дефайн-константа:
- Не занимает места в оперативной памяти, а хранится во Flash памяти как часть кода программы.
- Не имеет адреса в оперативной памяти.
- Вычисления с такими константами оптимизируются и выполняются быстрее, так как это просто цифры.
- Если имя дефайн-константы совпадёт с именем другого “объекта” в программе или даже в библиотеке – работа может быть непредсказуемой: можно получить невнятную ошибку компиляции, либо программа может просто работать некорректно! Дефайн буквально заменяет текст в коде программы, это довольно опасная штука.
Область видимости
Переменные, константы const и другие создаваемые пользователем данные имеют такое важное понятие, как область видимости. Она бывает глобальной и локальной.
Глобальная
- Объявляется вне функций, например просто в начале программы.
- Доступна для чтения и записи в любом месте программы.
- Находится в оперативной памяти на всём протяжении работы программы, то есть не теряет своё значение.
- При объявлении имеет нулевое значение.
Локальная
- Объявляется внутри любого блока кода, заключённого в < фигурные скобки >.
- Доступна для чтения и записи только внутри своего блока кода (и во всех вложенных в него).
- Находится в оперативной памяти с момента объявления и до закрывающей фигурной скобки, то есть удаляется из памяти и её значение стирается.
- При объявлении имеет случайное значение.
Важный момент: если имя локальной переменной совпадает с одной из глобальных, то приоритет обращения отдаётся локальной переменной (в её области определения).
Статические переменные
Вспомним, как работает обычная локальная переменная: при входе в свой блок кода локальная переменная создаётся заново, а при выходе – удаляется из памяти и теряет своё значение. Если локальная переменная объявлена как static – она будет сохранять своё значение на всём протяжении работы программы, но область видимости останется локальной: взаимодействовать с переменной можно будет только внутри блока кода, где она создана (и во всех вложенных в него).
Статические переменные позволяют более красиво организовывать свой код, избавляясь от лишних глобальных переменных.
Преобразование типов
Иногда требуется преобразовать один тип данных в другой: например, функция принимает int , а вы хотите передать ей byte . В большинстве случаев компилятор сам разберётся и преобразует byte в int , но иногда вылетает ошибка в стиле “попытка передать byte туда, где ждут int“. В таком случае можно преобразовать тип данных, для этого достаточно указать нужный тип данных в скобках перед преобразуемой переменной (тип_данных)переменная , иногда можно встретить запись тип_данных(переменная) . Результат вернёт переменную с новым типом данных, сам же тип данной у переменной не изменится. Например:
