Привет друзья от 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 myvar;
bool myvar = false;
bool myvar = 0;
bool myvar = true;
bool myvar = 1; //1...255 = true
digitalWrite(13, myvar);
if (myvar){
}
if (!myvar){
}
Тип данных bool используется для логических переменных, хранящих два возможных значения: true или false (правда или ложь). Такие переменные удобны для создания программных флажков или защелок, для хранения состояния дискретного входа. Для переменных, которые должны отвечать на вопрос типа да или нет, включен или выключен и подобных.
Здесь представлены примеры возможных вариантов объявления такой переменной и присвоения ей значений. Нам желательно запомнить, что все присваиваемые числа, больше нуля, будут переводить переменную типа bool в состояние true.
Булевскую переменную можно вставлять в функцию digitalWrite() для задания состояния дискретному выходу контроллера.
Так же удобно, как показано на примере, использовать булевскую переменную в условных операторах if. В первом примере условие сработает, если переменная в состоянии true, а во втором наоборот.
Тип | Синоним | Байт | Диапазон |
byte |
uint8_t |
1 | 0...255 |
byte ledPin = 13;
byte pwmvalue = 200;
uint8_t myval = 34;
analogWrite(ledPin, pwmvalue);
Byte незаслуженно недооцененный начинающими программистами тип данных, который почему-то заменен типом int даже в большинстве примеров Arduino IDE. Он хорош тем, что занимает столько же места, сколько и один регистр памяти 8-битных контроллеров Arduino. 8 бит так же занимает и минимальный коммуникационный пакет данных в сети UART, I2C и других. LCD-индикаторы тоже принимают побайтные (8-битные) данные и команды. Поэтому тип byte незаменим при коммуникациях контроллера с различной умной периферией, при прямой работе с регистрами, а так же для хранения целых десятичных чисел в промежутке 0…255.
Тип |
Синоним |
Байт |
Диапазон |
char |
1 | -128...127 |
|
unsigned char |
1 | 0...255 |
char myval = 'A';
char myval = 65;
Serial.println( myval );
Unsigned char – тоже символьный тип данных, но он может хранить цифровые коды символов в диапазоне 0…255. Считается бесполезным. Неоднократно получал награду Золотой валенок.
Теперь посмотрим на саму таблицу ASCII.
Это таблица соответствия заложенных в компилятор символов и их десятичных цифровых кодов. До 32-го символа идут не читаемые символы. В примере мы использовали букву А. Вы можете попробовать найти здесь её цифровой код. А кириллицу кстати тут не найдёшь. Её буквы начинаются с кода 192 в расширенной таблице ASCII. О кириллице продолжим в конце урока.
Тип |
Синоним |
Байт |
Диапазон |
int |
short, int16_t |
2 | -32768...32767 |
unsigned int |
word, uint16_t |
2 | 0...65535 |
int sensValue;
unsigned int sensValue;
int16_t sensValue;
uint16_t sensValue;
sensValue = analogRead(A0);
Int и unsigned int – самые популярные целочисленные типы. Они охватывают большой диапазон целых чисел, но занимают в два раза больше памяти чем тип byte. Переменная типа int занимает 16 бит. Unsigned int – тот же тип, только без знака. Он охватывает только положительные значения 0…65535. Эти два типа хорошо подходят например для хранения считанного значения аналогового входа.
Тип |
Синоним |
Байт |
Диапазон |
long |
int32_t |
4 | -2147483648... 2147483647 |
unsigned long |
uint32_t |
4 | 0...4294967295 |
long sspeed = 115200;
Serial.begin( sspeed );
Serial.println( sspeed );
Типы long и unsigned long используются в тех случаях, когда не хватает размера int. Они тоже содержат целые числа, но, в отличии от int, занимают 32 бита памяти каждый. В переменных такого типа можно хранить например скорость UART-порта контроллера, номер телефона, количество миллисекунд. Такие большие числа в проектах встречаются не часто, но бывают.
Тип |
Синоним |
Байт |
Диапазон |
float |
double |
4 | -3.4028235E+38… 3.4028235E+38 |
float myvar = 145.11734;
float x = 2.9;
int y = x; // 2
float x = 2.9;
int y = x + 0.5; // 3
float x = 2.9;
int y = round( x ); // 3
int x; int y; float z;
z = (float)x / 2.0; //5
Float – тип переменной с плавающей точкой или вещественного числа. Float позволяет получать и хранить значения данных с точностью до 6-7 знаков после запятой. Занимает 32 бита памяти. Применяется для хранения и отображения значения физических величин, результатов математических расчетов, аргументов математических формул, математических констант и так далее.
Обратите внимание на примеры, взятые из документации Arduino, по преобразованию целого числа int в вещественное float – тут есть свои нюансы.
Тип double на других платформах, позволяет получать значения чисел с точностью до 15 знаков после запятой, но у Arduino этот тип полностью аналогичен float.
Тип |
Синоним |
Байт |
Диапазон |
void |
int myfunc1(int myvar1, int myvar2){
return myvar1 + myvar2;
}
void setup() {
}
void loop() {
}
void myfunc2(int myvar1, byte myvar2){
}
Тип void применим к функциям. Это тип-пустышка, который означает, что функция не возвращает никакого значения.
Здесь на примере для сравнения показана функция myfunc1, возвращающая значение типа int и три функции не возвращающие никакого значения, объявленные с типом void.
Тип |
Синоним |
Байт |
Диапазон |
String() |
String myvar = "Hello String";
String myvar = String('a');
String myvar2 = String("This is a string");
String myvar = String(myvar2 + " with more");
String myvar = String(13);
String myvar = String(analogRead(0), DEC);
String myvar = String(45, HEX);
String myvar = String(255, BIN);
String myvar = String(millis(), DEC);
String myvar = String(5.698, 3);
При объявлении типа String мы используем специальный класс для работы со строковыми данными. Он позволяет работать с длинными текстами, ограниченными только размерами памяти конкретного контроллера.
Текст присваивается переменной в двойных кавычках. А так же в Arduino IDE предусмотрена функция String(), которая преобразовывает значения различных типов переменных и констант в строку String. Вы видите примеры того, какие аргументы можно передавать функции String(). Интересно и то, что текст тут можно писать даже на кириллице.
Подробнее о строковых переменных будем говорить позднее.
А пока, напомним себе таблицу типов данных Arduino. Запоминать их все пока не обязательно, а ознакомиться не помешает. И, Чтобы новичков не сильно пугать, выполняя обещание, свожу самые используемые типы переменных в следующую упрощенную таблицу.
Тип |
Байт |
Диапазон |
int |
2 | -32768...32767 |
float |
4 | -3.4028235E+38… 3.4028235E+38 |
String() |
Основные небольшие проекты можно строить всего на 3-х типах переменных, представленных в этой табличке. Без целочисленного int не обойдемся почти нигде. Для точных вычислений и представлений физических величин необходим тип с плавающей точкой. А текстовый String необходим для удобного вывода символов на LCD-индикаторы и в монитор порта.
Кому из вас трудно дается такая информация, просмотрите урок несколько раз. И спасибо за внимание! Всем вам желаю успехов и до новых встреч!
SIM800L как припаять гребенку
Привет, друзья! Это короткая статья под названием SIM800L как припаять гребенку. Модули GSM связ..
Arduino закачивание детской кроватки по крику
Привет друзья! Представляю интересный проект для новоиспеченных папочек. Это - автоматическ..
BMS плата защиты 3х литий-ионных аккумуляторов 10А
Модуль защиты батареи трех литий-ионных аккумуляторовНапряжение отсечки при заряде 4,25 ... 4,3..
109.86грн.
Цифровой датчик температуры и влажности DHT11 с подтягивающим резистором
Измерение относительной влажности в пределах 20 ... 90 %Точность измерения влажности ± 5,0 %RHИ..
71.13грн.
Торцевой подшипник под вращающуюся ось 8 мм
Такие подшипники предназначены для крепления оси червячной передачи на любой из трёх осей перемещени..
72.12грн.