Віримо в перемогу ЗСУ!
Працюємо з 09:00 до 18:00 Пн-Сб

Привет друзья от 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 );

Тип char создан для работы с символьными данными. Одна переменная этого типа может хранить только один текстовый символ. Значение переменной можно присваивать как через символ в одинарных кавычках, так и цифровым эквивалентом. Цифровой код, соответствующий каждому поддерживаемому символу для этого типа переменных, заложен согласно таблице ASCII. Применяется такой тип для работы со строками: отображения текстовой информации на LCD-индикаторах; обмена текстовыми сообщениями через монитор порта и так далее.

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-индикаторы и в монитор порта.

Кому из вас трудно дается такая информация, просмотрите урок несколько раз. И спасибо за внимание! Всем вам желаю успехов и до новых встреч!


<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Arduino SIM800 вхідний дзвінок

Arduino SIM800 вхідний дзвінок

Привіт фанам GSM автоматики! Підпишіться, щоб нічого не пропустити, і почнемо черговий випуск роботи..

Шестерня для зубчатого ременю на 36 зубців під вісь 5 мм

Шестерня для зубчатого ременю на 36 зубців під вісь 5 мм

Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 5 ммКількість зубц..

76.47грн.

Шилд для Arduino Nano и GSM SIM800 с 2реле

Шилд для Arduino Nano и GSM SIM800 с 2реле

Шилд для проектів з використанням плати контролера Arduino Nano та GSM модуля SIM800. Вирішує пробле..

459.84грн.

Світлодіод ультраяскравий 3мм

Світлодіод ультраяскравий 3мм

Над-яскравий світлодіод діаметром 3 ммКорпус прозорий в світлодіодів різного кольору світіння. Тобто..

0.95грн.

Arduino повернення більше однієї змінної функції

Arduino повернення більше однієї змінної функції

Привіт друзі! З відео Arduino функції ми вже знаємо, що в функцію можна передавати багато змінних, а..