Наконец добрались до одного из главных вопросов- переменные. Часть из них уже была описана в первом и втором уроках, настало время описать их все. Начнем по возрастанию.
byte
Первый тип переменных, занимает 1 байт памяти и может принимать целые значения от 0 до 255. Им хорошо описывать номера пинов и вообще любые переменные, значения которых находятся в данных пределах. Преимущества- занимает мало места, недостатки- слишком малый диапазон значений.
Записывается как byte n1=100;— переменной n1 типа byte присваивается значение 100.
boolean
Второй тип, занимает 1 байт памяти и может принимать только два значения- TRUE или FALSE. Очень удобен для переключения цифровых входов/ выходов в логические состояния.
Записывается как boolean run = false;— переменной run типа boolean присваивается значение false.
char
Третий тип, занимает 1 байт на знак, предназначен для написания текста в нормальном виде или посредством ASCII- кодов. Принимает значения от -128 до 127.
Таблица ASCII- кодов.
Значение Буква 0 null 1 2 3 4 5 6 7 8 9 tab 10 line feed 11 12 13 carriage return 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Значение Буква 32 space 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? |
Значение Буква 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ |
Значение Буква 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 |
char myChar = ‘A’;
char myChar = 65; // обе записи эквивалентны — переменной myChar типа char присваивается значение A.
char errorMessage = «choose another option»;- переменной errorMessage присваивается значение choose another option.
unsigned char
Четвертый тип, это копия типа byte и в программировании предпочитают использовать именно тип byte. unsigned char используется крайне редко.
Записывается как unsigned char myChar = 240;— переменной myChar типа unsigned char присваивается значение 240.
integer
Пятый тип, записывается как int, может принимать целые значения от -32768 до 32768. Размер integer-2 байта (кроме ARDUINO DUE, в нем INT занимает уже 4 байта но значения принимает от -2147483648 до 2147483647 ). Занимает мало места но диапазон гораздо выше чем у переменных типа byte.
Записывается как int n1=100;— переменной типа integer присваивается значение 100.
В нормальном виде тип integer отображается в десятичном виде, но можно отображать и в бинарном, восьмеричном, шестнадцатиричном коде.
Примеры:
101 -десятиричный код, значение равно 101.
B101 -двоичный(бинарный) код, значение равно 5. Перед значением ставится буква B.
0101 -восьмеричный код, значение равно 65 ((1 * 8^2) + (0 * 8^1) + 1). Перед значением ставится 0 (ноль).
0x101 -шестнадцатиричный код, значение равно 257 ((1 * 16^2) + (0 * 16^1) + 1). Перед значением ставится 0x.
Кроме того константы типа integer можно преобразовывать в другие типы, если переменная не входит в диапазон integer:
- ‘u’ или ‘U’ преобразовывает в формат unsigned data. Например:
33u
- ‘l’ или ‘L’ преобразовывает в формат long. Например:
100000L
- ‘ul’ или ‘UL’ преобразовывает в формат unsigned long. Например:
32767ul
unsigned integer
Шестой тип, записывается как unsigned int, имеет размер 2 байта и принимает целые значения от 0 до 65535. В контроллере ARDUINO DUE занимает 4 байта и может принимать целые значения от 0 до 4294967295.
Записывается как unsigned int n1=100;— переменной n1 типа unsigned integer присваивается значение 100.
word
Седьмой тип, записывается так же, занимает 2 байта и принимает значения от 0 до 65535. Применяется редко, вместо него обычно используют unsigned integer.
Записывается как word w = 10000;— переменной w типа word присваивается значение 10000.
long
Восьмой тип, записывается так же, занимает 4 байта, принимает целые значения от -2147483648 до 2147483647.
Записывается как long var = 120000; переменной var типа long присваивается значение 120000.
Может использоваться в константах для преобразования типа integer в тип long, для этого в конце числа нужно дописать L и например
int n1=100000L; — преобразует константу n1 типа integer в тип long и присваивает ей значение 100000.
unsigned long
Девятый тип, занимает как и long 4 байта но, в отличии от него, не может принимать отрицательные значения, хотя верхний предел выше в 2 раза. Принимает значения от 0 до 4294967295.
Записывается как unsigned long var = 120000; переменной var типа unsigned long присваивается значение 120000.
short
Десятый тип, занимает 2 байта, принимает целые значения от -32768 до 32767.
Записывается как short var = 12000; переменной var типа short присваивается значение 12000.
float
Одиннадцатый тип, занимает 4 байта, принимает значения с плавающей точкой в пределах от -3.4028235E+38 до 3.4028235E+38. Предпочтительно использовать тип double, вместо float, тем более что занимает он такой же размер- 4 байта, т.к. этот тип выкидывает странные штуки, и если разделить 8.0/4.0, то это вовсе не означает что результат будет равен 2.0. Максимальная точность ограничивается 6-7 разрядами цифр вне зависимости от положения запятой.
Записывается как float var = 3.14157; переменной var типа float присваивается значение 3.14157.
double
Двенадцатый тип, занимает 4 байта (на ARDUINO DUE занимает 8 байт), не имеет ограничений по точности в сравнении с float, принимает значения с плавающей точкой в пределах от -3.4028235E+38 до 3.4028235E+38.
Записывается как long var = 3.14157; переменной var типа long присваивается значение 3.14157.
string
Тринадцатый тип. Вообще то встречается 2 типа string- string array (текстовый массив) и String (текстовая переменная).
char Str3[8] = {‘a’, ‘r’, ‘d’, ‘u’, ‘i’, ‘n’, ‘o’, ‘\0’}; — объявляет массив из 8 разрядов с 0 до 7, недостающий 7 разряд- присваивается null.
String stringOne = «Hello String»; — переменной stringOne типа String присваивается значение Hello String.
array
Четырнадцатый тип. Массив. Можно указывать размер массива в квадратных скобках. Счет начинается с 0, недостающим значениям присваивается null.
int mySensVals[6] = {2, 4, -8, 3, 2}; — массив значений integer.
Можно не указывать разрядность массива, компилятор ARDUINO сам посчитает элементы и выставит правильный размер начиная с 0.
int myPins[] = {2, 4, 8, 3, 6}; — аналогично записи int myPins[4] = {2, 4, 8, 3, 6};
Область применения:
Где же можно применять переменные и где можно обойтись без них.
Прежде всего стоит определиться- сколько раз будет использована переменная. Если она будет использоваться один раз то не стоит ее вводить, гораздо проще просто вставить формулу в то место где должна быть эта переменная. МК просто просчитает формулу и двинется дальше. Если же переменная будет использоваться несколько раз- лучше ввести ее в программу один раз и зарезервировать под нее память нежели МК будет несколько раз высчитывать одни и те же значения- этим вы повысите скорость работы. Еще один совет: при определении переменных желательно указывать в названии ее тип- так вы будете сразу определять какой тип переменной вы используете. Например:
Объявили переменную:
int n1=10000;
Когда вы будете писать программу вы каждый раз будете думать- а какой тип имеет переменная n1? Каждый раз придется искать в коде где она объявлена, это занимает время и поднимает нервы, в конце концов где нибудь закрадется ошибка, опять отлаживать и т.д. Поэтому гораздо проще было бы написать:
int intn1=10000;
Три первых буквы уже указали ее тип- integer, можете сами определить для себя- указывать только первые буквы типов, например in1— что значит integer n1. Так будет гораздо проще и считается хорошим тоном в программировании.
Основные ошибки при работе с переменными:
- неправильное присваивание переменным одного типа значений другого типа. Например:
int x=12;
void loop{
x=«Hello String»; — Присваиваем переменной типа integer переменную типа String.
}
- Выход за пределы значений переменной. Например:
int x= 12568+50000; — максимальное значение integer 32768.
- Неправильное написание типа переменной. Например:
imt x= 12568; — imt вместо int.