Віримо в перемогу ЗСУ!
Магазин у відпустці до 03.07.2022

Здравствуйте друзья! Я рад, презентовать вам новый урок под названием Arduino константы!


Константы – это способ передать такие данные в контроллер, которые нельзя будет изменять после загрузки программы. Из этого следует, что ввести их может только программист, а пользователь изменять их не сможет. Частично их можно описать, как переменные только для чтения. 

В Arduino IDE предусмотрены именованные и литеральные константы, предопределенные и пользовательские. Рассмотрим их всех по-отдельности и в конце отдельно раскроем тему текстовых констант. 


b = 9.8 + 34.6 / 2.7;

n = 0.005;

k = (var1+var2)/100;

String svar1 = "geekmatic.in.ua";

char myChar = 'A';

Serial.println(572.45);
Serial.println("MyText");

Литеральные константы – это просто числа для числовых данных или символы для текстовых данных, которые мы прямо указываем в выражениях программы. Мы можем указывать их в формулах, условных операторах или присваивать их значение переменным, аргументам функций или именованным константам.


33u
456743U
100000L
32767ul

n = B101; //двоичное число все равно что 
5 = ((1 * 2^2) + (0 * 2^1) + 1)

n = 0x101;  //16-ричное число все равно что 257 = ((1 * 16^2) + (0 * 16^1) + 1)
По умолчанию целочисленные литеральные константы интерпретируются как тип int, и если нам необходимо вводить в скетч данные, которые не влезут в тип int, то желательно использовать следующие символы в конце цифры.
Не нужно их пугаться – символ u или U конкретизирует, что константа имеет атрибут unsigned. То есть может принимать только положительные значения.
А символ l или L означает форсирование константы как тип long.
Литеральные константы иногда необходимо или удобно писать в 16-ричной, 8-ричной или двоичной системах исчисления. Честно говоря 8-ричная вряд ли понадобится, но остальные точно нужны.
Примеры приведены на иллюстрации выше.

#define Var1 56

const byte PinA = 2;
const byte PinB = 3;
const int PinC = 4;

const String var = "myText";

void setup{

  pinMode(PinA, INPUT);
  pinMode(PinB, INPUT);
  pinMode(PinC, OUTPUT);

}

Именованные константы имеют свое имя. В документации Arduino например  указано только одно преимущество использования именованных констант – это удобство чтения программы. Действительно, если раздать им четкие однозначные имена, то программа будет читаться программистом значительно проще. Но так же именованные константы дают нам возможность быстрого переконфигурирования программы в начале её текста. Расставив константы по всей программе, мы можем иметь доступ к изменению их значений в едином месте. Так например можно объявить ряд именованных констант с номерами пинов, и использовать имена пинов многократно в программе, а при необходимости быстро сменить номер необходимого пина в начале скетча и не искать по всей программе все упоминания об этом пине. Часто использование константы взамен переменной, которая не будет менять значение при выполнении программы, позволяет даже выиграть в освобождении памяти контроллера.

false
true

HIGH
LOW

INPUT
INPUT_PULLUP
OUTPUT

LED_BUILTIN

D1...D13..., A0...A7...

Создатели Arduino IDE предусмотрели ряд предопределенных именованных констант для удобства пользователей и облегчения чтения скетчей. Поблагодарим их за это. И вы должны здесь понять, что за каждой из этих констант скрывается предопределенное целое число. 
Константа false означает логическую ложь и на практике она хранит значение 0. Константа true означает логическую правду и на практике она равняется не нулю. То есть, если true в условном операторе сравнивать любым целым числом, не равным нулю, то условие выполнится. Это число может принимать и отрицательные значения.
Константа HIGH означает высокий логический уровень (5В для 5-вольтовых контроллеров или 3,3В для 3,3-вольтовых контроллеров) и на практике содержит число 1. Константа LOW означает низкий логический уровень (меньше 1,5В для 5-вольтовых контроллеров или меньше 1,0В для 3,3-вольтовых контроллеров) и на практике просто содержит ноль.
Константы INPUT, INPUT_PULLUP и OUTPUT созданы для конфигурирования входов/выходов контроллера. Вывод, сконфигурированный как INPUT, работает как дискретный вход. Вывод, сконфигурированный как OUTPUT, работает как дискретный выход. А конфигурация INPUT_PULLUP переводит пин контроллера в режим дискретного входа с подтяжкой на плюс питания.
Константа LED_BUILTIN содержит номер пина, к которому на стандартной плате выбранного в менеджере плат контроллера подключен сигнальный светодиод.
Константы вида D1...D13..., A0...A7... повторяют обозначения на плате контроллера и содержат номера соответствующих пинов. Константы для обозначения пинов могут содержать разные значения для разных контроллеров. Изменение происходит автоматически при выборе вами контроллера в менеджере плат.

#define MYCONST 56

const byte PinB = 3;
const int PinC = 4;

const float Var1 = 78.234;

const String Var = “myText”;

Пользовательские именованные константы дают нам широкое поле для творчества. Самое частое их применение для раздачи имен пинам контроллера, соответственно конкретному проекту. Так же мне например приходилось использовать массивы констант для хранения нот мелодии.  
Рекомендуется именованным константам давать имя с большой буквы.
Константы можно объявлять через  #define имя литерал
но рекомендуется объявлять их только через const имя = литерал;

const char MyChar = 'A';
const char Str1[] = "arduino";
const char Str2[8] = "arduino";
const String Var = "myText";
const String Var = F("myText");
Serial.print(F("Write something"));

Отдельно стоит остановиться на символьных константах. 

Символьные литералы типа char декларируются через одиночные кавычки , а их массивы и литералы типа String через двойные кавычки.

Для хранения литералов констант типа String не в оперативной памяти RAM, а в FLASH памяти контроллера, при объявлении необходимо использовать синтаксис с буквой F. 

Подробнее эту обширную тему с декларацией символьных констант и переменных нужно будет рассмотреть на отдельном уроке.

Спасибо за внимание!
<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Модуль MOSFET-транзистора IRLR2905

Модуль MOSFET-транзистора IRLR2905

Модуль (драйвер) силового MOSFET-транзистора для подключения мощной нагрузки на выход контролле..

50.16грн.

Разъемный коннектор под винт на плату 2 контакта

Разъемный коннектор под винт на плату 2 контакта

Двойной разъемный винтовой коннектор без поворота для монтажа на печатную плату.Используется для быс..

21.60грн.

Твердотельное реле 40А

Твердотельное реле 40А

Реле без механических контактов на 40 А. Силовым элементом данного реле является симистор.Гальваниче..

253.38грн.

Модуль блока питания 3,3В 1А

Модуль блока питания 3,3В 1А

Удобный модуль питания из 220В AC в 3,3В постоянного тока. Разработан для установки на печатную плат..

128.12грн.

Набор перемычек (мама-папа) 40шт 20см

Набор перемычек (мама-папа) 40шт 20см

Набор соединительных проводов для соединения плат контроллера с периферией без пайки. Подходят под с..

44.94грн.

Теги arduino, arduino pro, arduino uno, arduino tutorial, ардуино, скетч, arduino projects, arduino уроки, arduino уроки программирования, arduino урок 1, arduino ide уроки, arduino первые уроки, arduino уроки для начинающих, alex gyver arduino уроки, arduino nano, arduino структура программы, микроконтроллер, arduino ide, ардуино уроки, ардуино уроки для начинающих, ардуино урок 1, arduino setup, arduino loop, программировать контроллер, arduino начало, arduino для начинающих